【发布时间】:2013-09-12 03:53:41
【问题描述】:
我很好奇是否可以在不使用标准 a<b and b<c 的情况下使用 a<b<c 作为条件。于是我试了一下,测试结果通过了。
a = 1
b = 2
c = 3
assert(a<b<c) # In bounds test
assert(not(b<a<c)) # Out of bounds test
assert(not(a<c<b)) # Out of bounds test
为了更好的衡量,我尝试了更多的数字,这次是在负数区域。在哪里a, b, c = -10, -9, -8。测试又一次通过了。即使是更高范围的测试套装也可以工作a, b, c = 10, 11, 12。甚至a, b, c = 10, 20, 5。
同样的实验在 C++ 中完成。这是我的心态:
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
a=10;
b=20;
c=5;
cout << ((a<b<c)?"True":"False") << endl; // Provides True (wrong)
cout << ((a<b && b<c)?"True":"False") << endl; // Provides False (proper answer)
return 0;
}
我最初认为这种实现是无效的,因为在我遇到的所有其他语言中,都会在布尔值到达c 之前对其进行评估。对于这些语言,a<b 将评估为布尔值并继续评估 b<c 将是无效的,因为它会尝试根据数字评估布尔值(很可能会引发编译时错误或伪造预期的比较)。出于某种原因,这让我有点不安。我想我只需要放心这是语法的一部分。提供有关 Python 文档中提供此功能的位置的参考也会很有帮助,这样我就可以了解它们提供此类功能的程度。
【问题讨论】:
标签: python