2017-01-15 14 views
3

Мое понимание оператора all() заключается в том, что оно возвращает true, если все элементы итеративного возвращают значение true. Либо я недоразумение это функция полностью, или что-то не совсем правильно в следующем:Python all ([6,7,8,9]) = True. Но 6 = False

>>> all([0, 7, 8, 9]) 
False 
>>> all([6, 7, 8, 9]) 
True 
>>> any([0, 7, 8, 9]) 
True 
>>> 0 == True 
False 
>>> 1 == True 
True 
>>> 6 == True 
False 
>>> 7 == True 
False 

Что с этим?

Редактировать Хорошо, я получаю много ответов, объясняя, что 0 является ложным. Я понимаю. 0 = False и 1 = True. Моя проблема в том, что 6 возвращается как False, но когда тестируется как часть списка, он возвращается как истинный?

>>> all([6, 7, 8, 9]) 
True 
>>> 6 == True 
False 

Это немного, чего я не понимаю?

+2

см 'BOOL (6)'. –

+0

Истинные и ложные имеют порядковое значение 0 и 1 IIRC. Отсюда и поведение. Если вы хотите интерпретировать как bool, тогда используйте, например. 'bool (6)' –

+0

Мне кажется, что это было слишком быстро закрыто. Проверьте, что вы действительно спрашиваете: '6' и' 7' кажутся «ложными», так почему второе выражение «True». Если это так, то ответ заключается в том, что отличные от нуля целые числа вычисляются в 'True' в булевом контексте; но когда вы проверяете '6 == True', целое число не принудительно вводится в логический тип, поэтому эффективно вы тестируете' 6 == 1', что является 'False'. –

ответ

2

Проверьте меня: то, что вы действительно просят есть, 6 и 7 кажутся False, так почему это второе выражение True. Если да, то ответ заключается в том, что отличные от нуля целые числа оцениваются в True в булевом контексте; но когда вы тестируете 6 == True, целое число не вводится в булевский тип, поэтому эффективно вы тестируете 6 == 1, то есть False.

Edit: правильный способ проверить, если что-то True в логический контекст, например:

bool(6)