Best practice for setting the default value of a parameter that's supposed to be a list in Python?

前端 未结 4 1091
情歌与酒
情歌与酒 2020-12-29 02:02

I have a Python function that takes a list as a parameter. If I set the parameter\'s default value to an empty list like this:

def func(items=[]):
    print          


        
4条回答
  •  抹茶落季
    2020-12-29 02:48

    In addition and also to better understand what python is, here my little themed snippet:

    from functools import wraps
    def defaultFactories(func):
        'wraps function to use factories instead of values for defaults in call'
        defaults = func.func_defaults
        @wraps(func)
        def wrapped(*args,**kwargs):
            func.func_defaults = tuple(default() for default in defaults)
            return func(*args,**kwargs)
        return wrapped
    
    def f1(n,b = []):
        b.append(n)
        if n == 1: return b
        else: return f1(n-1) + b
    
    @defaultFactories
    def f2(n,b = list):
        b.append(n)
        if n == 1: return b
        else: return f2(n-1) + b
    
    >>> f1(6)
    [6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1, 6, 5, 4, 3, 2, 1]
    >>> f2(6)
    [1, 2, 3, 4, 5, 6]
    

提交回复
热议问题