Why would I get a TypeEror?
Steven Bethard
steven.bethard at gmail.com
Fri Jan 14 16:58:40 EST 2005
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]()
This says something like:
Create two functions, one to produce 1/x and one to produce 1.0e99.
Select one of these functions depending on whether or not x==0
Invoke the chosen function.
HTH,
Steve
More information about the Python-list
mailing list