Мне было любопытно узнать, могу ли я использовать этот a<b<c
как условный, не используя стандартный a<b and 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
.
И тот же эксперимент, выполненный на С++. Это был мой менталитет, входящий в него:
#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, поэтому я могу видеть, насколько они предоставляют такие функции.