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] |
这是,
1 2 3 4 | if foobar: yield x # statement y = yield x # expression |
这一表达式/声明双重性可能混淆不清,但完全是在Python的灵魂中,对比
声明,声明
不过,这是你做的一个很好的句子:
阅读文件,阅读课程,这是一个传奇问题。