Я только что наткнулся на то, что мне кажется ошибкой:
var = "2" if var is "" or "1": print(var)
Этот фрагмент кода возвращает «2», поскольку я ожидаю, что он ничего не печатает.
Может кто-нибудь объяснить этот результатмне?
Проверено на 2.7 и 3.4
Ваше выражение анализируется как (var is "") or "1", что всегда истинно, потому что "1" - это истина.
(var is "") or "1"
"1"
Если вы добавите скобки, чтобы получить var is ("" or "1"), это эквивалентно var is True, потому что "" or "1" - это True, потому что "1" - это True-ish.
var is ("" or "1")
var is True
"" or "1"
Сравнение строк с is сопряжено с опасностью, поскольку оператор is проверяет идентичность , а не равенство.
is
Вы, вероятно, хотите var in ("", "1")
var in ("", "1")