2024-04-25 17:34:29 发布
网友
在python中,第二个代码段toto会被拒绝,而第一个代码段titi没有问题,这有什么哲学上的原因吗?你知道吗
toto
titi
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
一个原因是赋值运算符=必须在右边有一个表达式,而不是一个(系列)语句。然后,您可能会问为什么会这样,我猜选择它是为了限制解析器的复杂性,并且不允许人们认为混淆的代码。你知道吗
=
请注意,您的toto可以这样有效地拼写:
toto = ( m for m in range(5) if m < 4 )
(换行和缩进只是为了强调这与无效代码中的结构非常接近)。你知道吗
我认为,在编程语言中,任何类型的循环都不能分配给变量,因为我想循环可能缺少一些与变量相关的确定性概念。你的例子是一个特例,因为它的结构非常简单,而且你包含了关键字yield。所以是的,你的例子可能是有效的,但是这意味着一些循环可以分配给变量,而不是其他的,这缺乏一致性。例如,Python弥补了列表理解和生成器(您的第一个代码段)的不足。在这些情况下,循环实际上被封装在某种父对象中,这为它们提供了一个更确定的或有界的方面。事实上,没有任何循环可以是生成器或列表理解的一部分,这很好地为那些循环提供了一种特殊的状态,比如你的循环,它们可以假装被分配给变量。你知道吗
一个原因是赋值运算符
=
必须在右边有一个表达式,而不是一个(系列)语句。然后,您可能会问为什么会这样,我猜选择它是为了限制解析器的复杂性,并且不允许人们认为混淆的代码。你知道吗请注意,您的
toto
可以这样有效地拼写:(换行和缩进只是为了强调这与无效代码中的结构非常接近)。你知道吗
我认为,在编程语言中,任何类型的循环都不能分配给变量,因为我想循环可能缺少一些与变量相关的确定性概念。你的例子是一个特例,因为它的结构非常简单,而且你包含了关键字yield。所以是的,你的例子可能是有效的,但是这意味着一些循环可以分配给变量,而不是其他的,这缺乏一致性。例如,Python弥补了列表理解和生成器(您的第一个代码段)的不足。在这些情况下,循环实际上被封装在某种父对象中,这为它们提供了一个更确定的或有界的方面。事实上,没有任何循环可以是生成器或列表理解的一部分,这很好地为那些循环提供了一种特殊的状态,比如你的循环,它们可以假装被分配给变量。你知道吗
相关问题 更多 >
编程相关推荐