使用可变默认参数,如何从函数外部访问对象?
Using a mutable default argument, how to access the object from outside the function?
如果我有这样的东西:
def f(x, cache=[]):
cache.append(x)
如何从外部 f
访问 cache
?
函数范围内的变量不应该在外部访问。
你应该做的是使用一个全局变量来存储你的缓存:
GLOBAL_CACHE = []
def f(x, cache=GLOBAL_CACHE):
cache.append(x)
你可以使用__defaults__
魔法:
>>> def f(x, cache=[]):
... cache.append(x)
>>> f.__defaults__
([],)
>>> f(2)
>>> f.__defaults__
([2],)
>>> f('a')
>>> f.__defaults__
([2, 'a'],)
>>> c, = f.__defaults__
>>> c
[2, 'a']
为了完整起见,也可以使用inspect.getfullargspec
,更明确一点:
>>> import inspect
>>> inspect.getfullargspec(f)
FullArgSpec(args=['x', 'cache'], varargs=None, varkw=None, defaults=([2, 'a'],), kwonlyargs=[], kwonlydefaults=None, annotations={})
>>> inspect.getfullargspec(f).defaults
([2, 'a'],)
如果我有这样的东西:
def f(x, cache=[]):
cache.append(x)
如何从外部 f
访问 cache
?
函数范围内的变量不应该在外部访问。
你应该做的是使用一个全局变量来存储你的缓存:
GLOBAL_CACHE = []
def f(x, cache=GLOBAL_CACHE):
cache.append(x)
你可以使用__defaults__
魔法:
>>> def f(x, cache=[]):
... cache.append(x)
>>> f.__defaults__
([],)
>>> f(2)
>>> f.__defaults__
([2],)
>>> f('a')
>>> f.__defaults__
([2, 'a'],)
>>> c, = f.__defaults__
>>> c
[2, 'a']
为了完整起见,也可以使用inspect.getfullargspec
,更明确一点:
>>> import inspect
>>> inspect.getfullargspec(f)
FullArgSpec(args=['x', 'cache'], varargs=None, varkw=None, defaults=([2, 'a'],), kwonlyargs=[], kwonlydefaults=None, annotations={})
>>> inspect.getfullargspec(f).defaults
([2, 'a'],)