Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么时候应该在python中将函数的结果存储为变量?_Python - Fatal编程技术网

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

什么时候应该在python中将函数的结果存储为变量?,python,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:

假设函数
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\u list()
。这是真的吗


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

要回答您关于如果函数将被多次调用,通常将函数的结果存储为变量是否更好的问题:这取决于。就可读性而言,这实际上取决于作为程序员的您。就速度而言,将结果存储在变量中通常比运行函数两次要快


然而,存储结果可能会占用内存,如果存储的变量非常大,那么内存的使用实际上会导致比简单调用函数更长的运行时间。此外,如上所述,运行函数可以做的不仅仅是将结果存储在变量中,因此运行不同次数的函数可以得到不同的结果

回答您的问题:如果函数将被多次调用,则通常最好将其结果存储为变量:这取决于。就可读性而言,这实际上取决于作为程序员的您。就速度而言,将结果存储在变量中通常比运行函数两次要快


然而,存储结果可能会占用内存,如果存储的变量非常大,那么内存的使用实际上会导致比简单调用函数更长的运行时间。此外,如上所述,运行函数可以做的不仅仅是将结果存储在变量中,因此运行不同次数的函数可以得到不同的结果

你说得对。第二个块将更有效,因为它只调用
my_list()
一次。如果
my_list()
在计算上不是特别昂贵,那么您就不太可能注意到任何差异。另一方面,如果您知道这样做会很昂贵,那么最好在不影响可读性的情况下保存结果(不过,请注意内存中关于可能出现异常的警告)

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

如果您想自己测试,您可以使用
time.time
例如:


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

您是正确的。第二个块将更有效,因为它只调用
my_list()
一次。如果
my_list()
在计算上不是特别昂贵,那么您就不太可能注意到任何差异。另一方面,如果您知道这样做会很昂贵,那么最好在不影响可读性的情况下保存结果(不过,请注意内存中关于可能出现异常的警告)

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

如果您想自己测试,您可以使用
time.time
例如:


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

这是正确的。如果
my_list()
执行花费大量时间,则最好存储结果。Wolph的评论是正确的。另外,关于如何自己测试它的指导,请看这个问题:我的列表是否有副作用或者不是幂等的也很重要。例如,如果它是一个返回列表的生成器。或者obj是否可以在调用之间进行更改。在几乎所有情况下,您都不需要担心性能,应该编写可读性更好的代码。只有在需要的时候才返回优化。如果
my_list
是一个昂贵的调用,那么将其保存在变量中是值得的。这也是一个方便的装饰师:@freebie这个链接对我来说非常有启发。我一直在编写另一段代码,我基本上是在尝试lru_缓存我自己(我是一名数学家,为我的研究编写代码,对计算机科学几乎一无所知)。谢谢你的帮助!这是正确的。如果
my_list()
执行花费大量时间,则最好存储结果。Wolph的评论是正确的。另外,关于如何自己测试它的指导,请看这个问题:我的列表是否有副作用或者不是幂等的也很重要。例如,如果它是一个返回列表的生成器。或者obj是否可以在调用之间进行更改。在几乎所有情况下,您都不需要担心性能,应该编写可读性更好的代码。只有在需要的时候才返回优化。如果
my_list
是一个昂贵的调用,那么将其保存在变量中是值得的。这也是一个方便的装饰师:@freebie这个链接对我来说非常有启发。我一直在编写另一段代码,我基本上是在尝试lru_缓存我自己(我是一名数学家,为我的研究编写代码,对计算机科学几乎一无所知)。谢谢你的帮助!不过,那个大变量已经在内存中(因为它是从函数返回的)。添加另一个引用
import time

t0 = time.time()
my_test()
t1 = time.time()

total = t1-t0