TLDR:
我們可以在lambda
內實現yield
或生成器語句(帶循環)嗎?python:lambda,yield-statement/expression和loops(澄清)
我的問題是澄清:
無論下面簡單的循環功能,可以用產量來實現在錯誤
def loopyield():
for x in range(0,15):
yield x
print(*loopyield())
結果:
lamyield=lambda x: yield x for x in range(0,15)
^
SyntaxError: invalid syntax
看起來像,它期待不成文的返回語句的右操作數,但發現yeild
並感到困惑。
有沒有一個合適的方法來實現循環?
旁註:yield
可取決於誰你問的語句/表達:yield - statement or expression?
最終的答案:產量可與拉姆達使用,但限制(單線),使之無用。 for/while
在lambda中不可能,因爲它們不是表達式。 -user2357112隱式for循環對於列表理解是可能的,並且yield在列表理解中是有效的。 - WIM
Verdict-顯式循環不可能的,因爲在Python lambda表達式只能包含表達式,並寫一個明確的循環中,您將需要使用的語句。 -wim
「但你也可以使用如下語句打印'()'只要它被包含在一個單一的線」 - 錯了! 'print'是Python 3中的函數,'print'調用是普通表達式。你不能在'yield'調用中使用任意的單行語句。 – user2357112
試圖用'lambda'寫這個是毫無意義的。如果你想把它填入一行,'(x for x in range(0,15))'將是你的生成函數的直接genexp轉換。 – user2357112
我同意。我試圖測試一個理論。第二個想法是,由於'lambda'必須適合單個語句的限制,我懷疑我可以在'lambda'中實現任何循環。但最終澄清這一點會很好,因爲它一直在擾亂我。 – theMobDog