PEP 308: A PEP Writer's Experience - PRO

holger krekel pyth at devel.trillke.net
Mon Feb 10 19:36:20 EST 2003


David Eppstein wrote:
> On 2/11/03 12:53 AM +0100 holger krekel <pyth at devel.trillke.net> wrote:
> >> > 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.
> >
> > because it easily leads to
> >
> >     if obj.method() if hasattr(obj, 'method') else None:
> >
> > which you have a harder time to justify as nice, not?
> 
> Different expressions are better in different contexts -- the "and" version 
> clearly works better as an if condition, but I think the ternary version 
> works better in an assignment.

I agree.  But i don't want to have such special casing. 

> If a programmer is intent on using a ternary in an if, I'd at least prefer 
> something like your example above that stands out as being unstylish and in 
> need of rewriting.  Consider the alternative: a programmer intending a 
> ternary who writes it as
>     if hasattr(obj, 'method') and obj.method() or some_default_value:
> It would be much harder to notice that this is buggy (in the case where 
> obj.method returns false but some_default_value is true), because of the 
> naturality of finding ands and ors in an if condition.

I agree but my conclusion is going to multiple lines and have
some vertical/indentation clue instead of having to parse it
"manually".  The 10 seconds save in writing it i easily loose
the next 5 times i come back to the function changing it. 

    holger





More information about the Python-list mailing list