在full python grammar specificationwith
语句定义为:
with_stmt: 'with' with_item (',' with_item)* ':' suite
with_item: test ['as' expr]
其中expr
是:
^{pr2}$
为什么with_item
包含expr
规则而不是普通name
?在
这是有效的python代码:
^{3}$
根据语法,这个代码也是有效的吗?在
with open('/dev/null') as x^y|z:
pass
Tags:
是的,根据语法,这个代码是有效的!否则您将得到一个解析错误(“无效语法”)。解析器本身可以使用这种语法,它是编译器的另一部分,它检查左侧是否不允许这样的表达式(因为
^{pr2}$as
在语义上等同于赋值)。语法在这里允许expr
,而不仅仅是NAME
,原因是在as
之后可以有任何左值:但是左值没有单独的规则,例如赋值在左边使用
testlist
,它甚至比expr
更宽。在相关问题 更多 >
编程相关推荐