我应该何时将函数的结果存储为python中的变量?

时间:2016-08-17 19:50:01

标签: python

假设函数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()可能是计算密集型的,所以如果这两个代码块之间存在差异,我很好奇。我自己很乐意参加考试,但我不太清楚该怎么做。我也很好奇,如果函数的结果被多次调用,一般来说将函数的结果存储为变量是更好的做法。

2 个答案:

答案 0 :(得分:3)

你是对的。第二个块效率更高,因为它只调用my_list()一次。如果my_list()的计算成本特别高,那么您根本不会注意到差异。另一方面,如果你知道它会很昂贵,最好将结果保存在尽可能不妨碍可读性的地方(但请注意@Checkmate's answer中有关可能异常的内存的警告)

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

如果您想自己测试一下,可以time.time使用import time t0 = time.time() my_test() t1 = time.time() total = t1-t0

my_test()

获取{{1}}的时间。只需运行两个函数并比较它们的时间。

答案 1 :(得分:2)

回答你的问题,如果一个函数的结果被多次调用,它是否通常更好地存储函数的结果:它取决于。就可读性而言,作为一名程序员,这完全取决于你。就速度而言,将结果存储在变量中通常比运行函数两次更快。

然而,存储结果可以使用内存,如果存储异常大的变量,则内存使用实际上可以比简单地调用函数更长的运行时间。此外,如上所述,运行函数不仅可以将结果存储在变量中,因此运行不同次数的函数可以给出不同的结果。