Python中 *args 和 **kwargs 的含義?

2021-02-19 程序IT圈

公眾號新增加了一個欄目,就是每天給大家解答一道Python常見的面試題,反正每天不貪多,一天一題,正好合適,只希望這個面試欄目,給那些正在準備面試的同學,提供一點點幫助!

小猿會從最基礎的面試題開始,每天一題。如果參考答案不夠好,或者有錯誤的話,麻煩大家可以在留言區給出自己的意見和討論,大家是要一起學習的 。

廢話不多說,開始今天的題目:

問:Python中 *args 和 **kwargs 的含義?

答:在python中,*args和**kwargs通常使用在函數定義裡。*args 和 **kwargs 都允許你給函數傳不定數量的參數,即使在定義函數的時候不知道調用者會傳遞幾個參數。ps: *args和**kwargs只是一個大家都遵守的習慣,名字可以任意寫的 。

1. *args例子*args能夠接收不定量的非關鍵字參數,會把位置參數轉化為tuple(非鍵值對的參數組),例子如下面代碼所示:

def func(*args):
    for i in args:
        print(i)
func(1,2,3,4)

運行結果:
1
2
3
4

2.**kwargs 例子

**kwargs允許你傳遞不定量個關鍵字參數。如果你需要在函數中定義不定量個命名參數,那麼你就要使用**kwargs了,它會把關鍵字參數轉化為dict(鍵值對參數組),例子如下面代碼所示:

def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
func(a=1,b=2,c=3,d=4)

運行結果:
a 1
b 2
c 3
d 4


下面演示個錯誤的案例,看到有個錯誤:"func() takes 0 positional arguments but 4 were given" ,「未定義位置型參數,卻收到了4個參數。」 也就是說,kwargs需要的是帶名稱的參數,而args代表位置型參數(無名稱參數)。從英語上來說,kwargs多出來的kw其實就是keyword的意思,表示這是「鍵值對」參數,就像字典那樣 。這樣解釋,*args 和 **kwargs 兩者的區別,大家掌握了嗎?

def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
func(1,2,3,4)

運行結果:
Traceback (most recent call last):
  File "F:/pyworkspace/hello.py", line 4, in <module>
    func(1,2,3,4)
TypeError: func() takes 0 positional arguments but 4 were given

如果對於參考答案有不認同的,大家可以在評論區指出和補充,歡迎留言!

20、說說HTTP常見響應狀態碼?

21、Python 單、雙引號、三引號區別?

22、說說Python中猴子補丁是什麼?

23、說說Python中的垃圾回收機制?

24、Python中有幾種交換兩個變量的值?

25、說說Python中的6種位運算符?

26、說說Python中的類型轉換有哪些?

27、Python中實現二分查找的2種方法?

28、說說Python中的lambda表達式?

29、說說Python中的反射是什麼?

30、Python刪除list重複元素有幾種方法?

31、Python中__new__和__init__的區別?

32、說說Python中的help()和dir()函數?

33、說說Python中的GIL是什麼?

34、說說提高Python運行效率的技巧?

35、說說對於Python裝飾器的理解?

36、說說Python中的異常捕獲?

37、Python的單例模式有幾種實現方式?

關注小猿公眾號,每天學習一道題

