str (Нет) в проверке условий python

#python

#python

Вопрос:

Допустим, у меня есть переменная в python a

если a есть None , то str(None) собирается вернуться None или что-то еще?

Я запустил это в интерфейсе и сделал что-то вроде:

 a = str(None)
print(a is None)
  

И он напечатал False , почему это?

Комментарии:

1. str(None) == 'None' вернет true, если это поможет вам понять

2. a это строка из 4 символов, в которой указано слово None (не python None ). Это может помочь визуализировать его, с помощью print(list(a)) которого символы разделяются на список ['N', 'o', 'n', 'e'] .

3. если a равно None, то будет ли str (None) возвращать None или что-то еще? Почему бы просто не посмотреть на результат str(None) напрямую?

4. print(str(None)) довольно быстро расскажет вам, как выглядит возвращаемое значение. Не спрашивайте нас, когда вы сможете заставить компьютер дать вам правильный ответ.

Ответ №1:

В Python str всегда будет возвращать строку. В данном случае str(None) это строка "None" . "None" не равно None , поскольку одно является строкой, а другое — фактическим значением.

Ответ №2:

Преобразование его в строку изменяет его на слово «None». Попробуйте следующее.

 a = str(None)
print(type(a))
print(type(None))
print('None' == None)
  

Это приведет к следующему.

 <class 'str'>
<class 'NoneType'>
False
  

Строка и нетип не равны.

Ответ №3:

Оператор is является оператором идентификации, что означает, что он возвращает True , если обе переменные являются одним и тем же объектом. Однако объекты, ссылающиеся на них, None всегда будут иметь str(None) один и тот же идентификатор и None не будут иметь один и тот же идентификатор, поэтому возвращается ваш оператор печати False .

is Оператор не имеет никакого отношения к тому, равно ли что-то по значению, для этого вы должны использовать == operator . Смотрите примеры ниже.

 a = str(None)

>>>print(a == None)
False
>>> print(a is None)
False
>>> print(a is str(None))
False
>>> print(a == str(None))
True
  

Ответ №4:

Что касается вашего первого вопроса (кстати, у вас должен быть только один на сообщение), вы можете выяснить это, выполнив его самостоятельно.

Что касается вашего второго вопроса, вы печатаете значение выражения a is None . a есть либо None одно, либо другого. В любом случае, вы получите логическое значение. В данном случае a это не None что иное, как строка.

Ответ №5:

Возможно, вам нужно распечатать результат a , и тогда вы знаете, почему результат False .

 a = str(None)
print(type(a))
print(a is None)