Why Python allows comparison of a callable and a number?

MRAB python at mrabarnett.plus.com
Sun Nov 22 11:23:26 EST 2009


一首诗 wrote:
> I used python to write an assignment last week, here is a code snippet
> 
> #================================
> 
> def departTime():
>     '''
>     Calculate the time to depart a packet.
>     '''
>     if(random.random < 0.8):
>         t = random.expovariate(1.0 / 2.5)
>     else:
>         t = random.expovariate(1.0 / 10.5)
>     return t
> 
> #================================
> 
> Can you see the problem?  I compare random.random with 0.8,  which
> should be random.random().
> 
> Of course this because of my careless, but I don't get it.  In my
> opinion, this kind of comparison should invoke a least a warning in
> any programming language.
> 
> So why does python just ignore it?

In Python 2 you can compare any 2 objects, for example an int with a
string. The result is arbitrary but consistent.

In Python 3 if the 2 objects aren't 'compatible' you'll get a TypeError
at runtime.

BTW, you don't need to put parentheses around the conditions in 'if' and
'while' statements. Python isn't C, etc. :-)



More information about the Python-list mailing list