是否有哲学上的原因,为什么在第一个代码段toto
正常的情况下,第二个代码段titi
将在python中被拒绝?
def titi():
for m in range(5):
if m < 4:
yield m
toto = for m in range(5):
if m < 4:
yield m
编辑:
我希望函数的主体是一个有效的表达式,并且能够平等地定义
def titi():
toto
答案 0 :(得分:1)
好吧,原因之一是赋值运算符=
的右边必须有一个表达式,而不是(一系列)语句。然后,您可能会问为什么会这样,而我想选择它是为了限制解析器的复杂性,并禁止人们认为混淆代码。
请注意,您的toto
可以通过如下有效方式进行拼写:
toto = (
m
for m in range(5)
if m < 4
)
(仅在此处使用换行符和缩进来强调这与无效代码中的结构非常相似)。
答案 1 :(得分:0)
我认为,在编程语言中,任何种类的循环都不能分配给变量,这主要是因为我猜想循环中可能缺少与变量相关的确定性概念。您的示例是一个特例,从某种意义上说,该结构非常简单,并且包含了关键字yield。因此,是的,您的示例可能是有效的,但是这意味着某些循环可能被分配给变量,而其他循环可能被分配给缺乏一致性的循环。 Python在列表理解和生成器(您的第一个代码段)的意义上弥补了这一点。在这些情况下,循环实际上被封装在某种父对象中,这为它们提供了更具确定性或有界的方面。实际上,没有任何循环可以成为生成器或列表推导的一部分,这很好地为像您这样的循环提供了特殊的状态,这些循环可以假装分配给变量。