[ python ] 函數的參數

 位置參數

def power(x, n):
    return x ** n

 站在形參的角度:
    x 和 n 都是位置參數
    
站在實參的角度:
    x 和 n 有兩種傳參的方法
        (1)嚴格按照順序進行傳參
        (2)按照默認參數的形式進行傳參python

>>> power(2, n = 4)
16

或

>>> power(n=4, x=2)
16

 

 默認參數

在平常使用中,咱們發現計算最多的都是 x 的平方,可是咱們每次調用都須要傳遞兩個參數,在這樣的狀況下,咱們能夠將 n 默認設置爲 2,這就是默認參數。函數

>>> power(4)
16

或者

>>> power(4, n=2)
16

 而對於 n > 2 的其餘狀況,就必須明確的傳入 n 好比:power(4, n=4)spa

>>> power(4, n=4)
256

 

從上面的例子能夠看出,默認參數能夠簡化函數的調用。設置默認參數時,有幾點須要注意:
    (1)必選參數(位置參數)在前,默認參數在後,不然Python的解釋器會報錯;
    (2)把變化大的參數放前面,變化小的參數放後面。變化小的參數就能夠做爲默認參數。對象

使用默認參數能夠下降調用函數的難度,可是定義默認參數要牢記一點:默認參數必須指向不變對象blog

 

 可變參數

在python函數中,還能夠定義可變參數。可變參數就是傳入的參數個數是可變的,能夠是1個、2個到任意個,還能夠是0個。ci

定義可變參數:it

def calc(*args):
    n = 0
    for i in args:
        n += i
    return  n
		

>>> calc(1,2,3,4,5,6)	# 能夠傳入的參數個數是可變的
21
>>> calc(1,2,3)
6

 

也能夠直接傳入一個 list 或者 tuple,傳入方式以下:class

>>> li = [1,2,3,4]
>>> calc(*li)
10

>>> t1 = (1,2,3,4,5,6)
>>> calc(*t1)
21

 

 關鍵字參數

可變參數容許傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個 tuple。而關鍵字參數容許傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個 dict 。語法

>>> def person(name, age, **kwargs):	# 關鍵參數定義爲: **kwargs
...     print('name:', name, 'age:', age, 'other:', kwargs)
...
>>> person('jay', 20, city='taibei', sex='male')	# 關鍵字參數容許傳入0個或任意個含參數名的參數
name: jay age: 20 other: {'sex': 'male', 'city': 'taibei'} 	# 函數調用時自動組裝爲一個 dict

 

 命名關鍵字參數

對於關鍵字參數,函數的調用者能夠傳入任意不受限制的關鍵字參數。至於到底傳入什麼,就須要在函數內部經過kwargs檢查,若是要限制關鍵字參數的名字,就可使用命名關鍵字參數,例如 person函數只接收 city 和 job 做爲關鍵字參數。定義以下:程序

和關鍵字參數**kwargs不一樣,命名關鍵字參數須要一個特殊分隔符*,*後面的參數被視爲命名關鍵字參數。

>>> def person(name, age, *, city, job):
...     print(name, age, city, job)
...
>>> person('jay', 20, city='taibei', job='singer')
jay 20 taibei singer

 

 參數的組合

在python中定義函數,能夠用位置參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數均可以組合使用。可是請注意,參數定義的順序必須是: 位置參數、默認參數、可變參數、命名關鍵字參數、關鍵字參數

 

好比定義一個函數,包含若干參數:

>>> def f1(a, b, c=3, *args, **kwargs):
...     print('a=', a, 'b=', b, 'c=', c, 'arg=', args, 'kwargs=', kwargs)
...
>>> f1('a', 'b', 'c', 'd', 'e', 'f',  h='H', i='I' ,j='J')
a= a b= b c= c arg= ('d', 'e', 'f') kwargs= {'i': 'I', 'j': 'J', 'h': 'H'}

 

 小結

默認參數必定要用不可變對象,若是是可變對象,程序運行時會有邏輯錯誤!要注意定義可變參數和關鍵字參數的語法:    *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(**{'a': 1, 'b': 2})。

相關文章
相關標籤/搜索