简体   繁体   English

Python比较评估

[英]Python comparison evaluation

As per the python documentation, x<y<z comparison is translated to x<y and y<z and expression y is evaluated only once at most. 根据python文档, x<y<z比较会转换为x<y and y<z并且表达式y最多只能计算一次。
Now my question is , does an expression y ( look at the code below) is evaluated only once here? 现在我的问题是,表达式y (看下面的代码)在这里只被评估一次吗?

if(x<y and y<z):

Twice: 两次:

>>> def f():
...   print "F called"
...   return 1
...
>>> 0 < f() < 100
F called
True
>>> 0 < f() and f() < 100
F called
F called
True
>>> if (0 < f() and f() < 100):
...   print True
...
F called
F called
True
>>>

No: 没有:

>>> dis.dis(lambda x, y, z: x < y() < z)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_FAST                1 (y)
              6 CALL_FUNCTION            0
              9 DUP_TOP             
             10 ROT_THREE           
             11 COMPARE_OP               0 (<)
             14 JUMP_IF_FALSE            8 (to 25)
             17 POP_TOP             
             18 LOAD_FAST                2 (z)
             21 COMPARE_OP               0 (<)
             24 RETURN_VALUE        
        >>   25 ROT_TWO             
             26 POP_TOP             
             27 RETURN_VALUE        
>>> dis.dis(lambda x, y, z: x < y() and y() < z)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_FAST                1 (y)
              6 CALL_FUNCTION            0
              9 COMPARE_OP               0 (<)
             12 JUMP_IF_FALSE           13 (to 28)
             15 POP_TOP             
             16 LOAD_FAST                1 (y)
             19 CALL_FUNCTION            0
             22 LOAD_FAST                2 (z)
             25 COMPARE_OP               0 (<)
        >>   28 RETURN_VALUE        

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM