Hrvoje Niksic schrieb:
"Diez B. Roggisch" <[EMAIL PROTECTED]> writes:
Since python 2.5, it is
<then_value> if <cond> else <else_value>
If you want lazy evaluation, you can use lambdas:
iif(cond, lambda: then, lambda: else_)()
Your code uses "iif" and attempts to evaluate a tuple; could you post
an example that works?
I ask because it's not clear what you mean by lazy evaluation in this
context. The ternary "if" expression introduced in Python 2.5 only
evaluates then_value or else_value depending on the outcome of cond.
How is that different than using a lambda?
If iif is defined as this:
def iif(cond, then, else_):
if cond:
return then
else:
return else_
you have the problem that "then" and "else_" get evaluated *before* they
get passed. So for example this factorial function will fail with too
deep recursion error:
def f(n):
return iif(n> 1, n * f(n-1), 1)
But if you do it like this, the then and else_ will be functions that
get returned and then they need to be called to be acutally evaluated:
def f(n):
return iif(n> 1, lambda: n * f(n-1), lambda: 1)()
Diez
--
http://mail.python.org/mailman/listinfo/python-list