I am never going to complain about Python again

Neil Cerutti neilc at norwich.edu
Thu Oct 10 11:51:50 EDT 2013


On 2013-10-10, Roy Smith <roy at panix.com> wrote:
> In article <52562ee3$0$2931$c3e8da3$76491128 at news.astraweb.com>,
>  Steven D'Aprano <steve at pearwood.info> wrote:
>
>> Just came across this little Javascript gem:
>> 
>> ",,," == Array((null,'cool',false,NaN,4));
>> 
>> => evaluates as true
>> 
>> http://wtfjs.com/2011/02/11/all-your-commas-are-belong-to-Array
>> 
>> I swear, I am never going to complain about Python again.
>
> I've just finished reading JavaScript: The Good Parts, by Douglas 
> Crockford (now I'm working on the harder part of re-reading it slowly, 
> to make sure I really understand it).  Anybody who is forced to work 
> with javascript should read this book.  It's the K&R of JS.
>
> Anyway, one of the pieces of advice he gives is to pretend that == 
> doesn't exist, and always use ===.  PHP suffers from much the same 
> problem.
>
> BTW, here's a Python equality oddity:
>
>>>> r = 0.0
>>>> c = 0 + 0j
>>>> r == c
> True
>>>> int(r) == int(c)
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> TypeError: can't convert complex to int
>
> If x == y, then f(x) should also equal f(y).  More
> specifically, if x == y, and x is in the domain of f(), then y
> should also be in the domain of f().

Mixed arithmetic always promotes to the wider type (except in
the case of complex numbers (Ha!)).

r == c is equivalent to r == abs(c), which returns the magintude
of the complex number.

I wonder why it was deemed reasonable to do that but not for the
float constructor to do the same, or even int.

> BTW, one of the earliest things that turned me on to Python was
> when I discovered that it uses j as the imaginary unit, not i.
> All right-thinking people will agree with me on this.

On top of the engineering origin, j is more noticeable.

-- 
Neil Cerutti



More information about the Python-list mailing list