Chris Monson wrote: > Now thinking as a language designer, C# has a ?? operator where A??B > is shorthand for (B if A is None else A) except you only have to > write A once and A is only evaluated once. A Pythonesque version of > this would be just "else": > > def foo(arg=None, arg2=None): > arg = arg else bar > arg2 = arg2 else list() > > And I think that metaphor is easy to read. Chains of else operators > can be useful: > > x = f() else g() else h() else 0 > > > Not a bad idea. Looks like the time machine is at work again: > > x = f() or g() or h() or 0
True, but 'else' can be a more specific operator, so that >>> arg = arg else bar is equivalent to: >>> if arg is None: arg = bar, where >>> arg = arg or bar is instead equivalent to: >>> if not arg: arg = b This has the advantage of being more linguistically clear and/or unambiguous. No nasty surprises when someone calls foo(0, []); using or, you'd get default argument treatment when you might need the values as specified. This is basically the reasoning used for introducing >>> arg = b if a else c where we had a hack before that failed in certain corner cases >>> arg = a and b or c It's a little more nuanced here, I admit, but it doesn't seem like it would kill anything too badly. If we weren't freezing, it'd be something to toss around and explore - as it stands, maybe this should get filed as an idea for the future. - Eric Astor _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com