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...