python 【函数】
python 函数
一、什么是函数
python中的len方法不让用了,你怎么办?
li = [1, 2, 3, 43, 'fdsa', 'alex']
count = 0
for i in li:
count += 1
print(count)
s1 = 'fdsgdfkjlgdfgrewioj'
count = 0
for i in s1:
count += 1
print(count)
#代码重复 可读性差
def 函数名(参数1,参数2)
''' 函数注释'''
print('函数体')
return 返回值
定义:def关键字开头,空格之后接函数名和圆括号,最后还要加一个冒号。
def是固定的,不能变。
函数名:函数名是包含字母,数字,下划线的任意组合,但是不能以数字开头。虽然函数名可以随便取名,但是一般尽量定义成可以表示函数功能的。
函数名 + () 才能执行这个函数
#模拟len函数
s1 = 'fdsgdfkjlgdfgrewioj'
def my_len():
count = 0
for i in s1:
count += 1
# print(count) #函数的内部尽量不要是使用print
my_len() # 函数名+() 执行函数 = 函数的调用者
#但是跟原来的len函数还有不同,因为函数以功能为导向,缺少返回值。
二 、 函数的返回值
1.return的作用:结束一个函数的执行 (类似于循环中的break)
2.首先返回值可以是任意的数据类型。
3.函数可以有返回值:如果有返回值,必须要用变量接收才有效果
也可以没有返回值:
没有返回值的时候分三种情况:
1.当不写return的时候,函数的返回值为None
2.当只写一个return的时候,函数的返回值为None
3.return None的时候,函数的返回值为None(几乎不用)
4.return返回一个值(一个变量)
5.return返回多个值(多个变量):多个值之间用逗号隔开,以元组的形式返回。
接收:可以用一个变量接收,也可以用多个变量接收,返回几个就用几个变量去接收
# 1,遇到return,结束函数。
def func1():
print(11)
print(22)
return
print(333)
print(444)
func1()
# 2,给函数的调用者(执行者)返回值。
# 无 return 返回None
# return 不写 或者 None 返回None
# return 返回单个数.
# return 返回多个数,将多个数放在元组中返回。
def my_len():
count = 0
for i in s1:
count += 1
return 666
print(my_len(),type(my_len()))
def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count,'老男孩'
print(my_len(),type(my_len()))
#分别赋值
def my_len():
count = 0
for i in s1:
count += 1
return 666,222,count
ret1,ret2,ret3 = my_len() # (666, 222, 19,)
print(ret1)
print(ret2)
print(ret3)
def my_len():
count = 0
for i in s1:
count += 1
return count
print(my_len())#两步执行,先执行函数,return返回给函数执行者,再print
print(len(s1))
四、函数的传参
#函数的传参
li = [1, 2, 3, 43, 'fdsa', 'alex']
s1 = 'fdsgdfkjlgdfgrewioj'
def my_len(a): # 函数的定义()放的是形式参数,形参
count = 0
for i in a:
count += 1
return count
ret = my_len(li) # 函数的执行() 实际参数,实参
print(ret)
print(len(s1))
函数传参的两大方向
1、实参角度(3种)
# 1,位置参数。 必须一一对应,按顺序
def func1(x,y):
print(x,y)
func1(1, 2)
# 2,关键字参数。必须一一对应,不分顺序。
def func1(x,y,z):
print(x,y,z)
func1(y=2,x=1,z=5,)
def max(a,b):
if a > b:
return a
else:
return b
print(max(100,102))
#三元表达式
def max(a,b):return a if a > b else b
print(max(100,102))
# 3,混合参数。一一对应 且 关键字参数必须在位置参数后面。
def func2(argv1,argv2,argv3):
print(argv1)
print(argv2)
print(argv3)
func2(1,2,argv3=4)
2、形参角度(3种)
# 1,位置参数。 必须一一对应,按顺序
def func1(x,y):
print(x,y)
func1(1,2)
# 2,默认参数。 必须在位置参数后面。
#将变化比较小的值设置成默认参数(比如一个班的男生多,女生就几个,就可以设置个默认值参数)
#定义:默认参数可以不传,不传的时候用的就是默认值,如果传会覆盖默认值。默认的值是在定义函数的时候就已经确定了的
def register(name,sex='男'):
with open('register',encoding='utf-8',mode='a') as f1:
f1.write('{} {}\n'.format(name,sex))
while True:
username = input('请输入姓名:/q 或者 Q 退出')
if username.upper() == 'Q':break
if 'a' in username:
sex = input('请输入性别:')
register(username,sex)
else:
register(username)
#动态参数 (*args,**kwargs 万能参数)
def func2(*args,**kwargs):
print(args) # 元组(所有位置参数)
print(kwargs)
func2(1,2,3,4,5,6,7,11,'alex','老男孩',a='ww',b='qq',c='222')
位置参数,*args,默认参数
def func3(a,b,*args,sex='男'):
print(a)
print(b)
print(sex)
print(args)
func3(1,2,'老男孩','alex','wusir',sex='女')
位置参数,*args,默认参数,**kwargs
def func3(a,b,*args,sex='男',**kwargs):
print(a)
print(b)
print(sex)
print(args)
print(kwargs)
func3(1,2,'老男孩','alex','wusir',name='alex',age=46)
def func1(*args,**kwargs): # 函数的定义 * 聚合。
print(args)
print(kwargs)
l1 = [1,2,3,4]
l11 = (1,2,3,4)
l2 = ['alex','wusir',4]
func1(*l1,*l2,*l11) # 函数的执行:* 打散功能。
func1(1,2,3,4,'alex','wusir',4,1,2,3,4) # 函数的执行:* 打散功能。
dic1 = {'name1':'alex'}
dic2 = {'name2':'laonanhai'}
func1(**dic1,**dic2)

浙公网安备 33010602011771号