Найти - Пользователи
Полная версия: is True or == True
Начало » Python для новичков » is True or == True
1 2
kostafey
Хотел спросить как правильно писать (более pythonic) проверку:
some_value is True
или
some_value == True
Если для None однозначно советуют is, то как
быть со значениями True/False?
s0rg
if some_value:
print 'True'
kostafey
s0rg
if some_value:
print 'True'
Да уж. Это самый pythonic способ? Я просто хотел для пущей читаемости.
Контекст такой, что прилетает некий кастомный объект, который умеет
себя сделать в строку, а потом еще… контекст навроде:

def text_to_bool(s):
return (s.strip().lower() in ['true', '1', '2', 't', 'y', 'yes'])

if text_to_bool(unicode(some_value)):
....
и чтобы было более явно что ли…

P.S.
s0rg
'My age %d' % ([lambda k, f = f: f * 4 + k for f in range(10) if 6][6](6) - 2)
а правильно ведь посчитал… ;)
s0rg
А что смущает?
Выражение ‘if someval:’ наиболее наглядное + someval может же не только принимать значения True/False.
Оно может быть любым множеством (список/словарь) или произвольным объектом (с методами __nonzero__ / __len__)
и для всех случаев выражение будет правильно выполняться (возвращать False в случае если множество пустое и т.д.)
kostafey
Ну собственно, меня именно это и смущает, и хочется, чтобы когда мне
это было нужно, сравнение происходило именно со значениями True/False.
Хотя, у меня, возможно, просто Java головного мозга. ;)
В любом случае, спасибо.
s0rg
Мне кажеться, что вариант без сравнения дает большую гибкость коду - вы можете менять типы приходящих в это условие данных не меня само условие.
И да, насколько я понимаю - это именно pythonic-way.
sp3
>>> 1 == True
True
>>> 2 == True
False
>>> 1 is True
False
неожиданно? :)
py.user.next
kostafey
Если для None однозначно советуют is
None равно None
не None не равно None
где советуют то ?
вот из dip3 п. 2.8
http://imageshack.us/photo/my-images/404/divenone.png/
(куда-то пропала книга с diveintopython3.org)
yrttyr
py.user.next
где советуют то ?
В pep8 помнится советуют использовать is для сравнение с None. То же по логике верно и для Тrue и False, если вдруг их нужно сравнить.
svas
pep8:

- Don't compare boolean values to True or False using ==

Yes: if greeting:

No: if greeting == True:

Worse: if greeting is True:
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB