我不确定您要寻找的是什么,但是快速反汇编显示
a < b < c未编译为与
a < b and b < c
>>> import dis>>>>>> def f(a, b, c):... return a < b < c...>>> dis.dis(f) 20 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 DUP_TOP 7 ROT_THREE 8 COMPARE_OP 0 (<) 11 JUMP_IF_FALSE_OR_POP 21 14 LOAD_FAST 2 (c) 17 COMPARE_OP 0 (<) 20 RETURN_VALUE >> 21 ROT_TWO 22 POP_TOP 23 RETURN_VALUE>>>>>> def f(a, b, c):... return a < b and b < c...>>> dis.dis(f) 20 LOAD_FAST 0 (a) 3 LOAD_FAST 1 (b) 6 COMPARE_OP 0 (<) 9 JUMP_IF_FALSE_OR_POP 21 12 LOAD_FAST 1 (b) 15 LOAD_FAST 2 (c) 18 COMPARE_OP 0 (<) >> 21 RETURN_VALUE
编辑1: 进一步挖掘,我认为这与numpy有点奇怪或错误。考虑这个示例代码,我认为它可以按您期望的那样工作。
class Object(object): def __init__(self, values): self.values = values def __lt__(self, other): return [x < other for x in self.values] def __gt__(self, other): return [x > other for x in self.values]x = Object([1, 2, 3])print x < 5 # [True, True, True]print x > 5 # [False, False, False]print 0 < x < 5 # [True, True, True]
编辑2: 实际上,这不能“正确地”工作…
print 1 < x # [False, True, True]print x < 3 # [True, True, False]print 1 < x < 3 # [True, True, False]
我认为它是在的第二次比较中将布尔值与数字进行比较
1 < x < 3。
编辑3: 我不喜欢从gt,lt,gte,lte特殊方法返回非布尔值的想法,但是根据Python文档,它实际上不受限制。
http://docs.python.org/reference/datamodel.html#object。
lt
按照惯例,返回False和True进行成功比较。但是,这些方法可以返回任何值…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)