True == True!= Python中的False是什么意思?如何查找?

dhi*_*ill 4 python bytecode operator-precedence

我实际上需要xor我的解决方案,但在思考它时,我开始怀疑上面的问题.是什么意思True == True != False

看一下我认为的文档True == True and True != False,但我想要一个更通用和确定的方法.如何快速获得此类代码的字节码可读形式.有没有比字节码和文档更容易找到的方法?

Bak*_*riu 9

它被称为运算符链接.每当你有一个类似于和比较的表达式A op1 B op2 Cop1,op2它就被"翻译"为A op1 B and B op2 C.(实际上它只评估B一次).

注:比较运营商包括in,not in,is,is not!(例如a is b is not None手段a is b and b is not None).

如果要查看字节码,可以使用该dis模块:

In [1]: import dis

In [2]: dis.dis(lambda: True == True != False)
  1           0 LOAD_CONST               1 (True) 
              3 LOAD_CONST               1 (True) 
              6 DUP_TOP              
              7 ROT_THREE            
              8 COMPARE_OP               2 (==) 
             11 JUMP_IF_FALSE_OR_POP    21 
             14 LOAD_CONST               2 (False) 
             17 COMPARE_OP               3 (!=) 
             20 RETURN_VALUE         
        >>   21 ROT_TWO              
             22 POP_TOP              
             23 RETURN_VALUE 
Run Code Online (Sandbox Code Playgroud)

如果您阅读字节码,您可以理解它执行操作员链接.

鉴于表达式是True == True != False"解释",因为True == True and True != False它首先通过字节码加载第一个运算符的两个 True常量LOAD_CONST.在DUP_TOP重复该堆栈的顶部(这避免了重新评估True用于第二比较).它执行第一次比较(COMPARE_OP),如果它是假的,它只是字节码21,否则它弹出堆栈的顶部(JUMP_IF_FALSE_OR_POP).然后它执行第二次比较.

要回答一般问题,了解python某些功能的最快方法是使用文档的quicksearch页面.我还建议阅读Python的教程,以便对该语言进行一般性介绍.

我想补充一点,因为python提供了一个交互式环境,所以通常更容易理解一些代码如何在解释器中编写它并观察结果.几乎所有的内置类型都有通过docstrings提供的文档,因此这样做help(some_object)可以为您提供大量信息.特别是IPython提供了一个增强的交互式解释器,具有更加用户友好的帮助消息/错误格式等.)


nic*_*kie 5

在大多数语言中,a == b != c解析为(a == b) != c. 因此,您会期望它True == True != False与 相同(True == True) != False,其计算结果为True != False,其计算结果为True

Python 有不同的含义,可以在这里看到:

>>> True != False != False
False
>>> (True != False) != False
True
Run Code Online (Sandbox Code Playgroud)

在 Python 中,a == b != c相当于(a == b) and (b != c). 这意味着True == True != False相当于(True == True) and (True != False),其计算结果为True and True,其计算结果为True

巧合的是,这两种含义(Python 的和其他语言的)在这里给出了相同的结果,但应该谨慎。