Відмінності між a == b
та a is b
¶
==
перевіряє значення, а is
перевіряє, що обидві змінні посилаються на той
самий об'єкт. Для перевірки того, що значення однієї змінної
дорівнює якомусь іншому значенню, треба використовувати ==
.
Із рекомендацій PEP 8: порівняння з None
, завжди слід робити з is
або is not
, ніколи не з
операторами рівності ==
, !=
:
Comparisons to singletons like None
should always be done with is
or is not
, never the equality operators.
Also, beware of writing if x
when you really mean if x is not None
– e.g.
when testing whether a variable or argument that defaults to None was set to
some other value. The other value might have a type (such as a container) that
could be false in a boolean context!
В інших випадках краще використовувати ==
:
Приклад використання is
(sw2 посилається на той самий список, що і sw1):
In [1]: sw1 = [10, 20, 30]
In [2]: sw2 = sw1
In [3]: sw1 is sw2 # (1)
Out[3]: True
In [4]: sw1 == sw2 # (2)
Out[4]: True
- sw1 та sw2 посилаються на той самий список, тому is повертає
True
- оскільки це один і той же список, значення однакові
Змінні sw1 та sw2 посилаються на різні об'єкти з однаковими елементами:
In [6]: sw1 = [10, 20, 30]
In [7]: sw2 = [10, 20, 30]
In [8]: sw1 is sw2 # (1)
Out[8]: False
In [9]: sw1 == sw2 # (2)
Out[9]: True
- sw1 та sw2 посилаються на різні списки, тому is повертає
False
- у списках однакові елементи, тому
==
повертаєTrue
True/False¶
Don't compare boolean values to True or False using ==
:
Worse:
Відповідно до рекомендацій PEP8, щоб перевірити, що якийсь об'єкт дорівнює True або False, краще використовувати такі вирази:
Приклади використання is
поза темами курсу¶
Приклад функції для скасування задач asyncio, яка має скасувати всі задачі, окрім себе: