the PHP ternary operator equivalent on Python

Steven D'Aprano steve at REMOVETHIScyber.com.au
Wed Nov 23 17:02:51 EST 2005


On Wed, 23 Nov 2005 07:01:58 -0800, Daniel Crespo wrote:

>> WHY WHY WHY the obsession with one-liners? What is wrong with the good old
>> fashioned way?
> 
> 
>> if cond:
>>    x = true_value
>> else:
>>    x = false_value
> 
> Let me tell you something: I'm not a one-liner coder, but sometimes It
> is necesary.

I'm not arguing for multi-line code just for the sake of using more than
one line. I'm against artificially trying to compress a algorithm that is
naturally expressed in two or more lines into one line.


> For example:
> I need to translate data from a DataField to Another.
> 
> def Evaluate(condition,truepart,falsepart):
>     if condition:
>         return truepart
>     else:
>         return falsepart
> 
> dOldDataFields = {}
> dNewDataFields = {}

Why do you bother to initialise dNewDataFields to an empty dict when you
then populate it in the very next statement?

 
> dNewDataFields = {
>             'CODE':	dOldDataFields['CODEDATA'],
>             'DATE':	dOldDataFields['DATE'],
>             'CONTACT':	Evaluate(dOldDataFields['CONTACTTYPE']==2,
> dOldDataFields['FIRSTCONTACT'], dOldDataFields['SECONDCONTACT'])
> }

Doesn't look like a one-liner to me. You've called Evaluate, which takes
five lines by my count. 


> With this, I created a new dic very easy, saving in
> dNewDataFields['CONTACT'] the value of dOldDataFields['FIRSTCONTACT']
> or the value of dOldDataFields['SECONDCONTACT'] depending on
> dOldDataFields['CONTACTTYPE']. How you do this in a practic way without
> the use of one-line code? It is needed! You can't avoid it! Even using
> a = [if_false_expr, if_true_expr][predicate] or a function, you'll
> always have to use a one-line code (for this purpose, of course).

Again, I am not arguing for needlessly inflating lines of code, I think
your solution is fine. But just to prove it can be done:

dNewDataFields['CODE'] = dOldDataFields['CODEDATA']
dNewDataFields['DATE'] = dOldDataFields['DATE']
if dOldDataFields['CONTACTTYPE'] == 2:
    dNewDataFields['CONTACT'] = dOldDataFields['FIRSTCONTACT']
else:
    dNewDataFields['CONTACT'] = dOldDataFields['SECONDCONTACT']


There. The world didn't end. 

*wink*



-- 
Steven.




More information about the Python-list mailing list