关于python:yield – 语句还是表达式?

yield - statement or expression?

所以,我一直在阅读这篇文章,并发现了如何向生成器发送值。

现在我有点困惑。是陈述还是表达?它不像函数那样使用括号语法,所以看起来像语句。但它返回值,所以类似于表达式。

不久前,我有一个关于"为什么python没有‘if x=foo():(…)’"的对话?(为什么我们不能在if语句条件中赋值)。我说过,语句是原子的,所以赋值语句和if语句应该分开。现在,我不知道该怎么想了。

=编辑=

我读了不少书。

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

所以,收益是有价值的。我明白了,所有的文档都说它是一个语句,但是如果语句可能有值,那么表达式和语句之间到底有什么区别呢?

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

=最终答案==

显然,收益率可以两者兼得。只需阅读这些答案:(1)和(2)-我发现它们最有用。


是一种表达。它通常是一个声明,通常作为一个完整的声明使用,但在Python2.5中,它被转化为一种表达方式,作为新科鲁廷支持的一部分。It's still commonly referred to a s the"Yield statement",partly due to outdated documentation and knowledge and partly,because it's mostly used a s a statement anyway.你可以在PEP 342上读到这个。

Aside from the following forms:

1
2
yield whatever
x = yield whatever

一个产量表达必须是在出现时的括号,以避免语法上的矛盾。


According to the grammar:

ZZU1

1
yield_expr: 'yield' [testlist]

这是,yield x,可以同时依靠:

1
2
3
4
 if foobar:
    yield x   # statement

 y = yield x   # expression

这一表达式/声明双重性可能混淆不清,但完全是在Python的灵魂中,对比forLOOOPS vs forComprehensions,ifStatement vs.Conditional Operator,lambdaVS def


声明,声明

不过,这是你做的一个很好的句子:x = (yield y)。在我头顶上,我无法想象在Python中有什么其他的说法可以用。

阅读文件,阅读课程,这是一个传奇问题。