我有一个方法:
@gen.coroutine
def my_func(x):
return 2 * x
基本上,龙卷风协程。
我正在制作如下列表:
my_funcs = []
for x in range(0, 10):
f = yield my_func(x)
my_funcs.append(x)
尝试将此列表理解为:
my_funcs = [yield my_func(i) for i in range(0,10)]
我意识到这是无效的语法。 turns out you can do this围绕收益率使用()
:
my_funcs = [(yield my_func(i)) for i in range(0,10)]
yield foo()
调用的语法(例如(yield foo() )
以便允许执行上述代码)是否具有特定类型的名称?
yield
?OSX上的Python 2.7.11。这段代码确实需要在Python2 / 3中工作,这就是为什么上面的列表理解不是一个好主意(参见here为什么,上面的列表comp在Python 2.7中工作但在Python 3中被破坏了。)< / p>
答案 0 :(得分:5)
yield
表达式必须在任何上下文中加括号,除非作为整个语句或作为赋值的右侧:
# If your code doesn't look like this, you need parentheses:
yield x
y = yield x
这在PEP that introduced yield
expressions(与yield
语句相对)中有说明,yield_expr
出现在grammar中的上下文暗示了这一点。虽然没有人期待你阅读语法:
yield-expression必须始终用括号括起来,除非它 发生在右侧的顶级表达式 分配