Python: тестирование для None, тестирование для логического значения
Существует ли какая-либо низкоуровневая разница между реализацией (performance-ish) между этими подходами.?
# check if string is empty
# the preferred way it seems [1]
if string:
print string
else:
print "It empty."
# versus [2]
if string is '':
# or [3]
if string == '':
Например, при тестировании для None
я все еще считаю его более читаемым и явным:
if some_var is not None:
.. вместо..
if not some_var:
if not some_var
, по крайней мере для меня, всегда читает "если some_var не существует".
Что лучше использовать, каковы правильные варианты использования для ==
, is
и bool-testing?
Ответы
Ответ 1
Никогда не используйте is
для тестирования равенства (значения). Используйте его только для проверки идентичности объекта. Он может работать для примера if string is ''
, но это зависит от реализации, и вы не можете положиться на него.
>>> a = "hi"
>>> a is "hi"
True
>>> a = "hi there!"
>>> a is "hi there!"
False
Кроме этого, используйте все, что лучше всего передает смысл вашего кода.
Я предпочитаю более короткий if string:
, но if string != '':
может быть более явным.
Затем снова if variable:
работает над каждым видом объекта, поэтому, если variable
не ограничивается одним типом, это лучше, чем if variable != "" and variable != 0:
и т.д.
Ответ 2
Чтобы расширить ответ Тима Пицкера:
if string:
print string
Это проверяет, имеет ли значение string
значение True. То есть.
>>> bool("")
False
>>> bool(None)
False
>>> bool("test")
True
Таким образом, это не только проверка, если оно пустое, но оно None
или пустое. Это может повлиять на то, как вы относитесь к None
/empty.
Ответ 3
Во-первых, не используйте if string is '':
, потому что это не гарантируется. Тот факт, что CPython ставит короткие строки, является деталью реализации и на него нельзя положиться.
Использование if string:
для проверки того, что string
не является пустым, является, я думаю, способом Pythonic для этого.
Но нет ничего плохого в использовании if string == ''
.