英文:
How can I efficiently access a function's return value repeatedly without repeating expensive work?
问题
我想要多次访问Python函数的返回值,避免重复计算昂贵的部分。
示例:
def expensive_function():
print('进行昂贵的工作')
return '昂贵工作的输出';
def get_output_twice():
output = expensive_function() # 这部分会执行昂贵的工作
print(output) # 这部分不会执行昂贵的工作
print(output) # 这部分不会执行昂贵的工作
def get_output_again():
output = expensive_function() # 这部分会再次执行昂贵的工作
print(output) # 这部分不会执行昂贵的工作
get_output_twice()
print('\n')
get_output_again()
这产生:
进行昂贵的工作
昂贵工作的输出
昂贵工作的输出
进行昂贵的工作
昂贵工作的输出
该示例演示了:
- 将返回值分配给变量允许多次访问,而无需再次调用函数,如
get_output_twice()
中所示。 - 将返回值分配给另一个函数中的变量会强制再次调用昂贵的函数。
是否可以通过多个其他函数的调用来访问函数的返回值,而不重复昂贵的工作并且不使用global
?
英文:
I would like to access a Python function's return value multiple times without repeating the computationally expensive parts.
Example:
def expensive_function():
print('do expensive work')
return 'output of expensive work'
def get_output_twice():
output = expensive_function() # This does the expensive work
print(output) # This does not do expensive work
print(output) # This does not do expensive work
def get_output_again():
output = expensive_function() # This does the expensive work again
print(output) # This does not do expensive work
get_output_twice()
print('\n')
get_output_again()
This produces:
do expensive work
output of expensive work
output of expensive work
do expensive work
output of expensive work
This example demonstrates:
- Assigning the return value to a variable allows that variable to be accessed multiple times without calling the function again, as demonstrated in
get_output_twice()
. - Assigning the return value to a variable in another function forces the expensive function to be called again.
Is it possible to access a function's return value via calls from multiple other functions without repeating expensive work and without the use of global
?
答案1
得分: 3
可以使用函数缓存来实现这个目标。函数缓存是一种技术,它会将昂贵函数调用的结果存储在内存中,以便在以后再次使用相同输入调用该函数时进行重用。
from functools import lru_cache
@lru_cache(maxsize=None)
def expensive_function():
print('do expensive work')
return 'output of expensive work'
(maxsize=None
表示缓存可以无限增长,缓存函数的所有可能输入-输出对)。
英文:
Yes, you can use function caching to achieve this. Function caching is a technique where the result of an expensive function call is stored in memory and reused later when the function is called again with the same input.
from functools import lru_cache
@lru_cache(maxsize=None)
def expensive_function():
print('do expensive work')
return 'output of expensive work'
(maxsize=None
indicates that the cache can grow indefinitely and cache all possible input-output pairs of the function).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论