[docs] misbehaving functionality of all() function
julien at palard.fr
Sun May 26 05:03:50 EDT 2019
> if one of the element(1+12.1j) is not iterable
This does not make sense to me, 1+12.1j does not have "elements", it's a single value.
> TypeError: 'complex' object is not iterable
As I just said, 1+12.1j is not iterable (it does not have elements), Python agree with me.
> My concern is why all([1,2,1+12.1j]) is returning True if all elements are not iterable.
all expects a single iterable, which is the list of three values, (starting with [ and ending with ]).
all returns true if all values (in this case the value 1, the value 2, and the value 1+12.1j) are truthy, which is the case.
You can imagine all being implemented like this (it is not, as the builtin all is implemented in C, but they behave the same):
for element in iterable:
if not element:
So when you call all(1+12.1j) you're basically asking Python to do:
for element in 1+12.1j:
which does not work, 1+12.1j is not iterable, it's a single value, not a collection of values.
when you call all([1,2,1+12.1j]) you're basically asking Python to do:
for element in [1,2,1+12.1j]:
if not element: # Tested with 1, then with 2, then with 1+12.1j, all are True, so no return False.
return True # This line will be reached, the result of all([1,2,1+12.1j]) will be True.
Hope it helps.
More information about the docs