可变要害字参数行使**界说,在函数体内,可变要害字参数是一个字典。可变要害字参数的key都是字符串,而且切合标识符界说类型。
- def fn(**kwargs):
- print(kwargs)
- dict01 = {'name': 'Laven Liu', 'age': 29}
- fn(**dict01)
- # fn(dict01)
- fn(name='Laven Liu', age=29)
- {'name': 'Laven Liu', 'age': 29}
- {'name': 'Laven Liu', 'age': 29}
可变位置参数只能以位置参数的情势挪用可变要害字参数只能以要害字参数的情势挪用可变位置参数必需在可变要害字参数之前
- In[18]: def fn(*args, **kwargs):
- ...: print(args)
- ...: print(kwargs)
- ...:
- In[19]: fn(1, 2, 3, a=1, b=2)
- (1, 2, 3)
- {'a': 1, 'b': 2}
- In[20]: def fn(*args, x, y):
- ...: print(args)
- ...: print(x, y)
- ...:
- In[21]: fn(1, 2, 3, 4)
- ---------------------------------------------------------------------------
- TypeError Traceback (most recent call last)
- in ()
- ----> 1 fn(1, 2, 3, 4)
- TypeError: fn() missing 2 required keyword-only arguments: 'x' and 'y'
- In[22]: fn(1, 2, x=3, y=4)
- (1, 2)
- 3 4
可变参数后置可变参数反面默认参数一路呈现
7. 参数组合
在Python中界说函数,可以用必选参数、默认参数、可变参数和要害字参数,这4种参数都可以一路行使,可能只用个中某些,可是请留意,参数界说的次序必需是: 必选参数、默认参数、可变参数和要害字参数
好比界说一个函数,包括上述4种参数:
- >>> def func(a, b, c=0, *args, **kwargs):
- ... print('a =', a, 'b =', b, 'c =', c, 'args = ', args, 'kwargs = ', kwargs)
在函数挪用的时辰,Python表明器自动凭证参数位置和参数名把对应的参数传进去。
- >>> func(1, 2)
- a = 1 b = 2 c = 0 args = () kwargs = {}
- >>> func(1, 2, c=3)
- a = 1 b = 2 c = 3 args = () kwargs = {}
- >>> func(1, 2, 3, 'a', 'b')
- a = 1 b = 2 c = 3 args = ('a', 'b') kwargs = {}
- >>> func(1, 2, 3, 'a', 'b', x=99)
- a = 1 b = 2 c = 3 args = ('a', 'b') kwargs = {'x': 99}
- >>>
最神奇的是通过一个tuple和dict,我们也可以挪用该函数:
- >>> args = (1, 2, 3, 4)
- >>> kwargs = {'x': 99}
- >>> func(*args, **kwargs)
- a = 1 b = 2 c = 3 args = (4,) kwargs = {'x': 99}
以是,对付恣意函数,都可以通过相同func(*args, **kwargs)的情势挪用它,无论它的参数是怎样界说的。
8. 参数解构
参数解构产生在函数挪用时,可变参数产生函数界说的时辰。参数解构分为两种情势,一种是位置参数解构,另一种是要害字参数解构。
参数布局的两种情势:
位置参数解构,行使一个星号。解构的工具为可迭代工具,解构的功效为位置参数。要害字参数解构,行使两个星号。解构的工具为字典,解构的功效为要害字参数。 (编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|