python之路_函数参数相关介绍
一、定义函数时为位置参数情况
#定义函数 def name(a,b): if len(a)>len(b): return a elif len(a)<len(b): return b #调用函数 i=[1,2,3,4,5,6] j=[1,2,3,4] print(name(i,j)) #按照位置传参 print(name(a=i,b=j)) #按照关键字传参,name(b=j,a=i)也可以,位置不限 print(name(i,b=j)) #混合传参:必须先按照位置传参,再按照关键字传参,不可以出现name(a=i,j)
二、定义函数时为默认参数情况
1.正常调用情况
例1:
#定义函数 def welcome(name,sex='male'): #sex默认参数 print('welcome,%s,sex: %s'%(name,sex)) #调用函数 welcome('黄中山') #输出结果:welcome,黄中山,sex: male welcome('曹海娇') #输出结果:welcome,曹海娇,sex: male welcome('鲁旭彤','female') #输出结果:welcome,鲁旭彤,sex: female
例2:
def age(a1,a2=18): print(a1,a2) a2 = 20 age(10) #输出结果:10,18 默认值在定义阶段已经被确定,外部无法更改,除非重新传参
2.默认值陷阱情况(可变数据类型情况)
#定义函数 def func(l = []): l.append(123) print(l) func() #输出结果:[123] func([]) #输出结果:[123] func() #输出结果:[123,123]
三、定义时为动态参数情况
1、*args情况
情况1:实际参数为逐个元素
#定义函数 def my_sum(*args): count_sum = 0 for i in args: #被*args转为元组args = (1,2,3,4,5) count_sum += i return count_sum #调用函数 print(my_sum(1,2,3,4)) #实际参数个数不定,以位置参数形式传入
情况2:实际参数为元组或者列表
#定义函数 def my_sum(*args): count_sum = 0 for i in args: #被*args转为元组args = (1,2,3,4,5) count_sum += i return count_sum #调用函数 l = [1,2,3,4,5] print(my_sum(*l)) #等价my_sum(1,2,3,4,5),*的作用是将列表打散
2、**kwargs情况
情况1:实际参数为关键字参数
#定义函数 def demo4(**kwargs): # **kwargs将传入的关键字参数转为字典形式 print(kwargs) #调用函数 demo4(a = 1,b = 2,c = 3) #输出结果为:{'a': 1, 'b': 2, 'c': 3}
情况2:实际参数为字典
#定义函数 def demo4(**kwargs): # **kwargs将关键字参数转换为字典 print(kwargs) #调用函数 d = {'a': 1, 'b': 2, 'c': 3} demo4(**d) #等价于demo4(a = 1,b = 2,c = 3),**kwargs将字典打散成关键字参数
四、定义函数时参数顺序
参数顺序需按照如下顺序定义:def 函数名(位置参数,*args,默认参数,**kwargs)
#定义函数 def func(位置参数1,位置参数2,*args,默认参数=10,**kwargs): print(位置参数1,位置参数2) print(args) print(默认参数) print(kwargs) #调用函数 func(1,2,3,4,5,默认参数='hahaha',a=10,b=20)