Dynamic default arguments in python functions

前端 未结 4 734
误落风尘
误落风尘 2021-01-12 19:22

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

4条回答
  •  感动是毒
    2021-01-12 20:03

    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
    

提交回复
热议问题