文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
3.2 函数参数
Python中的函数参数主要有3种形式,分别是:
1)位置或关键字参数。
2)任意数量的位置参数。
3)任意数量的关键字参数。
我们在阅读函数时,需要注意函数的参数列表,没有带默认值的参数需要我们往函数传递值,而带默认值的参数可以不传递值。
1.位置或关键字参数
这种参数是Python默认的参数类型,函数的参数定义为该类参数后,可以通过位置参数,或者关键字参数的形式传递参数,例如:
def fun2(a,b,c): print a,b,c # 可以使用位置参数 >>>fun2(1,2,3) # 输出 1,2,3 #可以使用关键字参数,关键字参数间的顺序没有关系 >>>fun2(a=1,c=3,b=2) # 输出 1,2,3 #也可以混合使用位置参数和关键字参数,但位置参数必须在关键字参数的前面 >>>fun2(1,c=3,b=2) # 输出 1,2,3 >>>func(a=1,2,3) # 报错
函数参数列表中可以定义默认参数 ,但Python不允许带默认值的参数定义在没有默认值的参数之前,因为这样写是有歧义的。假设允许定义:
def fun3(a=1,b): print a,b
那么我调用fun3(2),虽然程序员希望a=1,b=2,但Python的位置参数是按顺序赋值的,程序会先把2赋值给a,从而没有参数赋值给b了,所以程序会报错。如果改成:
def fun3(a,b=2): print a,b
调用fun3(1)时,按照顺序,先将1赋值给a,虽然后面没有参数传入,但b已经有默认值,因此这样写程序没有歧义,输出1,2。
2.任意数量的位置参数
任意数量的位置参数在定义的时候是需要一个星号前缀 来表示的,在传递参数的时候,可以在原有参数的后面添加0个或多个参数,这些参数将会被放在元组内并传入函数。任意数量的位置参数(一个星号前缀)必须定义在位置或关键字参数(无须星号)之后,且在任意数量的关键字参数(两个星号前缀)之前。如:
def fun4(str1,*numbers): print fun4 , numbers >>>fun4("numbers:",1,2,3,4) #输出 numbers: (1, 2, 3, 4)
def fun4(*numbers,str1)这样定义参数列表是不允许的,因为同样有歧义。
3.任意数量的关键字参数
任意数量的关键字参数在定义的时候,参数名称前面需要有两个星号(**)作为前缀,这样定义出来的参数,在传递参数的时候,可以在原有的参数后面添加任意0个或多个关键字参数,这些参数会被放到字典内并传入到函数中。带两个星号前缀的参数必须定义在所有带默认值的参数之后。
def fun4(a=1,*numbers,**kwargs): print a,numbers,kwargs >>>fun4(4,2,3,4,b=2,c=3) #输出 4 (2, 3, 4) {'c': 3, 'b': 2}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论