TL;DR:我们能在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

这看起来像是,它期望某个东西作为未写入的返回语句的正确操作数,但找到了yield,并感到困惑.

有没有一种合法的方法可以在循环中实现这一点?

旁注:yield可以是陈述/表达,具体取决于你问的人:yield - statement or expression?

Final Answer :yields 可用于lambda,但限制(单线)使其无用.for/while在lambda中不可能,因为它们不是表达式.-user2357112隐式for循环在列表理解中是可能的,而yield在列表理解中是有效的-wim

Verdict-个显式循环不可能,因为python中的lambda只能包含表达式,要编写显式循环,需要使用语句.-wim

推荐答案

您试图创建的一行程序实际上在lambda中技术上是可行的,您只需要进一步帮助解析器:

>>> 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

这在列表理解中隐式使用for循环.在理解之外,明确的while圈或for圈是不可能的.这是因为python中的lambda只能包含expressions,要编写显式循环,需要使用statements.

Note: this syntax is deprecated in Python 3.7, and will raise SyntaxError in Python 3.8

Python-3.x相关问答推荐

是否可以使用参数对Flask重定向?

正则表达式匹配并提取括号前的单词

使用具有相同索引的多次出现的索引列表更新NumPy数组

为什么我的Selenium脚本在密码元素上失败?

如何将参数/值从测试方法传递给pytest的fixture函数?

可以在 Python 的上下文管理器中调用 sys.exit() 吗?

使用 iloc 或 loc 对多列进行过滤

Pandas教程:如何更新行内数值的位置

如何使用 django rest 框架在 self forienkey 中删除多达 n 种类型的数据?

日志(log)模块不适用于 Python3

pythondecorator中的变量范围

'~'(波浪号)运算符在 Python 中的应用

Python 3 变量名中接受哪些 Unicode 符号?

Tkinter AttributeError:对象没有属性'tk'

使用 Python3 与 HDFS 交互的最佳模块是什么?

根据条件过滤元组列表

如何使用 Python 订阅 Websocket API 通道?

Python 的 unittest 和 unittest2 模块有什么区别?

计算两个文件的行差异的最有效方法是什么?

__iter__ 和 __getitem__ 有什么区别?