love_energy
@love_energy

Какой приоритет операций в данной ситуации с None, is и !=?

Почему так и как работает приоритет операций?
>>> (1 != (None is None))
False
>>> (1 != None) is None
False
>>> (1 != None is None)
True
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
werevolff
@werevolff
(1 != (None is None))

Прежде, чем сравнить 1 и второе выражение, python вычислит выражение. то-есть:
1. (None is None) = True
2. 1 != True
https://docs.python.org/release/3.0.1/reference/da...
The Boolean type is a subtype of the integer type, and Boolean values behave like the values 0 and 1, respectively, in almost all contexts, the exception being that when converted to a string, the strings "False" or "True" are returned, respectively.


В python3 type boolean является подтипом integer и, соответственно, значения 0 и 1 равны (но не идентичны) False и True соответственно

(1 != None) is None

Сначала, python должен вычислить все значения в операции сравнения (не совсем сравнения, но об этом позже). 1 != None - это верное выражение (True). Соответственно, на втором шаге:
True is None
is - оператор идентичности. То есть, он сравнивает не только значение, но и тип данных. Например, предыдущая задача:
1 is True
Out: False
соответственно, True: boolean, None: None Типы разные, значит идентичности нет. False

(1 != None is None)

В этом примере используется цепочка сравнений (chaining). Запись эквивалентна
1 != None and None is None
Out: True

если необходимо выполнить пошаговое сравнение, то стоит записать
(1 != None) is None

Приоритет у != и is должен быть одинаковый, просто в Python есть много магии, и при указанном выше выражении срабатывает преобразование, указанное выше.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы