class constructors: class vs. instance defaults

Steven Bethard steven.bethard at gmail.com
Thu Oct 7 19:53:34 CEST 2004


Steve Holden <steve <at> holdenweb.com> writes:
> 
> Of course that means that
> 
> 	(foo_d is None) or {}
> 
> works, giving you the best of both worlds.

I don't think this does what the OP wants it to:

>>> def f(x=None):
...     return (x is not None) or {}
...
>>> f()
{}
>>> f({})
True

Note that (x is not None) evaluates to True, not x.  Note that you can't solve 
this by introducing an 'and' either because {} evaluates to False in a boolean 
context:

>>> def f(x=None):
...     return x is not None and x or {}
...
>>> f()
{}
>>> d = {}
>>> f(d)
{}
>>> f(d) is d
False


(Another) Steve




More information about the Python-list mailing list