2016-11-20 46 views
2

我不是新手程序员,我知道什么是布尔运算符以及如何使用它们。麻烦的是,我不太明白Python的文档中关于布尔运算的含义:Python中的布尔运算(文档中的表示法)

or_test ::= and_test | or_test "or" and_test 
and_test ::= not_test | and_test "and" not_test 
not_test ::= comparison | "not" not_test 

这些递归是什么意思?为什么在or_test中应该有一个“and_test”? 关于and_test的描述中的“not_test”的相同问题第三行对我来说更不理智。 任何人都可以请指导我通过这些渠道,这样我可以终于明白了这个有些不必要的递归和纠结符号

回答

2

这是更大的language grammar的一部分,并在本质上规定了operator precedence

这意味着and绑定比or更严格。需要注意的是or_test包含and,它包含了and_test规则,这是从要么not_test规则或and_test "and" not_test构成。 not_test本身以相似的方式构建等。

另请参阅Notation section的参考文档。

+0

我是否知道这个EBNF表示法并没有真正指出布尔操作的语法,而是Python解释器在一个构造内部评估表达式的顺序? –

+1

那么,它* *都*。例如,AND布尔操作的语法拼写为'和'。表达语法规则通常非常简单;将这些与[复合语句](https://docs.python.org/3/reference/compound_stmts.html)的规则进行比较。 –

+0

谢谢你,Martijn!你帮了很多忙。 –