Issue
Can we implement yield
or generator statement (with a loop) within a lambda
?
My question is to clarify:
Whether the following simple loop function can be implemented with yield
def loopyield():
for x in range(0,15):
yield x
print(*loopyield())
Results in error:
lamyield=lambda x: yield x for x in range(0,15)
^
SyntaxError: invalid syntax
Which looks like, it was expecting something as right operand for unwritten return statement but found the yield
and getting confused.
Is there a proper legit way to achieve this in a loop?
Side note: yield
can be statement/expression depending on who you ask: yield - statement or expression?
Final Answer : yield can be used with lambda but the limitation(single-line) makes it useless. for/while
not possible in lambda because they are not expressions. -user2357112 implicit for loop is possible with list comprehension, and yield is valid within the list comprehension. -wim
Verdict- Explicit loops not possible because lambdas in python can only contain expressions, and to write an explicit loop you will need to use statements. -wim
Solution
The one-liner you seem to be trying to create is actually technically possible with a lambda, you just need to help the parser a bit more:
>>> lamyield = lambda: [(yield x) for x in range(15)]
>>> print(*lamyield())
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
This uses a for loop implicitly in a list comprehension. It is not possible with an explicit while
loop or for
loop outside of a comprehension. That's because lambdas in Python can only contain expressions, and to write an explicit loop you will need to use statements.
Note: this syntax is deprecated in Python 3.7, and will raise SyntaxError
in Python 3.8
Answered By - wim
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.