Подтвердить что ты не робот

"True" и "False" в Python

Я попытался запустить этот фрагмент кода:

path = '/bla/bla/bla'

if path is True:
    print "True"
else:
    print "False"

И он печатает False. Я думал, что Python рассматривает что-либо со значением True. Почему это происходит?

4b9b3361

Ответ 1

С 6.11. Булевы операции:

  В контексте логических операций, а также когда выражения используются в выражениях потока управления, следующие значения интерпретируются как ложные: False, None, числовой ноль всех типов и пустые строки и контейнеры (включая строки, кортежи, списки, словари, наборы и морозенцы). Все остальные значения интерпретируются как истина.

Ключевое выражение здесь, которое, я думаю, вы неправильно понимаете, "интерпретируется как ложное" или "интерпретируется как истинное". Это не означает, что любое из этих значений идентично True или False или даже равно True или False.

Выражение '/bla/bla/bla' будет считаться истинным, если ожидается логическое выражение (как в выражении if), но выражения '/bla/bla/bla' is True и '/bla/bla/bla' == True будут иметь значение False по причинам, указанным в ответе Игнасио.

Ответ 2

is сравнивает идентификатор. Строка никогда не будет идентична не-строке.

== - равенство. Но строка никогда не будет равна либо True, либо False.

Вы ничего не хотите.

path = '/bla/bla/bla'

if path:
    print "True"
else:
    print "False"

Ответ 3

В то время как другие постеры рассказывали, почему is True делает то, что он делает, я хотел ответить на эту часть вашего сообщения:

Я думал, что Python рассматривает что-либо со значением как True. Почему это происходит?

Исходя из Java, меня это тоже смутило. Python не обрабатывает что-либо со значением как True. Свидетель:

if 0:
    print("Won't get here")

Это ничего не напечатает, потому что 0 рассматривается как False. Фактически, ноль любого числового типа оценивается как False. Они также заставили decimal работать так, как вы ожидаете:

from decimal import *
from fractions import *

if 0 or 0.0 or 0j or Decimal(0) or Fraction(0, 1):
    print("Won't get here")

Вот другое значение, которое оценивается как False:

if None or False or '' or () or [] or {} or set() or range(0):
    print("Won't get here")
Источники

:

  1. Тестирование Python Truth Value - это круто
  2. Проверка истинности значения (во встроенных типах)