带有星形表达式

时间:2018-02-01 00:36:04

标签: python-3.x

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)

  1. myList是一个原子
  2. for x in myList根据

    匹配comp_for 在'or_test

  3. comp_for:'for'explist'

  4. *x匹配star_expr因此test|star_expr

  5. *x for x in myList匹配testlist_comp
  6. 最后(*x for x in myList)是一个有效的原子,因为它匹配'(' testlist_comp ')'
  7. python解释器给出 SyntaxError:迭代解包不能用于理解

1 个答案:

答案 0 :(得分:1)

Python中的法律语法与语法所描述的完全不同。 ast.c中对ast_error的各种调用是语法允许但无效的案例。 "位置参数跟随关键字参数"是最熟悉的语言之一:语法中没有什么不允许的

def foo(what=None, how):
    pass

但这会引发SyntaxError(请参阅this line in ast.c in the cpython source)。