Python函式的5類引數使用詳解

2021-10-01 21:26:32 字數 3627 閱讀 8136

1 各種引數使用之坑

(1) syntaxerror: positional argument follows keyword argument

(2) typeerror: f() missing 1 required keyword-only argument: 'b'

(3) syntaxerror: keyword argument repeated

(4) typeerror: f() missing 1 required positional argument: 'b'

(5) typeerror: f() got an unexpected keyword argument 'a'

(6) typeerror: f() takes 0 positional arguments but 1 was given

2 總結主要的引數使用規則

位置引數

位置引數的定義:函式呼叫時根據函式定義的引數位(形參)置來傳遞引數,是最常見的引數型別。

def f(a):

return a

f(1) # 位置引數

位置引數不能缺少:

def f(a,b):

pass

f(1) # typeerror: f() missing 1 required positional argument: 'b'

規則1:位置引數必須一一對應,缺一不可

關鍵字引數

在函式呼叫時,通過『鍵--值』方式為函式形參傳值,不用按照位置為函式形參傳值。

def f(a):

print(f'a:')

這麼呼叫,a就是關鍵字引數:

f(a=1)
但是下面呼叫就不ok:

f(a=1,20.) # syntaxerror: positional argument follows keyword argument
規則2:關鍵字引數必須在位置引數右邊

下面呼叫也不ok:

f(1,width=20.,width=30.) #syntaxerror: keyword argument repeated
規則3:對同乙個形參不能重複傳值

預設引數

在定義函式時,可以為形參提供預設值。對於有預設值的形參,呼叫函式時如果為該引數傳值,則使用傳入的值,否則使用預設值。如下b是預設引數:

def f(a,b=1):

print(f'a:, b:')

規則4:無論是函式的定義還是呼叫,預設引數的定義應該在位置形參右面

只在定義時賦值一次;預設引數通常應該定義成不可變型別

可變位置引數

如下定義的引數a為可變位置引數:

def f(*a):

print(a)

呼叫方法:

f(1) #列印結果為元組:(1,)

f(1,2,3) #列印結果:(1, 2, 3)

但是,不能這麼呼叫:

f(a=1) # typeerror: f() got an unexpected keyword argument 'a'
可變關鍵字引數

如下a是可變關鍵字引數:

def f(**a):

print(a)

呼叫方法:

f(a=1) #列印結果為字典:

f(a=1,b=2,width=3) #列印結果:

但是,不能這麼呼叫:

f(1) typeerror: f() takes 0 positional arguments but 1 was given
3 五類引數使用例子

今天舉例說明python5類引數:位置引數,關鍵字引數,預設引數,可變位置或關鍵字引數的使用。

def f(a,*b,c=10,**d):

print(f'a:,b:,c:,d:')

預設引數c不能位於可變關鍵字引數d後.

呼叫f:

in [10]: f(1,2,5,width=10,height=20)

a:1,b:(2, 5),c:10,d:

可變位置引數b實參後被解析為元組(2,5);而c取得預設值10; d被解析為字典.

再次呼叫f:

in [11]: f(a=1,c=12)

a:1,b:(),c:12,d:{}

a=1傳入時a就是關鍵字引數,b,d都未傳值,c被傳入12,而非預設值。

注意觀察引數a, 既可以f(1),也可以f(a=1)其可讀性比第一種更好,建議使用f(a=1)。如果要強制使用f(a=1),需要在前面新增乙個星號:

def f(*,a,*b):

print(f'a:,b:')

此時f(1)呼叫,將會報錯:typeerror: f() takes 0 positional arguments but 1 was given

只能f(a=1)才能ok.

說明前面的*發揮作用,它變為只能傳入關鍵字引數,那麼如何檢視這個引數的型別呢?借助python的inspect模組:

in [22]: for name,val in signature(f).parameters.items():

...: print(name,val.kind)

...:

a keyword_only

b var_keyword

可看到引數a的型別為keyword_only,也就是僅僅為關鍵字引數。

但是,如果f定義為:

def f(a,*b):

print(f'a:,b:')

檢視引數型別:

in [24]: for name,val in signature(f).parameters.items():

...: print(name,val.kind)

...:

a positional_or_keyword

b var_positional

可以看到引數a既可以是位置引數也可是關鍵字引數。

python函式的5種引數

本文和大家分享的主要是 python開發 1 位置引數,呼叫函式時按位置傳入引數 2 預設引數,即在函式定義時就給出引數的值,設定預設引數時要注意兩點,一是必選引數在前,預設引數在後。二是把變化小的引數放在後面可作為預設引數。具有預設引數的函式被呼叫時可以不傳入預設引數,若需要改變預設引數的值則可以...

python 函式引數 和 的使用

單個星號 1 parameter 是用來接受任意多個引數並將其放在乙個元組中。如 def demo params for param in params print param a 1 b 2,3 demo a,b 輸出為 1 2,3 2 函式在呼叫多個引數時,在列表 元組 集合 字典及其他可迭代物...

Python 基礎 函式的使用 引數

在宣告函式時,如果有一些引數是執行時的必要條件,或者說在編寫的過程中大量出現,則可以把它設為預設值引數。呼叫函式時,如果沒有傳入對應的實參值,則函式使用宣告時則使用預設值引數。def babble words,time 1 print word time 對babble 進行呼叫 babble he...