Loading

详解python中的*与**用法

前言

经常看开源python代码,对于*和**的用法理解不透彻,决定弄懂。

涵义

可变参数

常见于python主函数的一种写法

def foo(*args, **kwargs):
    pass

有点类似于C++的通配参数
*args用于捕获所有的顺序参数,返回tuple
**kwargs用于捕获所有的关键字参数,返回dict
举例说明

>>> def foo(*args,**kwargs):
...     print("args=",args)
...     print("kwargs=",kwargs)
... 
>>> foo(1)
args= (1,)
kwargs= {}
>>> foo(1,2,3)
args= (1, 2, 3)
kwargs= {}
>>> foo(1,2,x=3)
args= (1, 2)
kwargs= {'x': 3}
>>> foo(1,2,3,c=4,5)
  File "<stdin>", line 1
SyntaxError: positional argument follows keyword argument

为避免歧义python规定关键字参数只能放在最后

字典提取

对于dict对象,*和**可以用来提取内容

>>> d={'x':1,'y':2,'z':3}
>>> print(*d)
x y z

等效于print('x','y','z')

>>> d={'x':1,'y':2,'z':3}
>>> def bar(x,y,z):
...     return x+y+z
... 
>>> bar(**d)
6

等效于bar(x=1,y=2,z=3)

>>> d={'x':1,'y':2,'z':3}
>>> def plus(x,y):
...     return x+y
... 
>>> plus(**d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: plus() got an unexpected keyword argument 'z'

注意dict不能包含无关参数,否则会报错

posted @ 2021-08-27 15:57  azureology  阅读(994)  评论(0编辑  收藏  举报