当我要求类似的东西时,按顺序执行的具体代码是什么
>>> 1 <= 3 >= 2
True
如果两者具有相同的优先级并且这只是它们的评估顺序,为什么第二个不等式起作用(3 >= 2)
而不是(True >= 2)
例如考虑这些之间的区别
>>> (1 < 3) < 2
True
>>> 1 < 3 < 2
False
and
将第二个扩展为两个语句中的第二个,是否只是硬编码到 Python 中的纯语法快捷方式?
我可以改变一个类的这种行为,从而a <= b <= c
扩展到不同的东西吗?它看起来像下面的情况
a (logical operator) b (logical operator) c
--> (a logical operator b) and (b logical operator c)
但真正的问题是如何在代码中实现。
我很好奇,所以我可以在我自己的一些类中复制这种__lt__
行为__gt__
,但我对如何在保持中间参数不变的情况下实现这一点感到困惑。
这是一个具体的例子:
>>> import numpy as np
>>> tst = np.asarray([1,2,3,4,5,6])
>>> 3 <= tst
array([False, False, True, True, True, True], dtype=bool)
>>> 3 <= tst <= 5
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/home/ely/<ipython-input-135-ac909818f2b1> in <module>()
----> 1 3 <= tst <= 5
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
覆盖它会很好,这样它也可以与数组“正常工作”,如下所示:
>>> np.logical_and(3 <= tst, tst <= 5)
array([False, False, True, True, True, False], dtype=bool)
为澄清而添加
在评论中表明我在解释问题方面做得很差。这里有一些澄清说明:
1)我不是and
在寻找解释器在两个链式不等式之间弹出一个事实的简单解释。我已经知道了,并在上面这么说。
2)为了类比我想要做的事情,请考虑with
语句(链接)。以下:
with MyClass(some_obj) as foo:
do_stuff()
解压成
foo = MyClass(some_obj)
foo.__enter__()
try:
do_stuff()
finally:
foo.__exit__()
因此,通过适当地编写MyClass
,我可以在with
语句中做许多特殊的事情。
我在问是否有类似的链接不等式的代码解包,通过它我可以拦截它正在做的事情并将其重定向到使用数组样式的逻辑运算符,而不是仅用于我关心的类。
从我的问题,尤其是示例中,我觉得这很清楚,但希望这可以使其更加清楚。