Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 2, 2011 09:15:40

kostafey
От:
Зарегистрирован: 2011-03-03
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

is True or == True

Хотел спросить как правильно писать (более pythonic) проверку:

some_value is True
или
some_value == True
Если для None однозначно советуют is, то как
быть со значениями True/False?



Офлайн

#2 Дек. 2, 2011 09:42:46

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

is True or == True

if some_value:
print 'True'

Офлайн

#3 Дек. 2, 2011 10:04:24

kostafey
От:
Зарегистрирован: 2011-03-03
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

is True or == True

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)
а правильно ведь посчитал… ;)



Офлайн

#4 Дек. 2, 2011 10:25:06

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

is True or == True

А что смущает?
Выражение ‘if someval:’ наиболее наглядное + someval может же не только принимать значения True/False.
Оно может быть любым множеством (список/словарь) или произвольным объектом (с методами __nonzero__ / __len__)
и для всех случаев выражение будет правильно выполняться (возвращать False в случае если множество пустое и т.д.)

Офлайн

#5 Дек. 2, 2011 10:38:39

kostafey
От:
Зарегистрирован: 2011-03-03
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

is True or == True

Ну собственно, меня именно это и смущает, и хочется, чтобы когда мне
это было нужно, сравнение происходило именно со значениями True/False.
Хотя, у меня, возможно, просто Java головного мозга. ;)
В любом случае, спасибо.



Офлайн

#6 Дек. 2, 2011 10:45:54

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

is True or == True

Мне кажеться, что вариант без сравнения дает большую гибкость коду - вы можете менять типы приходящих в это условие данных не меня само условие.
И да, насколько я понимаю - это именно pythonic-way.

Офлайн

#7 Дек. 2, 2011 11:31:16

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

is True or == True

>>> 1 == True
True
>>> 2 == True
False
>>> 1 is True
False
неожиданно? :)



Офлайн

#8 Дек. 2, 2011 12:45:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9975
Репутация: +  856  -
Профиль   Отправить e-mail  

is True or == True

kostafey
Если для None однозначно советуют is
None равно None
не None не равно None
где советуют то ?
вот из dip3 п. 2.8
http://imageshack.us/photo/my-images/404/divenone.png/
(куда-то пропала книга с diveintopython3.org)



Офлайн

#9 Дек. 2, 2011 14:19:56

yrttyr
От:
Зарегистрирован: 2011-09-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

is True or == True

py.user.next
где советуют то ?
В pep8 помнится советуют использовать is для сравнение с None. То же по логике верно и для Тrue и False, если вдруг их нужно сравнить.



Отредактировано (Дек. 2, 2011 17:52:24)

Офлайн

#10 Дек. 3, 2011 08:22:45

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

is True or == True

pep8:

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

Yes: if greeting:

No: if greeting == True:

Worse: if greeting is True:



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version