相關焦點

  • *args和**kwargs在Python中的作用
    我發現Python新手們在理解*args和**kwargs這兩個魔法變量時都有些困難。他們到底是什麼?首先,我先告訴大家一個事實,完整地寫*args和**kwargs是不必要的,我們可以只寫*和**。你也可以寫*var和**vars。寫*args和**kwargs只是一個大家都遵守的習慣。那現在讓我們從*args講起。
  • 解密Python中的args和kwargs
    解密Python中的args和kwargs本文來源:https://realpython.com/python-kwargs-and-args/翻譯:老齊與本文內容配套的圖書:《跟老齊學Python:輕鬆入門》、《Python大學實用教程》。各大電商平臺有售。
  • Python 中的 *args 和 **kwargs
    , **kwargs):很多同學可能會對此感到困惑,這個*args 和 **kwargs 是什麼東西, 為啥會在源碼中應用這麼廣泛呢?元組參數,即 *args,參數格式化存儲在一個元組中,長度沒有限制,必須位於普通參數和默認參數之後。字典參數,即 **kwargs,參數格式化存儲在一個字典中,必須位於參數列表的最後面。
  • Python中的*args和**kwargs是什麼?該如何使用?
    然而,接觸到函數定義中的*args和**kwargs時,也會讓新手剛開始就遇到心理障礙。在Python中的代碼中經常會見到這兩個詞 args 和 kwargs,前面通常還會加上一個或者兩個星號。別被這些語句所絆倒。
  • 10個Python 示例,輕鬆學會 *args 和 **kwargs
    *args 和 **kwargs 可以處理參數變得更容易、更簡潔。*args 和 **kwargs 雖然功能強大,但能真正掌握的同學其實並不多。在這篇文章中,我將分享十個示例,讓你輕鬆掌握!因此,它執行與 *args 相同的操作,但用於關鍵字參數。默認情況下,**kwargs 是一個空字典。每個未定義的關鍵字參數都存儲為 **kwargs 字典中的鍵值對。
  • 10個Python 示例,輕鬆學會 *args 和 **kwargs
    *args 和 **kwargs 可以處理參數變得更容易、更簡潔。*args 和 **kwargs 雖然功能強大,但能真正掌握的同學其實並不多。在這篇文章中,我將分享十個示例,讓你輕鬆掌握!因此,它執行與 *args 相同的操作,但用於關鍵字參數。默認情況下,**kwargs 是一個空字典。每個未定義的關鍵字參數都存儲為 **kwargs 字典中的鍵值對。
  • python 函數定義以及函數的調用
    在python中參數無類型,參數可以接受任意對象,只有函數中代碼才會對參數類型有限制4.>*args, **kwargs ,星號是關鍵字, args,kwargs是變量名,規範。注意:關鍵字參數和位置參數一起使用時,關鍵字參數必須要寫在位置參數的後面,這是語法要求。
  • Python面試必刷題系列(5)
    通過收集、整理Python真實面試題,給大家講解面試中的python高頻考察點,希望能夠引起讀者的足夠重視。往期回顧:Python中 is 和 == 有什麼區別?(1)==是比較運算符,用來比較兩個對象的value(值)是否相等。(2)is也叫做同一性運算符,用來比較對象間的唯一身份標識(id)是否一致。
  • Python語言之Python探針實現原理
    關於 sys.meta_path 更詳細的資料請查閱 python 文檔中 sys.meta_path 相關內容以及 PEP 0302 。對於函數對象,我們可以使用裝飾器的方式來替換函數對象(代碼可以從 github 上下載 part2) :import functoolsimport timedef func_wrapper(func):    @functools.wraps(func)    def wrapper(*args, **kwargs):        print('start func
  • Python 裝飾器填坑指南 | 最常見的報錯信息、原因和解決方案
    在 Python 中,裝飾器屬於純粹的「語法糖」,不使用也沒關係,但是使用的話能夠大大簡化代碼,使代碼更加簡潔易讀。最近在霍格沃茲測試學院的《Python 測試開發實戰進階》課程中學習了 App 自動化測試框架的異常處理,存在一定重複代碼,正好可以當作題材,拿來練習一下裝飾器。
  • Python代碼結構:函數
    弊端:必須熟記每個位置的參數的含義。wax')當使用*時,不一定要把元祖參數命名為args,但這是python中的一個常見做法。arguments:{'wine':'merlot','entree':'mutton','dessert':'macaroon'}如果把帶有*args和**kwargs的位置參數混合起來,他們必須按照順序出現。
  • 從Python到空間分析Arcpy || 1.3.5 function first 函數優先
    和函數有關的核心內容:關鍵字和函數名參數定義和函數體函數調用、傳參和返回值關鍵字和函數名先說關鍵字和函數名,python 中如果想定義一個函數必須要先使用 def 關鍵字,然後是函數的名字,別看這小小的名字,如何規範的取名字是大有學問的,總的來說函數取名要考慮
  • Python Decorator 基礎
    return func(*args, **kwargs)        finally:            print 'func %s cost %s' % (func.在上面的代碼(code snippet 0)中,把line12注釋掉,然後把line18的注釋去掉,是一樣的效果。另外staticmethod和classmethod是兩個我們經常在代碼中用到的裝飾器,如果對pyc反編譯,得到的代碼一般也都是 func = staticmthod(func)這種模式。當然,@符號的形式更受歡迎些,至少可以少拼寫一次函數名。
  • 用 Python 創建你自己的 Shell
    args, **kwargs):         args = self._args + args+        kwargs = {**self._kwargs, **kwargs}-        return self.__class__(*args)+        return self.
  • Python中的函數定義與參數使用
    在Python中所有的變量均是reference,理解這一點,就都ok了參考之前的推文:Pyhon中的賦值與參數傳遞,或許跟你想的不太一樣! ):    result = 0     print( "args: {} ; 數據類型:{}".format( args, type(args)    ) )    for arg in args:        result+=arg        return resultresult =  simulate_sum(  1,2,3,4,5
  • Python中的函數參數
    # 必需參數 # 默認參數 # 關鍵字參數 # 不定長參數 # 必需參數:必需參數須以正確的順序傳入函數,調用時的數量必須和聲明時的一樣。
  • Python每天一分鐘:如何把元組/字典作為參數傳遞給函數(附代碼)
    python可變參數當然,Python 也不例外,那麼如何在定義函數時支持使用可變參數呢?我們今天就以元組和字典為例給大家詳細介紹如何給函數傳遞可變參數python函數的可變參數我們首先來了解下python中函數的形參與實參定義:
  • python argparse 源碼閱讀
    帶著這幾個疑問,我們去python源碼中查找答案。getopt 解析我在上個例子中使用了 d@3 , 這是搞笑的。命令行參數有約定的慣例和規範,在unix-shell中由getopt函數實現,具體可以看參考連結中的wiki部分。python中也提供了 getopt 實現。
  • 很全的 Python 面試題
    在python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。這是中文版: http://taizilongxu.gitbooks.io/stackoverflow-about-python/content/1/README.html10 *args and **kwargs用*args和**kwargs只是為了方便並沒有強制使用它們.
  • Python基礎知識儲備,函數的參數和返回值的用法,實操演示
    python函數一、函數的參數,具有通用性,如果數據採用相同的處理邏輯,使用函數能夠適應更多的數據形參:定義函數時,小括號中的參數,是用來接收參數使用的,在函數內部作為變量使用實參:調用函數時,小括號中的參數,是用來把數據傳遞到函數內部使用的。