陈述或表达?
所以,我一直在阅读这篇文章,并发现了将值发送给生成器的原因。
现在我有点困惑。 是产生一个陈述或表达? 它不像函数那样使用括号语法,所以它看起来像声明。 但它会返回价值,所以它就像表达式一样。
不久前,我有过关于“为什么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