2013-10-08 3 views
4

Может ли кто-нибудь помочь мне понять, почему следующий скрипт Python возвращает True?Функция «все» Python с условным выражением генератора возвращает True. Зачем?

x = '' 
y = all(i == ' ' for i in x) 
print(y) 

Я предполагаю, что это что-то делать с x быть нулевой длины объект а, но не может в полной мере понять.

+1

http://ru.wikipedia.org/wiki/Vacuous_truth – Blender

ответ

8

all() всегда возвращает Trueесли не является элементом в последовательности, False.

Ваша петля производит 0 элементов, поэтому возвращается True.

Это documented:

Возврат True если все элементы Iterable истинны (или если итерация пуста).

Emphasis mine.

Аналогично, any() всегда будет возвращать False, если элемент в последовательности не True, поэтому для пустых последовательностей, any() возвращает значение по умолчанию:

>>> any(True for _ in '') 
False 
1

As the documentation состояния, то, что all делает:

Возврат Истина, если все элементы итерабельного являются истинными (или если итерабельность пуста).

Смежные вопросы