问题描述
遇到此代码时,我正在对selectkbest函数进行this这样的问题
def coroutine():
for i in range(1,10):
print("From generator {}".format((yield i)))
c = coroutine()
c.send(None)
try:
while True:
print("From user {}".format(c.send(1)))
except stopiteration: pass
您可以看到作者在braces
附近使用了yield i
;我不明白为什么需要它。
str.format()
的{{3}}没有提到有关format()参数的任何类型。我确信我不知道yield语句是做什么的,或者在调用它时会生成或生成什么类型的事实引起了我的困惑。
您能帮我理解为什么在str.format函数调用中需要在括号周围加上括号吗?
编译器不是很有帮助,所以我不得不问这个问题
In [1]: def coroutine():
...: for i in range(1,10):
...: print("From generator {}".format(yield i))
...: c = coroutine()
...: c.send(None)
...: try:
...: while True:
...: print("From user {}".format(c.send(1)))
...: except stopiteration: pass
File "<ipython-input-1-024981190f27>",line 3
print("From generator {}".format(yield i))
^
SyntaxError: invalid Syntax
解决方法
在referenced generator article中,您可以阅读:
我建议您始终在yield表达式两边加上括号 当您使用返回值进行操作时,如上 例。括号并非总是必需的,但是更容易 总是添加它们,而不必记住何时需要它们。 (PEP 342解释了确切的规则,即yield-expression 必须始终加上括号,除非它出现在顶层 表达式在作业的右侧。
因此,由于使用了yield i
的返回值,并且yield i
不是赋值右侧的顶级表达式,因此必须将其括起来。
此外,此答案还有更多信息:https://stackoverflow.com/a/37845447/4962858