TLDR:
lambda
内にyield
またはジェネレータ文(ループ付き)を実装できますか?Python:lambda、yield文/式とループ(明確化)
私の質問を明らかにすることである。
次の簡単なループ機能が降伏エラーで
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
それは期待していた、のように見えます書かれていないreturnステートメントのための右のオペランドとして何かがありますが、yeild
が見つかり、混乱しています。
ループ内でこれを達成する適切な方法がありますか?
サイドノート
:yield
は、あなたが尋ねる人に応じた声明/発現することができます:
yield - statement or expression?
最終的な答え:収率はラムダと一緒に使用することができますが、制限(シングルライン)は、それは無用になります。 for/while
は式ではないため、ラムダでは使用できません。 -user2357112暗黙のforループはリスト内包表記で可能であり、yieldはリスト内包表記内で有効です。 - WIM
Verdict-明示的なループではない可能性Pythonでラムダは式のみを含めることができ、あなたはステートメントを使用する必要があります明示的なループを記述するため。 -wim
「あなたも限りそれは、単一の行に含まれているとして ')('プリントのようなステートメントを使用することができます」 - 間違っています! 'print'はPython 3の関数で、' print'呼び出しは普通の式です。 'yield'呼び出しの中で任意の単一行の文を使用することはできません。 – user2357112
これを 'lambda 'で書くのは無意味です。それを一行にまとめる場合、 '(x in x in range(0、15))'はジェネレータ関数の直接genexp変換になります。 – user2357112
私は同意します。私は理論を試そうとしていた。 2番目の考えでは、 'lambda'の制限が1つのステートメントに収まらなければならないので、' lambda 'の中にループを持つために何かを達成することはできません。しかし、それは私を悩ませているので、最終的にこれを明確にすることは良いでしょう。 – theMobDog