陈述或表达?

所以,我一直在阅读这篇文章,并发现了将值发送给生成器的原因。

现在我有点困惑。 是产生一个陈述或表达? 它不像函数那样使用括号语法,所以它看起来像声明。 但它会返回价值,所以它就像表达式一样。

不久前,我有过关于“为什么python没有”的对话,如果x = foo():(...)'?“ (为什么我们不能在if语句条件中赋值)。 我说,这些陈述是原子性的,所以赋值语句和if语句应该分开。 现在,我不知道该怎么想。

==编辑==

我做了我的阅读。

http://docs.python.org/2/reference/expressions.html#generator.send - “值参数成为当前yield表达式的结果。”

所以,产生HAS价值。 我明白了,所有的文档都说这是一个陈述,但是如果陈述可能有价值,那么表达和陈述之间的区别究竟是什么?

另外,我知道什么是生成器,协程等等,我需要元语义或文档的语义:D

==最终答案==

显然,收益率可以是两个。 只要阅读这些答案:(1)和(2) - 我发现他们最有帮助。


yield是一个表达。 它曾经是一个声明,它最常用作整个声明,但在Python 2.5中,它变成了一个表达式,作为新协程支持的一部分。 它仍然通常被称为“收益声明”,部分原因是过时的文档和知识,部分原因是它主要用作声明。 你可以在PEP 342中阅读。

除了以下形式:

yield whatever
x = yield whatever

必须将yield表达式加在括号中,以避免语法中出现歧义。


根据语法:

yield_stmt: yield_expr

yield_expr: 'yield' [testlist]

也就是说, yield x可以同时取决于上下文:

 if foobar:
    yield x   # statement

 y = yield x   # expression

这种表达/陈述二元可能是混乱的,但完全是在Python的精神,比较for循环VS for内涵, if语句与条件运算符, lambda VS def


yield是声明。

然而,关于这个语法,这是一个很好的观点: x = (yield y) 。 关于我的头顶,我无法想象python中可以像那样使用的其他语句。

阅读文档以及当然这个传奇性的问题很有用。

链接地址: http://www.djcxy.com/p/9215.html

上一篇: statement or expression?

下一篇: Does Yield Break return a value?