I have a need for functions with default arguments that have to be set at function runtime (such as empty lists, values derived from other arguments or data taken from the d
A quick&dirty example implementation of something that might work:
class DynDefault(object):
def __init__(self, callback):
self.callback = callback
def __call__(self):
return self.callback()
def dyn_default(func):
def wrapper(*args, **kw):
args = [arg() for arg in args if isinstance(arg, DynDefault) else arg]
for k, v in kw.items():
if isinstance(v, DynDefault):
kw[k] = v()
return func(*args, **kw)
return wrapper
@dyn_default
def foo(bar, baaz=DynDefault(blar)):
# problem solved