2013-06-19 22 views

cevap

14

Dahili olarak a < b and b < c olarak ele nedenle, docs arasında sadece __lt__, __gt__ vb

aşırı gerekir edilir: < = Z X < y ve eşdeğer y

x < y < = z, y'nin olması dışında yalnızca bir kez değerlendirilir (ancak her iki durumda da, x < y false olduğunda z değerlendirilmez).

>>> import dis 
>>> dis.dis(lambda : a < b < c) 
    1   0 LOAD_GLOBAL    0 (a) 
       3 LOAD_GLOBAL    1 (b) 
       6 DUP_TOP    
       7 ROT_THREE   
       8 COMPARE_OP    0 (<) 
      11 JUMP_IF_FALSE_OR_POP 21 
      14 LOAD_GLOBAL    2 (c) 
      17 COMPARE_OP    0 (<) 
      20 RETURN_VALUE   
     >> 21 ROT_TWO    
      22 POP_TOP    
      23 RETURN_VALUE 

Demo:

class A(object): 
    def __lt__(self, other): 
     print 'inside lt' 
     return True 
    def __gt__(self, other): 
     print 'inside gt' 
     return True 
...   
>>> a = A() 
>>> 10 < a < 20 
inside gt 
inside lt 
True 
İlgili konular