python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。預設引數一定要用不可變物件,如果是可變物件,程式執行時會有邏輯錯誤!
要注意定義可變引數和關鍵字引數的語法:
*args
是可變引數,args接收的是乙個tuple;
**kw
是關鍵字引數,kw接收的是乙個dict。以及呼叫函式時如何傳入可變引數和關鍵字引數的語法:
可變引數既可以直接傳入:
func(1, 2, 3)
,又可以先組裝list或tuple,再通過*args
傳入:func(*(1, 2, 3))
;關鍵字引數既可以直接傳入:
func(a=1, b=2)
,又可以先組裝dict,再通過**kw
傳入:func(**)
。使用
*args
和**kw
是python的習慣寫法,當然也可以用其他引數名,但最好使用習慣用法。命名的關鍵字引數是為了限制呼叫者可以傳入的引數名,同時可以提供預設值。
定義命名的關鍵字引數在沒有可變引數的情況下不要忘了寫分隔符
*
,否則定義的將是位置引數。
#如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收city和job作為關鍵字引數(必傳,不可接受其他命名的字段引數)person('caroline',29)def person(name, age, *, city, job):
print(name, age, city, job)
person('caroline',29,city='london',job='teacher')
typeerror: person() missing 2 required keyword-only arguments: 'city' and 'job'
person('caroline',29,name='london',job='teacher')
typeerror: person() got multiple values for argument 'name'
在python中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數都可以組合使用。但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。
比如定義乙個函式,包含上述若干種引數:
在函式呼叫的時候,python直譯器自動按照引數位置和引數名把對應的引數傳進去。def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
最神奇的是通過乙個tuple和dict,你也可以呼叫上述函式:>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw =
>>> f2(1, 2, d=99, ext=none)
a = 1 b = 2 c = 0 d = 99 kw =
所以,對於任意函式,都可以通過類似>>> args = (1, 2, 3, 4)
>>> kw =
>>> f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw =
>>> args = (1, 2, 3)
>>> kw =
>>> f2(*args, **kw)
a = 1 b = 2 c = 3 d = 88 kw =
func(*args, **kw)
的形式呼叫它,無論它的引數是如何定義的。 Python定義函式預設引數
慕課網 定義函式的時候,還可以有預設引數。例如python自帶的 int 函式,其實就有兩個引數,我們既可以傳乙個引數,又可以傳兩個引數 int 123 123 int 123 8 83int 函式的第二個引數是轉換進製,如果不傳,預設是十進位制 base 10 如果傳了,就用傳入的引數。可見,函式...
Python函式定義與引數
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段,能提高應用的模組性,和 的重複利用率。函式定義 def 函式名 函式呼叫 函式名 定義函式的簡單規則 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。函式內容以冒號起始,並且縮排。return 表示式 結束函式,選擇...
Python 函式 定義,巢狀,引數
定義函式 使用def 函式名 def say hello print hello1 print hello2 print hello3 say hello 使用函式名呼叫函式,如果不呼叫則不會輸出結果 系統自動跳過函式 結果 hello1 hello2 hello3def sum num1 20 n...