Skip to main content
 首页 » 编程设计

python之什么时候应该将函数的结果存储为 python 中的变量

2025年05月04日26bhlsheji

假设函数 my_list(obj) 返回一个列表。我想编写一个函数,如果此列表的长度为 1,则返回 my_list(obj) 的单个元素,否则返回 False。我的代码是

def my_test(obj): 
    if len(my_list(obj)) == 1: 
        return my_list(obj)[0] 
    return False 

我突然意识到代码

def my_test(obj): 
    L = my_list(obj) 
    if len(L) == 1: 
        return L[0] 
    return False 

可能更有效,因为它只调用一次 my_list()。这是真的吗?

my_list() 函数可能需要大量计算,所以我很好奇这两个代码块之间是否存在差异。我很乐意自己进行测试,但我不太确定该怎么做。我也很好奇,如果要多次调用函数,将函数的结果存储为变量通常是否更好。

请您参考如下方法:

你是对的。第二个 block 会更有效率,因为它只调用一次 my_list()。如果 my_list() 在计算上不是特别昂贵,那么您根本不会注意到差异。另一方面,如果您知道它会很昂贵,那么在不影响可读性的情况下,最好将结果保存在可能的位置(但是,请注意 @Checkmate's answer 中关于内存的警告,以防出现可能的异常)。

但是,如果 my_list() 有 side effects ,或者如果它的返回值在这两次调用之间可能发生变化,您可能不想保存它(取决于您是否想触发副作用两次或者需要接收更改后的返回值)。

如果你想自己测试一下,你可以像 this 那样使用 time.time:

import time 
 
t0 = time.time() 
my_test() 
t1 = time.time() 
 
total = t1-t0 

获取my_test() 的时间。只需运行这两个函数并比较它们的时间。