首先是最常见的必选参数
def test_defargs(one, two): # 参数one没有默认值,two的默认值为2
print('Required argument: ', one)
print('Optional argument: ', two)
每次我们都要输入两个值,分别赋值给one two。这种参数叫做必选参数。
必选参数在前,默认参数在后。
默认参数
def test_defargs(one, two=2): # 参数one没有默认值,two的默认值为2
print('Required argument: ', one)
print('Optional argument: ', two)
可以看到,每次我们都要给one赋值,two的话,可以赋值也可以不赋值,不赋值会自动给two赋2。
可变参数
顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。
def calc(*args):
sum = 0
for n in args:
sum = sum + n * n
return sum
使用时就可以输入随意数量的参数了:
>>> calc(1, 2)
5
如果我有一个列表,想要把这个列表作为参数输入:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
这样就可以把列表作为可变参数传进去了。
关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。(参数名为key,参数为value)
比如:
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
使用的时候,
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
得到的结果就是:
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
在内部组成了一个kw列表。
那么如果我想给kw之间传入一个列表怎么办?就不需要再到函数内部去重组,我直接给。
答案是与此前传入*args类似。
kw={gender:'M', job:'Engineer'}
person('Adam', 45, **kw)
各种参数的组合使用:
在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。
比如:
def func(a, b, c=0, *args, **kw):
print 'a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw
>>> func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}