Ben Python çoklu karşılaştırma sözdizimi aşırı mümkün olmadığını merak ediyorum:Python'da çoklu karşılaştırma sözdizimini aşırı yüklemek mümkün mü?
a < b < c
Ben tek karşılaştırmalar aşırı mümkün olduğunu biliyorum bu aşırı mümkün mü?
Ben Python çoklu karşılaştırma sözdizimi aşırı mümkün olmadığını merak ediyorum:Python'da çoklu karşılaştırma sözdizimini aşırı yüklemek mümkün mü?
a < b < c
Ben tek karşılaştırmalar aşırı mümkün olduğunu biliyorum bu aşırı mümkün mü?
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