在python3.8之後函式引數中允許出現/和*號,/用來指明某些函式形參必須使用位置引數而非關鍵字引數的形式,*出現在函式引數中第一種含義可以表示為可變引數,一般寫作*args;對於單獨出現在引數中的*引數,則表示,*後面的引數必須為關鍵字引數的形式,接下來詳細說下該用法:
如果你想要函式的呼叫者在某個引數位置只能使用位置引數而不能使用關鍵字引數傳參,那麼你只需要在所需位置後面放置乙個/。
def
f1(a, b,/)
:return a + b
對於上面這個函式而言,呼叫f1時引數a,b只能是特定的值,而不能以關鍵字傳參,即f1(2, 3)執行正確而f1(a=2, 3)和f1(2, b=3)將執行錯誤。
對於的第一種用法比較常見,這裡不再詳述,這裡主要詳細解釋的第二種用法。如果你希望強迫呼叫者使用某些引數,且必須以關鍵字引數的形式傳參,那麼你只需要在所需位置的前乙個位置放置乙個*。
def
f1(a,
*, b, c)
:return a + b + c
對於上面這個函式而言,呼叫時引數a可以任意值, 但b,c引數一定要以關鍵字引數的形式傳參,如f1(1, b=4, c=5)。
def
f2(a,
*, b, c=5)
:return a + b + c
如果是這種情況下呼叫函式,引數a可以任意值,但引數b一定要以關鍵字引數的形式傳參,如f2(2, b=3),但是如果想傳入c引數,那麼c引數的要求和b引數一樣都為關鍵字引數形式,如f2(2,b=3,c=4)。
比如我們定義乙個函式f
def
f(a, b,
/, c,
*, d, e)
:print
(a, b, c, d, e)
當我們呼叫函式f時,a,b引數可以為任意型python所支援的值,就是不能以關鍵字形式傳參;c可以為任意型python所支援的值,d,e只能以關鍵字引數傳參。以下呼叫方式均會丟擲異常
f(a=1,
2, c=
3, d=
4, e=5)
# a不能以關鍵字引數傳參
# d只能以關鍵字引數傳參
如果你希望呼叫者使用函式時一定不能使用關鍵字引數傳參,那麼只需要把這些引數放在/前即可;如果你希望呼叫者使用函式時一定要使用某些引數,且必須為關鍵字引數傳參,那麼只需要把這些引數放在*後面即可。
Python中函式的引數定義和可變引數
剛學用python的時候,特別是看一些庫的原始碼時,經常會看到func args,kwargs 這樣的函式定義,這個 和 讓人有點費解。其實只要把函式引數定義搞清楚了,就不難理解了。先說說函式定義,我們都知道,下面的 定義了乙個函式funca def funca pass 顯然,函式funca沒有引...
Python中函式的引數定義和可變引數
剛學用python的時候,特別是看一些庫的原始碼時,經常會看到func args,kwargs 這樣的函式定義,這個 和 讓人有點費解。其實只要把函式引數定義搞清楚了,就不難理解了。先說說函式定義,我們都知道,下面的 定義了乙個函式funca def funca pass 顯然,函式funca沒有引...
Python中函式的引數定義和可變引數
剛學用python的時候,特別是看一些庫的原始碼時,經常會看到func args,kwargs 這樣的函式定義,這個 和 讓人有點費解。其實只要把函式引數定義搞清楚了,就不難理解了。先說說函式定義,我們都知道,下面的 定義了乙個函式funca def funca pass 顯然,函式funca沒有引...