(test) ? a:b

BartC bc at freeuk.com
Thu Oct 23 12:50:51 CEST 2014


"Dennis Lee Bieber" <wlfraed at ix.netcom.com> wrote in message 
news:mailman.15097.1414022143.18130.python-list at python.org...
> On Wed, 22 Oct 2014 19:08:40 +0100, "BartC" <bc at freeuk.com> declaimed the
> following:
>
>>
>>Comparing:
>>
>> x = cond ? f() : g();       # C version
>>
>>with
>>
>> x = [f(), g()] [cond]

(Should probably be x = [g(), f()] [cond])

>>
>>the latter evaluates both f() and g() instead of just one. Apart from 
>>being
>>inefficient, it can have unintended side-effects.
>
> Ah, but what would
>
> x = [f, g][cond]()
>
> produce?

It will select f or g (which should refer to functions), and call one of 
those depending on cond. That's not a problem.

The problem is it will still evaluate both f and g, even if they are simple 
in this case, and construct a list which is then indexed by cond. (Although 
in this case a bytecode compiler might be smart enough to avoid constructing 
the list, it can't do that with my example because the code might depend on 
both those options being evaluated.)

-- 
Bartc 




More information about the Python-list mailing list