1. 程式人生 > 其它 >python函式引數中的/和*是什麼意思?

python函式引數中的/和*是什麼意思?

在python3.8之後函式引數中允許出現/和*號,/用來指明某些函式形參必須使用位置引數而非關鍵字引數的形式,*出現在函式引數中第一種含義可以表示為可變引數

,一般寫作*args;對於單獨出現在引數中的*引數,則表示,*後面的引數必須為關鍵字引數的形式,接下來詳細說下該用法:

1 /引數的用法

如果你想要函式的呼叫者在某個引數位置只能使用位置引數而不能使用關鍵字引數傳參,那麼你只需要在所需位置後面放置一個/。

def f1(a, b, /):
    return a + b

對於上面這個函式而言,呼叫f1時引數a,b只能是特定的值,而不能以關鍵字傳參,即f1(2, 3)執行正確而f1(a=2, 3)和f1(2, b=3)將執行錯誤。

2 *引數的用法

對於*的第一種用法比較常見,這裡不再詳述,這裡主要詳細解釋*的第二種用法。如果你希望強迫呼叫者使用某些引數,且必須以關鍵字引數的形式傳參,那麼你只需要在所需位置的前一個位置放置一個*。

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)。

3 /和*都出現在函式引數中

比如我們定義一個函式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不能以關鍵字引數傳參

f(1, 2, 3, 4, e=5) # d只能以關鍵字引數傳參

4 總結

如果你希望呼叫者使用函式時一定不能使用關鍵字引數傳參,那麼只需要把這些引數放在/前即可;如果你希望呼叫者使用函式時一定要使用某些引數,且必須為關鍵字引數傳參,那麼只需要把這些引數放在*後面即可。