python函式的引數(必選,預設,可變,關鍵字)

2021-10-10 01:39:58 字數 2465 閱讀 6944

python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。

預設引數一定要用不可變物件,如果是可變物件,執行會有邏輯錯誤!

(1)他們是啥?幹啥的?

簡單說:定義函式接收的引數可以接收任意個,或者呼叫函式傳引數時候傳任意個。

*args是可變引數,收集所有位置引數,儲存為乙個tuple;

**kwargs是關鍵字引數,收集所有關鍵字引數(簡單說:就是鍵值對引數!),儲存為乙個dict。

(2)呼叫函式時,如何傳入可變引數和關鍵字引數?以及他們的語法?

可變引數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過args傳入:func((1, 2, 3));

關鍵字引數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過kwargs傳入:func()。

示例:

在python中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數都可以組合使用。

但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。

函式定義:

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

def

f1(a, b, c=0,

*args,

**kw)

:print

('a ='

, a,

'b ='

, b,

'c ='

, c,

'args ='

, args,

'kw ='

, kw)

deff2

(a, b, c=0,

*, d,

**kw)

:print

('a ='

, a,

'b ='

, b,

'c ='

, c,

'd ='

, d,

'kw ='

, kw)

函式呼叫:

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

1

>>

> f1(1,

2)2 a =

1 b =

2 c =

0 args =

() kw =

3>>

> f1(1,

2, c=3)

4 a =

1 b =

2 c =

3 args =

() kw =

5>>

> f1(1,

2,3,

'a',

'b')

6 a =

1 b =

2 c =

3 args =

('a'

,'b'

) kw =

7>>

> f1(1,

2,3,

'a',

'b', x=99)

8 a =

1 b =

2 c =

3 args =

('a'

,'b'

) kw =

9>>

> f2(1,

2, d=

99, ext=

none

)10 a =

1 b =

2 c =

0 d =

99 kw =

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

1

>>

> args =(1

,2,3

,4)2

>>

> kw =

3>>

> f1(

*args,

**kw)

4 a =

1 b =

2 c =

3 args =(4

,) kw =

5>>

> args =(1

,2,3

)6>>

> kw =

7>>

> f2(

*args,

**kw)

8 a =

1 b =

2 c =

3 d =

88 kw =

所以,對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的。

雖然可以組合多達5種引數,但不要同時使用太多的組合,否則函式介面的可理解性很差。

python3 函式 必選引數與預設引數

位置引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。def power x,n s 1 while n 0 n n 1s s x return sprint pow 5,3 125 修改後的power x,n 函式有兩個引數 x和n,這兩個引數都是位置引數,呼叫函式時,傳入的兩個值按照位...

函式的引數(必選,預設,可變,關鍵字)

python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。預設引數一定要用不可變物件 如果是可變物件,執行會有邏輯錯誤!1 他們是啥?幹啥的?簡單說 定義函式接收的引數可以接收任意個,或者呼叫函式傳引數時候傳任意個。args是可變引數,收集所有位置引數,儲存為乙個tu...

Python 函式的引數 預設引數

預設引數很有用,但使用不當,也會掉坑里。預設引數有個最大的坑,演示如下 先定義乙個函式,傳入乙個list,新增乙個end再返回 def add end l return l當你正常呼叫時,結果似乎不錯 add end 1,2,3 1,2,3,end add end x y z x y z end 當...