2017-10-07 46 views
-1

對於以下4個功能:Python 3並非所有的1行函數都是lambdas?

def test1(a): 
    def result(b): 
    return a+b; 
    return result 

def test2(a): 
    return lambda b: a+b 

test3 = lambda a : lambda b : a+b 

test4 = lambda a : (lambda b : a+b) 

print(test1(2)(3)) 
print(test2(3)(4)) 
print(test3(5)(6)) 
print(test4(7)(8)) 

test1工作正常test1(a)(b)回報A + B
test2正常工作太test2(a)(b)返回A + B
test3test4給出一個語法錯誤undefined variable a

爲什麼譯員是否可以在test1和2中找到一個,但不能在3或4中找到?
有沒有辦法將測試函數寫成lambda?

+4

嘗試運行實際運行的代碼 - 它的工作原理。 – MatsLindh

+0

請參閱https://ideone.com/02s6h7顯示它正在運行。 –

+0

@roganjosh這當然是我的問題的簡化版本。我不認爲我需要在我的文章中明確地調用test1和test2。 (但我確實在我自己的代碼中嘗試過)。如果你喜歡,我會把它添加到這裏,但我認爲它增加了不必要的混亂。 – fejfo

回答

2

您的代碼沒問題,您在那裏的undefinded variable只是您正在使用的IDE或幫助程序的問題,似乎無法正確捕獲lambda作用域。

你可以看到它使用相同的「錯誤」 here enter image description here

+0

關於無法複製的問題的問題應該是封閉的,VS回答。一旦你確定了一個答案,這會讓其他人更難以修正他們問題中的任何錯誤,從而使其不可重現(因爲這樣做會使答案失效)。 –

+1

@CharlesDuffy,我能夠複製它,只需將代碼複製/粘貼到repl.it網頁中,它們的語法分析器實際上會給出該「錯誤」,它會在第一次運行後消失。我可以將此添加爲附加信息嗎? – Netwave

+0

嗯。我傾向於在這一點上看到,如果我們可以鼓勵OP來編輯問題以指定哪個工具給出錯誤,而不是簡單地將其描述爲來自「Python 3」。 –

相關問題