On Thu, 14 May 2009 09:44:07 pm spir wrote:
Generally speaking, I find ok the need of sentinels for clarifying rare and non-obvious cases such as runtime-changing default values:
def somefunc(arg, m=UNDEF): if m is UNDEF: m = runtimeDefaultVal()
While I do not find ok the need of a sentinel to avoid the common gotcha of a default value beeing "back-updated" when the corresponding local var is changed in the func body:
def otherfunc(arg, l=UNDEF): if l is UNDEF: l =  <possibly update l>
But those two idioms are the same thing!
In the first case, if m is not provided by the caller, your function has to produce a fresh object at runtime. It does this by calling runtimeDefaultVal() which returns some unspecified object.
In the second case, if l is not provided by the caller, your function has to produce a fresh object at runtime. It does this by calling . This is merely a special case of the first case, where runtimeDefaultVal() simply returns  every time.