首先,我们来看一个函数定义:
1 2
| def f(a,*b,**c): print(f'a:{a},b:{b},c:{c}')
|
*b与**c
都是可变参数
- 出现带一个星号的参数 b,这是可变位置参数
- 带两个星号的参数 c,这是可变关键字参数
首先,我们来看一个函数定义:
1 2
| def f(a,*b,**c): print(f'a:{a},b:{b},c:{c}')
|
*b与**c
都是可变参数
- 出现带一个星号的参数 b,这是可变位置参数
- 带两个星号的参数 c,这是可变关键字参数
现在执行如下代码:
1 2
| In [2]: f(1,2,3,w=4,h=5) a:1,b:(2, 3),c:{'w': 4, 'h': 5}
|
可以看到,参数 b 被传递 2 个值,参数 c 也被传递 2 个值。可变位置参数 b 被解析为元组,可变关键字参数 c 被解析为字典。
下面有几个重要规则:
(1)可变位置参数不能传入关键字参数
1 2 3 4 5 6 7 8 9 10 11 12
| In [41]: def f(*a): ...: print(a) In [42]: f(1) (1,) In [43]: f(1,2,3) (1, 2, 3) In [44]: f(a=1) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-44-6a0ab2c303a9> in <module> ----> 1 f(a=1) TypeError: f() got an unexpected keyword argument 'a'
|
(2) 可变关键字参数不能传入位置参数
1 2 3 4 5 6 7 8 9 10 11 12
| In [45]: def f(**a): ...: print(a) In [46]: f(a=1) {'a': 1} In [47]: f(a=1,b=2,width=3) {'a': 1, 'b': 2, 'width': 3} In [48]: f(1) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-48-281ab0a37d7d> in <module> ----> 1 f(1) TypeError: f() takes 0 positional arguments but 1 was given
|