【发布时间】:2016-07-15 13:52:39
【问题描述】:
我对性能有疑问,无法找到 python 在每种情况下的行为方式:
def something(object):
if object== 'something':
return 1
else:
return 0
选项 1:
def something_bigger(list, object):
total= 0
for item in list:
total+= something(object)
def something_bigger2(list, object):
total= 0
for item in list:
total-= something(object)
选项 2:
def something_bigger(list, object):
total= 0
something = something(object)
for item in list:
total+= something(object)
def something_bigger2(list, object):
total= 0
something = something(object)
for item in list:
total-= something(object)
这些例子很简单,没有任何意义,但我的目标是了解 python 是否理解 `something() 返回总是相同 并且 不会重复 if 无休止的时间 b>.
选项二,不了解 python 将如何做到这一点,似乎更快,但另一方面我重复我的代码!
【问题讨论】:
-
这取决于特定的解释器以及它在识别和优化这些特定案例方面的能力。从根本上说,您是告诉 Python 每次都重复
if..else。 -
不,Python 解释器不会推断它可以避免分支(因为它不知道可以避免分支)。你知道的,所以相应地编写代码。
-
那么最好的方法是在for之外调用带有不可变变量的方法?
-
CPython 不会优化您的代码,PyPy 和 Pyston 会尝试这样做。如果你可以避免多次
something调用,那就去做吧。 -
通常当您对性能有疑问时,您会分析您的代码。试试 cProfile 矿石 line_profiler。
标签: python