George Sakkis wrote:
+0.x for a new keyword that adds dynamic semantics (and removes the
need for the sentinel kludge).


We don't need new syntax for it.  Here's a proof-of-concept hack that you can do it with a function decorator.
import copy

def clone_arguments(f):
  default_args = list(f.func_defaults)
  if len(default_args) < f.func_code.co_argcount:
    delta = f.func_code.co_argcount - len(default_args)
    default_args = ([None] * delta) + default_args
  def fn(*args):
    if len(args) < default_args:
      args = args + tuple(copy.deepcopy(default_args[len(args):]))
    return f(*args)

  return fn

@clone_arguments
def thing_taking_array(a, b = []):
  b.append(a)
  return b

print thing_taking_array('123')
print thing_taking_array('abc')

-1 on changing Python one iota for this,


/larry/