Python函式引數總結

2021-06-26 03:54:24 字數 3648 閱讀 8397



作為乙個沒有系統學習過python,卻要與之日日相對看原始碼的人,真尼瑪痛苦啊。。。經常看到**kws之類的,心中狂虐:這啥?指標的指標?!t^t

昨天看《python核心程式設計》的時候,剛好看到了函式部分,於是順勢將目前接觸到的集中引數型別都總結一下吧^^

總的來說,除去普通的normal args,python中比較特別的函式引數有:關鍵字引數、預設引數、非關鍵字可變長引數(元組)、關鍵字可變長引數(字典),下面將結合例子進行介紹。

關鍵字引數:呼叫時指定引數的名稱,且與函式宣告時的引數名稱一致。使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,僅根據引數的指定進行賦值。例:

# 函式定義

def foo(x, y):

print 'x is %s' % x

print 'y is %s' % y

if __name__ == '__main__':

# 標準呼叫

foo(1, 2)

# 關鍵字呼叫

foo(y = 1, x = 2)

在標準呼叫中,x和y依次為1和2;在關鍵字呼叫中,x和y的值根據名字指定而與順序無關。

# 標準呼叫輸出

x is 1

y is 2

# 關鍵字呼叫輸出

x is 2

y is 1

預設引數:在函式宣告時,指定形參的預設值,呼叫時可不傳入改引數(使用預設值)。例:

def tax(cost, rate = 0.17):

print cost * (1 + rate)

if __name__ == '__main__':

# rate使用預設值0.17

tax(1000)

# rate指定為0.05

tax(1000, 0.05)

使用預設值時,rate為0.17,結果為1170;在指定引數rate時,rate為0.05,結果為1050。

# tax(1000)的輸出

1170.0

# tax(1000, 0.05)的輸出

1050.0

非關鍵字可變長引數(元組):「非關鍵字」「可變長」顧名思義是允許在呼叫時傳入多個「非關鍵字」引數,python會將這些多出來的引數放入乙個元組中。例:

# 定義函式,其中*therest為非關鍵字可變長引數

def tuplevarargs(arg1, arg2='defaultb', *therest):

print 'formal arg 1: ', arg1

print 'formal arg 2: ', arg2

for eachxtrarg in therest:

print 'another arg: ', eachxtrarg

我們採用多種呼叫方式來檢視結果,從而理解非關鍵字可變長引數的使用:

>>> tuplevarargs('abc')

formal arg 1: abc

formal arg 2: defaultb

>>> tuplevarargs('abc', 'def')

formal arg 1: abc

formal arg 2: def

>>> tuplevarargs('abc', 'def', 'xyz', 123.4)

formal arg 1: abc

formal arg 2: def

another arg: xyz

another arg: 123.4

關鍵字可變長引數(字典):「關鍵字」「可變長」顧名思義是允許在呼叫時傳入多個「關鍵字」引數,python會將這些多出來的《引數名, 引數值》放入乙個字典中。需要注意的是,關鍵字變數引數應該為函式定義的最後乙個引數,帶**。例:

# 定義函式,其中**therest為關鍵字可變長引數

def dictvarargs(arg1, arg2='defaultb', **therest):

print 'formal arg 1: ', arg1

print 'formal arg 2: ', arg2

for eachxtrarg in therest.keys():

print 'xtra arg %s: %s' % (eachxtrarg, str(therest[eachxtrarg]))

我們採用多種呼叫方式來檢視結果,從而理解關鍵字可變長引數的使用:

>>> dictvarargs('abc')

formal arg 1: abc

formal arg 2: defaultb

>>> dictvarargs('abc', 'def')

formal arg 1: abc

formal arg 2: def

# a=1和b='aha'即為關鍵字可變引數,他們會被放入therest字典

>>> dictvarargs('abc', 'def', a=1, b='aha')

formal arg 1: abc

formal arg 2: def

xtra arg a: 1

xtra arg b: aha

# 全部採用關鍵字引數,但只有a和b是可變的,會被放入therest

>>> dictvarargs(arg2='def', a=1, b='aha', arg1='put at the last')

formal arg 1: put at the last

formal arg 2: def

xtra arg a: 1

xtra arg b: aha

# 這次使用了arg2的預設值

>>> dictvarargs('one', a=1, b='aha', name=('yuki', 'lau'))

formal arg 1: one

formal arg 2: defaultb

xtra arg a: 1

xtra arg b: aha

xtra arg name: ('yuki', 'lau')

注意

當非關鍵字可變長引數和關鍵字可變長引數出現在同乙個函式中時,他們應當遵守如下的順序約定:

def newfoo(normal_arg1, normal_arg2, *non-keywords, **keywords):

pass

當然,你也可以直接向函式中傳入元組和字典物件,如:

>>> newfoo(2, 4, *(6, 8), **)

也可以來個「混搭」,孤立的可變長引數將會被放入對應的tuple或dict中,如:

>>> newfoo(2, 4, 3, x=4, y=5, *atuple, **adict)

在這個例子中,引數3會被放入atuple,引數x=4和y=5會被放入adict

python 函式引數 簡明總結

1.位置引數 必選引數 2.預設引數 3.可變引數 args 4.關鍵字引數 kw 5.命名關鍵字引數 named kw 可變引數 def func args type args tuple func 1,2,3,4 mytuple 1 2,3 func mytuple 允許傳入0個或任意個引數,這...

python引數函式 Python函式引數總結

coding utf 8 整理一下python函式的各種引數型別 位置引數 呼叫函式時,傳入的兩個值按照位置順序依次賦給引數 def power x,n s 1 while n 0 n n 1 s s x return s print power 5,2 預設引數 簡化函式的呼叫 def power...

Python函式傳入引數方式總結

位置引數是最簡單的傳入引數的方式 def func a,b print a b func 1,3 3預設引數是在呼叫函式的時候使用一些包含預設值的引數 def power x,n 2 s 1while n 0 n 1 s n return s可變引數允許在呼叫引數的時候傳入多個引數,這些引數在呼叫時...