Python complaints

Michael Hudson mwh21 at cam.ac.uk
Wed Nov 24 18:23:38 CET 1999


Dennis Lee Bieber <wlfraed at ix.netcom.com> writes:

> On Wed, 24 Nov 1999 10:23:27 +0100, "Fredrik Lundh"
> <fredrik at pythonware.com> declaimed the following in comp.lang.python:
> 
> > Brad Knotwell <knotwell at ix.netcom.com> wrote:
> > > Similarly, the only thing I've found missing from Python is C's
> > > ternary operator, it would be nice to be able to do something like 
> > > the following:
> > > 
> > > def max(x,y): return ((x>y) ? x : y)
> > 
> > now that was one lousy example ;-)
> >
> 	Also potentially unsafe if either x or y is some expression when
> invoked. At least, I seem to recall some suggestion to always put macro
> arguments in parens...
> 
> 	def max(x,y): return(((x)>(y)) ? (x) : (y))

Eh? This is Python, not some yucky character-based macro equipped UNIX
implementation language <wink>.

One thing that 

x = (var and (ifexp,) or (elseexp,))[0]

has over

def choose(var,ifvar,elsevar):
    if var:
        return ifvar
    else:
        return elsevar

x = choose(var,ifexp,elseexp)

besides brevity is that the former will only evaluate one of ifexp or
elseexp, but that isn't going to matter for max (obviously...).

It can be handy in things like:

x = (hasattr(x,"foo") and (x.foo,) or (None,))[0]

though in this case 

x = getattr(x,"foo",None)

is clearly better...

Regards,
Michael




More information about the Python-list mailing list