假设函数 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() 的时间。只需运行这两个函数并比较它们的时间。
