Python函式的引數定義

2021-10-04 01:12:52 字數 2352 閱讀 2086

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作為關鍵字引數(必傳,不可接受其他命名的字段引數

def person(name, age, *, city, job):

print(name, age, city, job)

person('caroline',29,city='london',job='teacher')

person('caroline',29)

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種引數都可以組合使用。但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。

比如定義乙個函式,包含上述若干種引數:

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)

在函式呼叫的時候,python直譯器自動按照引數位置和引數名把對應的引數傳進去。

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

最神奇的是通過乙個tuple和dict,你也可以呼叫上述函式:

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