首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高效Python编程

高效Python编程
EN

Stack Overflow用户
提问于 2019-02-10 19:07:57
回答 2查看 68关注 0票数 0

我有一个大型的、流程密集型的函数,它返回元组,我打算将元组分成两个变量。我想知道哪一种方法更有效?让我举例说明:

我的大功能:

代码语言:javascript
运行
复制
def calculate_equations(a, b, c):
    ...blah blah large, complex function...
    return x, y

分裂元组的First方法(我需要'if‘语句,因为这个函数实际上操作另一个函数的输出):

代码语言:javascript
运行
复制
final_outcome = calculate_equations(a, b, c)
if final_outcome[0]: variable1 = final_outcome[0]
if final_outcome[1]: variable2 = final_outcome[1]

分割元组的第二个方法(我需要'if‘语句,因为这个函数实际上操作另一个函数的输出):

代码语言:javascript
运行
复制
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]

实际上,我更喜欢第二种方法,因为它看起来更像“琵琶”,但我不确定它是否比第一种方法更有效?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-10 23:06:44

第一种方法要好得多,因为它不会重复调用函数,这本身可能比将结果存储到变量中花费更多的时间。第一种更多的节能型变体是:

代码语言:javascript
运行
复制
final_outcome1, final_outcome2  = calculate_equations(a, b, c)
if final_outcome1: variable1 = final_outcome1
if final_outcome2: variable2 = final_outcome2

如果您的final_outcome变量经常是真实的,我甚至会考虑使用短路作为临时条件赋值操作符的变体,这可能会更快:

代码语言:javascript
运行
复制
final_outcome1, final_outcome2  = calculate_equations(a, b, c)
variable1 = final_outcome1 or variable1
variable2 = final_outcome2 or variable2
票数 0
EN

Stack Overflow用户

发布于 2019-02-10 19:11:50

实际上,您可以使用timeit模块,也可以简单地设置打印time.time()减去前一次,以查看速度。

但是,简单地说,第一种方法会更快,因为第二种方法需要通过再次调用calculate_equations来重新计算,即使是1 if

这意味着第二个方法总共将调用4次相同的函数,而第一个方法只调用它一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54619972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档