赞
踩
Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递,不定参数传递(包裹传递)和解包裹传递。前三种都比较清楚,那么本文来讲一下包裹传递和解包裹传递。
其实这只是编程人员约定的变量名字,你用其他的命名也没问题。这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,否则会有“SyntaxError: non-keyword arg after keyword arg”的语法错误。
知识点:
def f(a,*args):
print(args)
f(1,2,3,4)
# 输出为:(2, 3, 4)
# 虽然传入1,2,3,4,但是解包为(1),(2,3,4),其中a是1,args是剩下的参数。
def f(a,b,*args):
print(a)
print(args)
f([1,2,3,4,5])
# 输出为:
# 1
# (3, 4, 5) # 变成元组了
在python中,当*和**符号出现在函数定义的参数中时,表示任意数目参数。*arg表示任意多个无名参数,类型为tuple; **kwargs表示关键字参数,为dict.
def f(**kwargs):
print(kwargs)
f(a=1,b=2) # 实际传入参数是两个,但是给包裹在一起
# 输出为:{'a': 1, 'b': 2}
def f(name,age,**kwargs):
print('name:',name,'age:',age,'info:',kwargs)
f('Jerry', 18, gender='M', job='Engineer')
# 输出为:name: Jerry age: 18 info: {'gender': 'M', 'job': 'Engineer'}
# 传入4个参数,自动将后两位拼接成字典
def f(a,*args,**kwargs):
print(a,args,kwargs)
f(1,2,3,x=4,y=5)
# 丢进去不确定参数的包裹:1,2,3,x=4,y=5
# 解包:1 -a
# 解包:(2,3) -*args
# 解包:{'x': 4, 'y': 5} -**kwargs
# 输出为:1 (2, 3) {'x': 4, 'y': 5}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。