Test 0 and false since false is 0

Grant Edwards grant.b.edwards at gmail.com
Mon Jul 10 12:10:59 EDT 2017


On 2017年07月09日, Paul D. DeRocco <pderocco at ix.netcom.com> wrote:
>> From: Sayth Renshaw
>>>> I have been reading this solution 
>> > >>> after = sorted(before, key=lambda x: x == 0 and type(x) == int)
>>>> it is really good, however I don't understand it enough to 
>> reimplement something like that myself yet.
>>>> Though I can that lambda tests for 0 that is equal to an int 
>> why does sorted put them to the end?
>> Because the expression "x == 0 and type(x) == int" has a value of either
> False or True, and it sorts all the False values before the True values,
> leaving the order within those sets unchanged.
>> That said, "x is 0" is even simpler.

And wrong.
Two equivalent integer objects _might_ be the same object, but that's
not guaranteed. It's an _implementation_detail_ of CPython that small
integers are cached:
 >>> x = 0
 >>> x is 0
 True
But larger integers aren't:
 >>> a = 123412341234
 >>> a is 123412341234
 False
The first example could have returned False and been correct.
-- 
Grant Edwards grant.b.edwards Yow! TONY RANDALL! Is YOUR
 at life a PATIO of FUN??
 gmail.com 


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /