【发布时间】:2018-07-11 05:48:50
【问题描述】:
在documentation中,生成器表达式的定义为
generator_expression ::= "(" expression comp_for ")"
而在 grammar 中它被隐藏并读取
atom: ('(' [yield_expr|testlist_comp] ')' | .......
testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] )
根据语法,"(" "*" 表达式 comp_for ")" 是一个有效的生成器表达式,但文档中没有详细说明。有人可以为我举一个带有星星的发电机的具体例子吗?
假设myList = ((1, 2, 3), (4, 5, 6)),例如考虑(*x for x in myList)
-
myList是一个原子 -
for x in myList匹配 comp_for 根据comp_for: 'for' exprlist 'in' or_test
*x匹配star_expr因此test|star_expr-
*x for x in myList匹配testlist_comp - 最后
(*x for x in myList)是一个有效的原子,因为它匹配'(' testlist_comp ')'
python 解释器给出 SyntaxError: iterable unpacking cannot be used in comprehension
【问题讨论】:
-
你的意思是像
[*x for x in ((1, 2, 3), (4, 5, 6))]这样的东西吗?因为当我尝试这样做时,我得到“SyntaxError:可迭代解包不能用于理解”。你从哪里得到那颗星? -
(*x,)有效,但与您的问题没有直接关系:)
标签: python-3.x