我有一个返回字典的函数。
我希望能够在代码中多次访问和使用该字典,而无需每次都调用生成该字典的函数。换句话说,调用函数一次,但使用它返回多次的字典。
所以这样,字典只构造一次(并且可能存储在某个地方?),但在脚本中多次调用和使用。
def function_to_produce_dict():
dict = {}
# something
# something that builds the dictionary
return dict
create_dict = function_to_product_dict()
# other code that will need to work with the create_dict dictionary.
# without the need to keep constructing it any time that we need it.
我已阅读其他帖子,例如: Access a function variable outside the function without using `global`
但是我不确定通过将函数声明为全局而使用function_to_produce_dict()将通过一次又一次地调用函数来使字典无需每次构建都可访问。
这可能吗?
答案 0 :(得分:5)
也许我不理解,但你已经将它保存在overhead/memory
;继续使用create_dict
中的字典。一旦将其存储在create_dict
中,它就不会被构建。
也许您应该重命名它,因为create_dict
听起来像是一个创建字典的函数。也许这与你对此的困惑有关?
答案 1 :(得分:2)
有点不清楚是什么阻止你像往常一样使用字典。你有这样的情况吗?
def function_to_produce_dict():
...
def foo():
dct = function_to_produce_dict()
# do something to dct
...
def bar():
dct = function_to_produce_dict()
# do something to dct
...
foo()
bar()
在这种情况下,您可能希望foo
和bar
采用已构建的dct
参数:
def foo(dct):
# do something with dct
如果真的无法绕过它,您可以缓存创建字典的结果,以便它实际上只计算一次:
def _cached_function_to_compute_dict():
dct = None
def wrapper():
if dct is None:
dct = _function_to_compute_dict()
return dct
return wrapper
def _function_to_compute_dict():
# create and return a dictionary
return dct
function_to_compute_dict = _cached_function_to_compute_dict()
这只是一个专门的memoization装饰器......你可以获得更多的爱好者,使用functools.partial
来保存功能元数据等。