| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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的值 |   
 
 
 
 |