我有一个大型的、流程密集型的函数,它返回元组,我打算将元组分成两个变量。我想知道哪一种方法更有效?让我举例说明:
我的大功能:
def calculate_equations(a, b, c):
...blah blah large, complex function...
return x, y分裂元组的First方法(我需要'if‘语句,因为这个函数实际上操作另一个函数的输出):
final_outcome = calculate_equations(a, b, c)
if final_outcome[0]: variable1 = final_outcome[0]
if final_outcome[1]: variable2 = final_outcome[1]分割元组的第二个方法(我需要'if‘语句,因为这个函数实际上操作另一个函数的输出):
if calculate_equations(a, b, c)[0]: variable1 = calculate_equations(a, b, c)[0]
if calculate_equations(a, b, c)[1]: variable2 = calculate_equations(a, b, c)[1]实际上,我更喜欢第二种方法,因为它看起来更像“琵琶”,但我不确定它是否比第一种方法更有效?
发布于 2019-02-10 23:06:44
第一种方法要好得多,因为它不会重复调用函数,这本身可能比将结果存储到变量中花费更多的时间。第一种更多的节能型变体是:
final_outcome1, final_outcome2 = calculate_equations(a, b, c)
if final_outcome1: variable1 = final_outcome1
if final_outcome2: variable2 = final_outcome2如果您的final_outcome变量经常是真实的,我甚至会考虑使用短路作为临时条件赋值操作符的变体,这可能会更快:
final_outcome1, final_outcome2 = calculate_equations(a, b, c)
variable1 = final_outcome1 or variable1
variable2 = final_outcome2 or variable2发布于 2019-02-10 19:11:50
实际上,您可以使用timeit模块,也可以简单地设置打印time.time()减去前一次,以查看速度。
但是,简单地说,第一种方法会更快,因为第二种方法需要通过再次调用calculate_equations来重新计算,即使是1 if。
这意味着第二个方法总共将调用4次相同的函数,而第一个方法只调用它一次。
https://stackoverflow.com/questions/54619972
复制相似问题