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相关问答推荐

Python网页抓取:代码输出:汤未定义

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

切片时是否在NumPy ND数组中创建新对象?

regexp多重前瞻行为的解释

给定panda代码的分组和百分比分布pyspark等价

如何定义部署用 Python 编写的 Firestore 第二代函数的区域/位置?

如何创建与导航抽屉一起使用的导航栏

在Python中基于组/ID将两个数据帧进行映射,找出较接近的值

从列表的元素和python中的多个多索引数据帧执行方程

如何沿单列获取嵌套列表中的唯一值?

Snakemake 'run' 指令不产生错误信息

判断 gekko 中的表达式

通过附加/包含多个列表来创建 nDimensional 列表

Python:如何从句子/段落中提取地址(非正则表达式方法)?

如何在python中将列表转换为其他格式

在python中基于列表理解的条件下跳过元素

在带有 M1 芯片(基于 ARM 的 Apple Silicon)的 Mac 上安装较早版本的 Python(3.8 之前)失败

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

在不关心项目的情况下运行生成器功能的更简单方法

使用完整路径激活 conda 环境