将布尔值与==Python中的工作进行比较.但是当我应用布尔not运算符时,结果是语法错误:
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True == True
True
>>> False == False
True
>>> True is not False
True
>>> True == not False
File "<stdin>", line 1
True == not False
^
SyntaxError: invalid syntax
>>>
Run Code Online (Sandbox Code Playgroud)
为什么这是语法错误?我希望not False是一个返回布尔值的表达式,并且True == <x>只要<x>是具有有效语法的表达式,它就是有效的语法.
Raf*_*ler 46
它与Python中的运算符优先级有关(解释器认为你将True与not进行比较,因为==它具有更高的优先级not).您需要一些括号来阐明操作的顺序:
True == (not False)
Run Code Online (Sandbox Code Playgroud)
一般情况下,如果not没有括号,则不能在比较的右侧使用.但是,我想不出你需要not在比较的右侧使用a 的情况.
Arm*_*ali 13
声称构成语法错误的原因True == not False与运算符优先级有关的答案是错误的。如果是这种情况,表达式2 ** - 1也会产生语法错误,当然事实并非如此。优先级永远不会导致使用运算符来代替操作数。
成为语法错误的真正原因True == not False是不存在可以从中产生比较的语法规则,因为
\n\n比较 ::= or_expr (comp_operator or_expr)*
\n
- 即在 comp_operator 之后必须跟有==or_expr ,其中包括 xor_expr、and_expr、shift_expr、a_expr、m_expr、u_expr、幂\xe2\x80\xa6,但没有not_test。
2 ** - 1相比之下,根据幂规则的优先相似构造
\n\npower ::= (await_expr | Primary) ["**" u_expr]
\n
u_expr 跟随幂运算符**,因此允许- x在右侧。
unw*_*ind 10
这只是运营商优先权的问题.
尝试:
>>> True == (not False)
True
Run Code Online (Sandbox Code Playgroud)
看看这个运算符优先级表,你会发现==绑定比它更严格not,因此True == not False被解析为(True == not) False显然是一个错误.
| 归档时间: |
|
| 查看次数: |
20328 次 |
| 最近记录: |