函数的返回值 和传参
函数
自定义函数的原因
避免代码冗余,提高可读性和扩展性
返回值
注意
-
a.如果函数有返回值,还应该定义“变量”接收返回值 b.如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致
没有返回值
-
不写return,只写return,return None 都是返回None
返回一个值
-
return后面写上要返回的内容即可 注意:return和返回值之间要有空格,可以返回任意数据类型的值
def my_len(): """计算s1的长度""" s1 = 'hello world' length = 0 for i in s1: length +=1 return length # 函数调用 str_len = my_len() print('str_len : %s'%str_len)\
# 执行结果 str_len : 11
返回多个值
-
返回的多个值会被组织成元组被返回,也可以用多个值来接收 原因:python中把用逗号分割的多个值就认为是一个元组
def ret_dome1():
return 1,2,3
# 调用函数
ret1 = ret_dome1()
print('用一个变量接收',ret1)
a,b,c = ret1
print('用多个变量接收',a,b,c)# 执行结果 用一个变量接收 (1, 2, 3) 用多个变量接收 1 2 3
函数的参数
传参方式
-
实参
-
位置传参
-
就是按照位置一一对应
def mymax(x,y): # 此时x=10,y=20 the_max = x if x > y else y return the_max # 调用函数 m = mymax(10,20) print(m)
# 执行结果 20
-
-
关键字传参
-
类似于变量赋值的形式 传参
def mymax(x,y): print(x,y) the_max = x if x >y else y return the_max # 调用函数 m = mymax(y=10,x=20) print(m)
# 执行结果 20 10 20
-
-
位置、关键字混合方式传参
-
a.位置参数必须在关键字参数的前面
-
b.对于一个形参只能赋值一次
def mymax(x,y): print(x,y) the_max = x if x >y else y return the_max #调用函数 m = mymax(10,y=20) print(m)
# 执行结果 10 20 20
-
-
-
形参
-
定义函数时用来接收的
-
位置参数
-
位置参数必须传值,不传值报错
-
-
默认参数
-
为什么要有默认参数:将变化频率比较小的值设置成默认参数
def stu_info(name,gender='male'): """ 打印学生信息函数,由于班里大部分都是男生 所以设置默认参数gender默认值为‘male’ """ print(name,gender) # 调用函数 stu_info('Tom') stu_info('Jerry','female')
# 执行结果 Tom male Jerry female
-
注意参数陷阱:默认参数不是默认不可变,只是一个初始值,它是一个‘可变’数据类型
def default_param(a,l=[]): l.append(a) print(l) #调用函数 default_param('Tom') default_param('Jerry')
# 执行结果 ['Tom'] ['Tom', 'Jerry']
-
-
动态参数
-
*args
-
按位置传值多余的参数都由args统一接收,保存成一个元组的形式
def mysum(a,*args): the_sum = 0 for i in args: the_sum +=1 print(a) return the_sum # 调用函数 the_sum = mysum(3,2,1) # 这个the_sum跟函数内的互不干扰 print(the_sum)
# 执行结果 3 2
-
-
**kwargs
-
按关键字传值多余的参数都由args统一接收,保存成一个字典的形式
def stu_info(**kwargs): print(kwargs) print(kwargs['name'],kwargs['gender']) # 调用函数 stu_info(name='Tom',gender='male')
# 执行结果 {'name': 'Tom', 'gender': 'male'} Tom male
-
-