On Feb 3, 11:06 pm, "Terry Reedy" <[EMAIL PROTECTED]> wrote:
> If you have multiple optional keywords with default behaviors when they are > not specified, the usually mechanism is the **keywords mechanism. If you > have just one, that may seem like overkill and some people prefer the > pseudo-default or sentinal value approach given by Arnaud. The only change > I would make from his post is to add at least an underscore to the sentinal > name to indicate that it is private to the module and not for use of > importers (and excluded from 'import *'). Yes, or you can even be more radical and use this construct which leverages the little known fact that 'apply', far from being a mere deprecated built-in function, is in fact a powerful decorator that reduces namespace pollution! @apply def func(nokey=object()): def the_real_func(key=nokey): if key is nokey: print "no key given" else: print "key given" return the_real_func >>> func(1) key given >>> func() no key given >>> func(key=2) key given Note that 'apply' has many uses: Say I have an expensive function f and I want to find y=f(x)*(1+f(x)) Instead of having to pollute my namespace with a temp value: temp = f(x) y = temp*(1+temp) I can use the very pythonic 'apply' decorator: @apply def y(z=f(x)): return z*(1+z) Mmh. Maybe I should patent it, I've never seen it before... -- Arnaud PS: this is not a serious suggestion :) -- http://mail.python.org/mailman/listinfo/python-list