2014-03-27 94 views
0

我有一個代碼,我正在學習,我完全卡在這裏。Python包裝關鍵字參數與*

代碼:

def f(*a): 
    print a 
print (*[1,2]) # prints (1,2) 

爲什麼?我不知道這背後的過程。我知道*args將可變長度參數轉換爲元組,但是(*[1,2])的性能如何?

+0

是否缺少最後一行的函數調用?您的代碼不會按原樣運行。 – Blender

+0

是啊,似乎是這樣.. – user3467433

回答

0

我想你想,而不是寫:

print f(*[ 1, 2]) # Python 2 
print(f(*[ 1, 2])) # Python 3 

*做什麼,是一種叫unpacking。在這種情況下,你在哪裏拆包的清單。它通常用來傳遞列表作爲「獨立」參數的功能,例如:

def f(a, b): 
    print a 
    print b 

你可以這樣調用它

f(*[1, 2]) # with unpacking 

這相當於

f(1, 2) 
+0

但不解壓只發生在你打電話給拉鍊(*東西)? *本身是否也執行該操作?或者正在解壓縮一個不同的解包概念? – user3467433

+0

完全不同。只是玩它,你會找出原因。請注意,當你做'zip(* stuff)'時,你首先解壓縮和壓縮。每個過程都不​​同。 – Christian

0

這稱爲參數解包 - 參見參考at the documentation

簡而言之,print f(*[1,2])獲取列表中的每個元素,並將其作爲單個參數傳遞給方法f

方法f需要多個位置參數,它們在正文中被分配名稱a

因此,當您鍵入f(*[1,2])時,這與f(1,2)相同。在另一邊,f接收1,2的元組a並打印:

>>> def f(*a): 
... print(a) 
... 
>>> f(*[1,2]) 
(1, 2)