Вопрос

Я относительно новичок в Python и кодировании. У меня все в порядке, пока не столкнулся с «нет»:

variable = None                          
while variable != "":                    
    print("Why does this loop start?")

Хотя это кажется простым, я не могу понять, почему начинается вышеупомянутая петля. Как None отличается от пустой строки? Я думал, что они оба оценили на ложь.

Это было полезно?

Решение

Они оба оценивают False Но это не значит, что они одинаковы.

None является отдельным значением и имеет свой собственный тип. Пустая строка - это строка без содержимого:

>>> type(None)
<type 'NoneType'>
>>> type('')
<type 'str'>
>>> bool(None) == bool('')
True
>>> None == ''
False

Другие советы

Нет, None это то же самое, что None сам. Пустые струны - это не одно и то же:

>>> None == ""
False

None является специальным значением Singleton (в сеансе Python есть только одна копия), обозначающая «пустую» или отсутствие «правильного» значения. Как таковой флаг или же сигнал ценность; Python использует его по соглашению, чтобы сигнализировать о том, что процесс ничего не возвращает, например.

Оба None и пустая строка считается ложной в логическом контексте:

>>> bool(None)
False
>>> bool("")
False

Как и все пустые контейнеры (такие как пустой кортеж, список или набор) и числовые 0 (будь то целое число, плавающая точка или комплексное число). Однако, считаясь ложным, не делает их равными, однако.

Если вы хотите проверить на Любые значение, которое является ложным, используйте:

while not variable:

в качестве not интерпретирует операнд в логическом контексте и возвращает обратное значение:

>>> not ""
True
>>> not None
True
>>> not "not empty"
False

Они оба оценивают ложь, но различаются, когда используются в сравнении

if not None:
    print "Always true"
if not "":
    print "Always true"
if bool(None) == bool(""):
    print "Always true"
if None == "":
    pass
    #always false
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top