def myfunc(a,b=2):
print("Called with", a, b)
return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)
爲什麼我運行最後一行時出現語法錯誤?它適用,如果我這樣做:myfunc("foobar", 4)
爲什麼在Python中這不可能?
def myfunc(a,b=2):
print("Called with", a, b)
return
p1 = functools.partial(myfunc, b=4)
p1("foobar", 4)
爲什麼我運行最後一行時出現語法錯誤?它適用,如果我這樣做:myfunc("foobar", 4)
爲什麼在Python中這不可能?
'偏'已經設置'b'爲4;如果你想你應該明確地設置參數「B」的另一個值:
>>> p1("foobar")
('Called with', 'foobar', 4)
>>> p1("foobar", b=5)
('Called with', 'foobar', 5)
我覺得對於一個初學Python的人來說,你的回答太神祕了。你能解釋一下爲什麼一個「應該明確地設置參數'b'」嗎?問題中的第一個詞是「爲什麼」,而不是如何。 – 2012-04-13 13:45:17
你說得對。儘管使用'partial'並不適合初學者...... – Don 2012-04-13 13:47:31
@Bryan個人而言,我不認爲Python中的初學者應該使用partial,至少如果它們不是來自功能性背景的話。並試圖做'部分(func,b = 5)(a,b = 4)'聽起來好像我們試圖解決錯誤的問題。爲什麼要在那裏部分地使用? – Voo 2012-04-13 13:59:05
因爲你是一個b
在functools.partial
調用中提供它。 您的電話應該是這樣的:
p1("foobar")
,或者你可以只得到p1 = functools.partial(myfunc, b=4)
擺脫b=4
,使其類似:
p1 = functools.partial(myfunc)
爲什麼使一個沒有參數的部分?只要做''p1 = myfunc''。 – 2012-04-13 13:47:32
(我編輯過你的文章,所以代碼塊格式正確:)有關於如何讓它在這裏工作的詳細信息: – huon 2012-04-13 13:50:58
謝謝我在這裏很新 – 2012-04-13 17:32:28
我想這是因爲Python允許您使用可選的參數任何訂單。當您使用更多的靜態類型語言時,通常會按照函數/方法中定義的順序使用可選參數。因此,例如,在Python這是合法的:
def myfunc(a=1,b=2,c=3):
print a,b,c
myfunc(c=99, b=13, a=12)
因爲你可以按任何順序指定可選參數,我認爲Python明確需要知道哪些參數被分配到本地函數變量。
Partial創建一個新函數,該函數使用一些預定義參數調用舊函數,然後使用與原始函數相同數量的參數調用部分函數是沒有意義的。只是不要通過4,它會按照你的意圖工作。 – 2012-04-13 13:46:10
沒有語法錯誤,你的意思是'TypeError'? – delnan 2012-04-13 13:49:02