Я считал, что меня уже сложно удивить чем-то в дизайне языков. Но сегодня на просмотре кода откопал поразительный оператор "не как у всех". Язык — Python.
Для начала — несколько аксиом:
1 == 1 # True
True == True # True
1 == True # True, ладно, язык динамический
Это позволяет составить более сложные утверждения. Например,
1 == 1 == False # False
1 == 1 == True # True
1 == 1 == 1 # True
Вроде все просто и логично? Давайте усложнять.
2 == 2 # True
2 == 2 == False # False
Работает! Но дальше:
2 == 2 == True # Тоже False!
Ладно, допустим... Еще наблюдения:
2 == True # False (что согласуется с наблюдением выше).
2 == 2 == 2 # True (!), но при этом
1 == 1 == 2 # False
Вот такой он странный оператор — "всё равно" (в смысле "все значения равны", не нужно его путать с потенциальным оператором "всё равно" в смысле "да какая разница"). Его трудно классифицировать стандартными средствами. Он не унарный, не бинарный и не тернарный. Вообще он получается какой-то варарный (var-arity). Еще интересно в данном контексте выглядят утверждение, что "1 is 1" и не True, и не False, а так. Что подтверждается прямыми наблюдениями:
1 is 1 is True # False
1 is 1 is False # False
1 is 1 is not True # True
1 is 1 is not False # True
Собственно, это применимо не только для равенства. Можно делать сложные конструкции
1 <= 4 == 4 == 4 <= 7 >= 3 == 3 >= 2 <= 5 is 5 # True!
В общем, я теперь знаю, откуда приходят люди, пишущие в коде a < b < c и жалующиеся, что это не работает. Не знаю, пишущие на питоне может давно про это знали и привыкли. А для меня было полной неожиданностью.
P.S. Да, наверное это все-же бинарный оператор с кучей синтаксического сахара на сложных выражениях. Но это какой-то подозрительный сахар.
Attaise
Costco Pharmacy 744 costco 49418 <a href=https://priligy.mom>buy priligy online</a>