假设我有以下python代码:
a = b = 0
if f(a) and (g(b) == 1):
# Do Something #1
pass
elif f(a) and (g(b) == 2):
# Do Something #1
pass
可以假设f()
和g()
函数占用了一些不可忽略的CPU资源。
我想优化这段代码以提高计算效率。我应该改成下面这个吗?
a = b = 0
if f(a):
x = g(b)
if x == 1:
# Do Something #1
pass
elif x == 2:
# Do Something #2
pass
有什么方法可以自动化这个优化吗?我讨厌在我的整个代码库中手工操作。
编辑:函数f()
和g()
是完全确定的。IE:如果给定相同的输入参数,它们总是返回相同的结果。并且它们在自己的堆栈上下文之外没有副作用。
对于f(a)
使用单个if肯定更有效。为了获得最佳效率,应该将开销较大的公共子表达式的结果存储在一个变量中:
if f(a):
gb = g(b)
if gb == 1:
...
if gb == 2:
...
这将尽可能少地执行这些函数
如果g(b)
也可以返回与任何if
不匹配的值,那么您应该配置-首先计算g(b)
并看看它是否返回任何有效值,然后才计算f(a)
(如果这些当然不是依赖的):
gb = g(b)
if gb in (1, 2) and f(a):
if gb == 1:
...
if gb == 2:
没有任何标准的Python编译器可以静态地优化这些,不像在C/c++中,函数内容可以内联。