Why would I get a TypeEror?
Reinhold Birkenfeld
reinhold-birkenfeld-nospam at wolke7.net
Fri Jan 14 17:06:43 EST 2005
Steven Bethard wrote:
> It's me wrote:
>> Say again???
>
> Please stop top-posting -- it makes it hard to reply in context.
>
>> "Reinhold Birkenfeld" wrote...
>>>It's me wrote:
>>>>If this is true, I would run into trouble real quick if I do a:
>>>>
>>>>(1/x,1.0e99)[x==0]
>>>
>>>Lazy evaluation: use the (x==0 and 1e99 or 1/x) form!
>
> If you want short-circuting behavior, where only one of the two branches
> gets executed, you should use Python's short-circuiting boolean
> operators. For example,
>
> (x == 0 and 1.0e99 or 1/x)
>
> says something like:
>
> Check if x == 0.
> If so, check if 1.0e99 is non-zero. It is, so return it.
> If x != 0, see if 1/x is non-zero. It is, so return it.
>
> Note that if you're not comfortable with short-circuiting behavior, you
> can also code this using lazy evaluation:
>
> (lambda: 1/x, lambda: 1.0e99)[x==0]()
Or even
(x==0 and lambda: 1e99 or lambda: 1/x)()
Or ...
Reinhold
More information about the Python-list
mailing list