PEP 308: A PEP Writer's Experience - PRO

David Eppstein eppstein at ics.uci.edu
Mon Feb 10 16:20:21 EST 2003


In article <mailman.1044904883.10775.python-list at python.org>,
 holger krekel <pyth at devel.trillke.net> wrote:

> People using the ternary-op may easily fail to realize
> that the idiom isn't the right one all the time.  For example,
> it might prevent people from learning about the specific pythonic
> behaviour of and/or returning the "short-circuiting" object. 
> Subsequently 
> 
>     result = hasattr(obj, 'method') and obj.method() 
> 
> is not obvious to them but 
>     
>     result = obj.method() if hasatttr(obj, 'method') else None
> 
> is

I fail to see why forcing people to avoid an idiom that's obvious to 
them (because it's not the "right" one) is a benefit to their 
productivity or the readability of their code.

In my own case, although I can see that your use of "and" is shorter, I 
think that the if-else is better.  At first glance, if I see "x and 
y", it looks like x is one possible desired expression value, while 
here hasattr() makes no sense as something to store into result, so the 
second version looks more meaningful. Analyzing the code more 
carefully, I see that the two lines are different, and it seems likely 
that "None" is preferred to "False" for the result in the case when the 
obj does not have the attr.

-- 
David Eppstein       UC Irvine Dept. of Information & Computer Science
eppstein at ics.uci.edu http://www.ics.uci.edu/~eppstein/




More information about the Python-list mailing list