详解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不能包含无关参数,否则会报错


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM