weird behaviour of "0 in  is False"
newsgroups at jhrothjr.com
Tue Nov 30 21:30:16 CET 2004
"Paul Robson" <autismuk at autismuk.muralichucks.freeserve.co.uk> wrote in
message news:coi1hc$9go$1 at news8.svr.pol.co.uk...
> Sylvain Thenault wrote:
>>>>> l = 
>>>>> 0 in (l is False)
> (l is False) is not a tuple or list, it's a boolean value.
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in ?
>> TypeError: iterable argument required
>>>>> (0 in l) is False
> 0 in l is False becuase l is empty, so it's False is False which is true,
> (except in Intercal probably and Visual C++)
>>>>> 0 in l is False
> l is False is False because l is not the value false though it has a false
> value (err.....)
> l != False because it's not the displayed value false
> but if not l would evaluated to true because  is a false equivalent.
> 0 in False .... okay.... this should be an error ..... something to do
> the equivalence confusion of what False is ?
It's not an error. As one of the first responders said, check
the language definition. That defines both 'in' and 'is'
as equality operators, and defines exactly what a chain
of equality operators means.
In this case, it means:
(0 in l) and (l is False)
The and short circuits, giving the result of False without
ever doing the final comparison.
Granted, that's not exactly obvious...
More information about the Python-list