鱼C论坛

 找回密码
 立即注册
查看: 3087|回复: 1

[学习笔记] python的参数

[复制链接]
发表于 2017-12-26 10:36:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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的值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-26 10:37:25 | 显示全部楼层
结合网上资料自己总结的欢迎大牛指正
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 16:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表