1. 程式人生 > >python收集引數

python收集引數

最近學習python,看《Python基礎教程》(第2版),發現函式定義裡面有一個“收集引數”很有趣。

使用者定義函式時,可以定義一個確定引數數量的函式,如:

>>> store(data, name1, name2, name3)

但是假如定義前不知道有多少個引數,該如何定義呢,C++和java中都有相應的解決方法,python中自然也有

def print_params(*params):
    print(params)

這裡引數前面加上了星號*,即是不確定數量的引數,呼叫方式如下:

>>> print_params('
Testing') ('Testing',) >>> print_params(1, 2, 3) (1, 2, 3) >>> print_params() ()

從上面的三個例子可以看出,使用*作為不確定數量引數,輸入引數為元組型別

這種方法為啥叫收集引數呢?因為它收集所有其餘位置引數,這樣其實說明,它只能在引數末尾進行收集,而不能在開頭或者中間收集

 

除了收集雜湊的引數,還可以收集key-value字典型別的引數,例如:

def print_params_3(**params):
    print(params)

呼叫方式:

>>> print_params_3(x=1, y=2, z=3)
{'z': 3, 'x': 1, 'y': 2}

二者一起用:

print_params_4(x, y, z=3, *pospar, **keypar):
    print(x, y, z)
    print(pospar)
    print(keypar)

呼叫方式;

>>> print_params_4(1, 2, 3, 4, 5, 6, 7, foo=1, bar=2)
1 2 3
(5, 6, 7)
{'foo' : 1, 'bar' : 2}
>>> print_params_4(1,2) 1 2 3 () {}

 

引數收集的逆過程:

函式引數使用*號收集得到元組,使用**收集得到字典,那麼反過來使用元組和字典可以作為函式引數

def add(x,y):
    return x+y

>>> params = (1, 2)
>>> add(*params)
3