Le Wed, 13 May 2009 20:10:42 -0400, George Sakkis email@example.com s'exprima ainsi:
Subproposal (2): If subproposal (1) is accepted, we could get for free (in terms of syntax at least) dynamic args depending on previous ones. That is,
def myfunc(a, b, *m=(a+b)/2):
def myfunc(a, b, *m = lambda a,b: (a+b)/2):
with the lambda being passed the values of a and b at runtime.
While I understand the intent, this seems complicated to me. I find clearer to express m in the func body; using a sentinel if m is a real default arg (meaning it could possibly be passed by the user).
UNDEF = object() def myfunc(a, b, m=UNDEF): if m is UNDEF: m = (a+b)/2)
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>
Denis ------ la vita e estrany