TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4396 3.03K
Вы точно знаете отличия между or и and?

Каким будет результат выражения:


5 or 0


Большинство людей уверены, что Python вернёт True. Но если запустить код, мы увидим 5. Это происходит, потому что Python возвращает само значение операнда, если оно Truthy / Falsy.


Truthy / Falsy

Любой объект Python — либо «трушный», либо «ложный»:

— Falsy: 0, "", [], {}, None, 0.0
— Truthy: всё остальное

Оператор bool(obj) конвертирует объект в логическое значение, но сами and / or возвращают ненулевые сущности: последний вычисленный операнд.


Поведение or

Оператор возвращает первый Truthy операнд, если таковой есть; иначе — последний Falsy.


5 or 0 # → 5 (первый truthy)
0 or 7 # → 7 (второе значение, truthy)
0 or '' or None # → None (все falsy, возвращается последний)


Идея: достаточно одной истины, и дальше Python не продолжает (Short‑Circuit Evaluation).


Поведение and

Оператор возвращает первый Falsy операнд, если он встретится; иначе — последний Truthy.


5 and 0 # → 0 (первый Falsy)
5 and 7 # → 7 (оба Truthy, возвращаем последний)
0 and 5 # → 0 (первый Falsy — возвращён)


Логика: and требует, чтобы обе стороны были истинными, иначе выражение — ложь.


Приоритет not, and, or

Операторы имеют встроенный приоритет:

1. not (наивысший)
2. and
3. or (наинизший)


True or False and False # → True, т. к. это эквивалентно True or (False and False)
(not False) or True # → True, сначала выполняется not.


Рекомендации

— Используйте скобки, чтобы явно показывать порядок операций;
— Не пишите слишком длинные цепочки с and / or без промежуточных переменных;
— Именованные логические условия помогают читать код.

#основы
  • ❤ 8
  • 👍 6
  • 💘 1
More from @zen_of_python
  1. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
  2. Sep 27, 2026Как разделить синхронный и асинхронный Python-клиенты При переписывании akismet автор отка…
  3. Sep 27, 2026Как заменить цепочку isinstance на singledispatch Когда обработка типов разрастается, цепо…
  4. Sep 26, 2026Как собирать динамические фильтры Django через Q-объекты Q() представляет условие для SQL-…
  5. Sep 26, 2026Почему str.splitlines() видит больше переносов, чем чтение файла У Python два разных понят…
  6. Sep 26, 2026Как вручную разрешить ленивый импорт в Python У объекта, созданного через lazy import json…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →