您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中编写双重不等式时,运算符的优先级是什么(在代码中明确地说明了这一点,以及如何为数组覆盖它)

在Python中编写双重不等式时,运算符的优先级是什么(在代码中明确地说明了这一点,以及如何为数组覆盖它)

我不确定您要寻找的是什么,但是快速反汇编显示a < b < c未编译为与a < b and b < c

>>> import dis
>>>
>>> def f(a, b, c):
...     return a < b < c
...
>>> dis.dis(f)
  2           0 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)
  2           0 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

进一步挖掘,我认为这与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]

实际上,这不能“正确地”工作…

print 1 < x # [False, True, True]
print x < 3 # [True, True, False]
print 1 < x < 3 # [True, True, False]

我认为它是在的第二次比较中将布尔值与数字进行比较1 < x < 3

我不喜欢从gt,lt,gte,lte特殊方法返回非布尔值的想法,但是根据Python文档,它实际上不受限制。

http://docs.python.org/reference/datamodel.html#object。

按照惯例,返回False和True进行成功比较。但是,这些方法可以返回任何值…

python 2022/1/1 18:34:49 有602人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