6
必选参数
9
可以看到,默认参数使用起来也很简单,但有两点需要注意的是:
7
>>> sum() # 没有参数
8
14
print 'y =', y
args = (4, 5, 6)
... sum += i
5
4
3
默认参数要放在所有必选参数的后面。
默认参数是指在定义函数的时候提供一些默认值,如果在调用函数的时候没有传递该参数,则自动使用默认值,否则使用传递时该参数的值。
6
12
2
13
12
File "", line 1, in
>>> add(*b) # 对元组一样适用
>>> func(1, 2, 4, u=6, v=7) # args = (), kwargs = {'u': 6, 'v': 7}
和可变参数类似,我们也可以使用 **kwargs 的形式来调用函数,比如:
... return sum
6
21
我们还可以通过下面的形式来传递参数:
>>> def sum(**kwargs): # 函数参数是关键字参数
22
10
...
1
kwargs = {'u': 6, 'v': 7}
13
参考资料
1
11
15
8
>>>
8
>>> func(1, 2) # 至少提供两个参数,因为 x, y 是必选参数
6
默认参数
让我们看看例子:
...
>>> sum(**dict1) # 相当于 sum(x=1)
可变参数
小结
args = ()
1
3
在上面的函数中,L 是一个默认参数,默认值是 [],表示空列表。
6
11
2
11
18
可变参数允许你将不定数量的参数传递给函数,而关键字参数则允许你将不定长度的键值对, 作为参数传递给一个函数。
>>> add(1, 2) # 数量一致,通过
>>> func(1, 2, 3) # x=1, y=2, z=3
>>> add() # 没有参数,kwargs 为空字典
... L.append('END')
新葡萄京娱乐场8455,>>> add_to_list() # 没有传递参数,使用默认值,也没啥问题
7
3
>>> add_to_list() # 糟糕了,三个 'END'
4
{}
6
2
7
默认参数应该使用不可变对象
8
参数组合在使用的时候是有顺序的,依次是必选参数、默认参数、可变参数和关键字参数。
... sum += i
5
1
>>> add(1) # 只传了一个,也不行
5
['END', 'END', 'END']
7
y = 2
... return sum
z = 3
10
6
>>> a = [1, 2, 3, 4]
3
>>> add(**dict1) # 使用 **dict1 来传参,等价于上面的做法
... return L
9
>>> add(1, 2) # 传递 2 个参数
2
z = 3
2
args 和 *kwargs · Python进阶
5
z = 4
*args 表示可变参数,**kwargs 表示关键字参数。
13
Traceback (most recent call last):
>>> func(*a, **b)
10
8
4
4
1
kwargs = {}
... return x + y + z
必选参数
>>> func(1, 2, 3, 4, 5, 6) # x=1, y=2, z=3, args=(4, 5, 6), kwargs={}
6
3
可变参数
2
4
1
12
8
...
6
1
>>> add(1, 2) # 没有传递 z,自动使用 z=1,即 1+2+1
>>> add() # 传递 0 个参数
1
1
7
23
0
args = (4, 5)
12
print 'z =', z
>>> def add(x=1, y, z): # x 是默认参数,必须放在所有必选参数的后面
3
9
... return x + y + z
参数组合
4
24
numbers: (1, 2)
关键字参数
3
kwargs = {'u': 6, 'v': 7}
... for i in numbers:
2
2
['END']
1
5
... print x + y + z
x = 1
>>> add() # 啥都没传,不行
1
在实际的使用中,我们经常会同时用到必选参数、默认参数、可变参数和关键字参数或其中的某些。但是,需要注意的是,它们在使用的时候是有顺序的,依次是必选参数、默认参数、可变参数和关键字参数。
>>> a = [1, 2]
2
>>> add(x=1) # x=1 => kwargs={'x': 1}
10
再看一个例子:
必选参数可以说是最常见的了,顾名思义,必选参数就是在调用函数的时候要传入数量一致的参数,比如:
6
... return sum
看看例子:
27
5
...
args = ()
29
7
y = 2
x = 1
2
>>> add(*a) # 使用 *a 给函数传递参数
>>> def add(x, y=1, z): # y 是默认参数,必须放在所有必选参数的后面
numbers: ()
函数的参数 - 廖雪峰的官方网站
>>> add(1, 2, 3) # 传递 3 个参数
2
>>> add(dict1['x'], dict1['y'], dict1['z']) # 这样传参很累赘
['a', 'b', 'c', 'END']
再看一个例子: