wim*_*wim 5 python grammar parsing del language-lawyer
del 语句的语法:
del_stmt: 'del' (expr|star_expr) (',' (expr|star_expr))* [',']
Run Code Online (Sandbox Code Playgroud)
它允许删除带星号的表达式。因此,解析器并不介意这一点,即使它会SyntaxError: can't use starred expression here在运行时导致:
>>> ast.parse("del *a")
<_ast.Module at 0xcafef00d>
>>> ast.dump(compile('del *a', filename='wtf.py', mode='single', flags=ast.PyCF_ONLY_AST))
"Interactive(body=[Delete(targets=[Starred(value=Name(id='a', ctx=Del()), ctx=Del())])])"
Run Code Online (Sandbox Code Playgroud)
是否有一些我遗漏的用法可以有一个带星号的删除目标?不应该是更简单的语法:
del_stmt: 'del' expr (',' expr)* [',']
Run Code Online (Sandbox Code Playgroud)
为什么语法允许删除带星号的表达式?
实际语法是根据以下定义的exprlist;看起来这种关联可以追溯到 3.0 之前,那时才star_expr成为一种事物;以前,它是expr排他性的。
基本上,语法允许它,因为他们添加了一个新功能,并且在所有实际上没有意义的exprlist情况下,并没有通过语法使其非法,他们只是让编译器拒绝无意义的情况star_expr稍后的阶段。
exprlist它很hacky,但它有效,我认为要么有助于简化解析器,和/或为vs.定义和实现单独的概念太麻烦了maybe_star_exprlist。
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |