|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
补充笔记----python的位置参数、默认参数、关键字参数、可变参数区别
一、位置参数
def saysome (name,words):
print(name+'->'+words)
saysome('小甲鱼','让编程改变世界')
则返回:小甲鱼->让编程改变世界
两个参数的顺序必须一一对应,且少一个参数都不可以。
二、关键字参数
用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的
saysome('小甲鱼',words='让编程改变世界')可以正常打印。
saysome(words='让编程改变世界','小甲鱼')报错
saysome(name='小甲鱼',words='让编程改变世界')可以正常打印
saysome(words='让编程改变世界',name='小甲鱼')可以正常打印
三、默认参数
用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
def saysome (words,name='小甲鱼'):
print(name+'->'+words)
saysome('让编程改变世界')
不传参数时返回:小甲鱼->让编程改变世界
saysome('让编程改变世界','小王八')
传参数时返回:小王八->让编程改变世界
四、可变参数(收集参数)
定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
1、包裹位置传递
def test(*shuibianqu):
print("参数的长度是:",len(shuibianqu));
print("第3个参数是:",shuibianqu[2]);
print(shuibianqu)
test(1,2,34,44,45,56,7,8,9)
定义函数时我们只定义了一个参数,只不过在参数的前面加了“*”表示我们传进的所有参数都会被shuibianqu变量收集他会根据传进参数的位置合并成一个元组(tuple),这就是包裹位置传递。
def test(*shuibianqu,yeshi):
print("参数的长度是:",len(shuibianqu),yeshi);
print("第3个参数是:",shuibianqu[2]);
print(shuibianqu)
test(1,2,34,44,45,56,7,8,9,yeshi=110)
当函数除了可变参数还有其他指定的参数时,因为可变参数属于位置参数必须放在其他制定参数的前面。
2、包裹关键字传递
#**kwargs 把N个关键字参数转换成字典(dict)的方式
def dict(**kwargs):
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])
dict(name='Msl23',age=18,sex='M')
dict(**{'name':'Msl23','age':18,'sex':'M'})
五、小结
位置参数:
调用函数时所传参数的位置必须与定义函数时参数的位置相同
关键字参数:
使用关键字参数会指定参数值赋给哪个形参,调用时所传参数的位置可以任意
*位置参数:可接受任意数量的位置参数(元组);只能作为最后一个位置参数出现,其后参数均为关键字参数
**关键字参数:可接受任意数量的关键字参数(字典);只能作为最后一个参数出现
默认参数:默认参数的赋值只会在函数定义的时候绑定一次,默认值不会再被修改
例
1、形参角度
def foo(x,*args,a=4,**kwargs): #使用默认参数时,注意默认参数的位置要在args之后kwargs之前
print(x)
print(a)
print(args)
print(kwargs)
foo(1,5,6,7,8,y=2,z=3) #调用函数,不修改默认参数
#x的值
#a的值
(5, 6, 7, 8) #*args的值
{'y': 2, 'z': 3} ##kwargs的值
例2
def foo(x,a=4,*args,**kwargs): ##注意:当需要修改默认参数时,要调整默认参数的位置,要放在args之前即可,但不可放在开头。
print(x)
print(a)
print(args)
print(kwargs)
foo(1,9,5,6,7,8,y=2,z=3) #调用函数,修改默认参数a为9
#x的值
#被修改后a的值
(5, 6, 7, 8) #args的值
{'y': 2, 'z': 3} #kwargs的值
2、实参角度
def foo(x,*args,a=4,**kwargs): #使用默认参数时,注意默认参数的位置要在args之后kwargs之前
print(x)
print(a)
print(args)
print(kwargs)
foo(1,*(5,6,7,8),**{"y":2,"z":3}) #调用函数,不改默认参数
#x的值
#默认a的值
(5, 6, 7, 8) #args的值
{'y': 2, 'z': 3} #kwargs的值
例2
def foo(x,a=4,*args,**kwargs): #注意:当需要修改默认参数时,要调整默认参数的位置,要放在args之前,但不可放在开头
print(x)
print(a)
print(args)
print(kwargs)
foo(1,9,10,*(5,6,7,8),**{"y":2,"z":3}) #调用函数,修改默认参数a为9
#x的值
#修改默认参数a后的值
(10, 5, 6, 7, 8) #args的值
{'y': 2, 'z': 3} #kwargs的值 |
|