Default if none
steve at REMOVE-THIS-cybersource.com.au
Fri Apr 30 05:22:12 CEST 2010
On Thu, 29 Apr 2010 04:12:29 -0700, Astley Le Jasper wrote:
> ... oh ... that simple. Now I feel dumb.
It's really difficult to tell what you're talking about, but I assume
that you're talking about Chris' solution:
x or y or z
Be careful, as Chris' solution is rather risky (read his disclaimer
again). And the code you give does NOT solve the question you ask. Have
you tested it with something like this?
>>> default_if_none(0) == 0
>>> default_if_none(0) is None
Your code destroys perfectly legitimate values and replaces them with
None. That's almost certainly not what you actually want. Chris' solution
isn't much better, but he warned you about it. Read his post carefully.
>>> x, y, z = 0, None, None
>>> x or y or z == 0
>>> x or y or z is None
What are you trying to accomplish? Return the first arg that is not None,
otherwise return None? You need to code your test more carefully, by
testing for None and nothing but None:
for arg in args:
if arg is not None:
You don't need the "return None" at the end, because all Python functions
do that automatically.
Here is a one-liner to do it:
(filter(lambda x: x is not None, args) or [None])
but frankly the one-liner is ugly and I wouldn't use it. Just use the
More information about the Python-list