詳解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