Форум сайта python.su
Хотел спросить как правильно писать (более pythonic) проверку:
some_value is True
some_value == True
Офлайн
if some_value:
print 'True'
Офлайн
s0rgДа уж. Это самый pythonic способ? Я просто хотел для пущей читаемости.if some_value:
print 'True'
def text_to_bool(s):
return (s.strip().lower() in ['true', '1', '2', 't', 'y', 'yes'])
if text_to_bool(unicode(some_value)):
....
s0rgа правильно ведь посчитал… ;)'My age %d' % ([lambda k, f = f: f * 4 + k for f in range(10) if 6][6](6) - 2)
Офлайн
А что смущает?
Выражение ‘if someval:’ наиболее наглядное + someval может же не только принимать значения True/False.
Оно может быть любым множеством (список/словарь) или произвольным объектом (с методами __nonzero__ / __len__)
и для всех случаев выражение будет правильно выполняться (возвращать False в случае если множество пустое и т.д.)
Офлайн
Ну собственно, меня именно это и смущает, и хочется, чтобы когда мне
это было нужно, сравнение происходило именно со значениями True/False.
Хотя, у меня, возможно, просто Java головного мозга. ;)
В любом случае, спасибо.
Офлайн
Мне кажеться, что вариант без сравнения дает большую гибкость коду - вы можете менять типы приходящих в это условие данных не меня само условие.
И да, насколько я понимаю - это именно pythonic-way.
Офлайн
>>> 1 == True
True
>>> 2 == True
False
>>> 1 is True
False
Офлайн
kostafeyNone равно None
Если для None однозначно советуют is
Офлайн
py.user.nextВ pep8 помнится советуют использовать is для сравнение с None. То же по логике верно и для Тrue и False, если вдруг их нужно сравнить.
где советуют то ?
Отредактировано (Дек. 2, 2011 17:52:24)
Офлайн
pep8:
- Don't compare boolean values to True or False using ==
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
Офлайн