封装会严重损害性能?

oob*_*boo 3 python performance

我知道这个问题有点愚蠢,也许它只是编写代码的一部分,但似乎定义简单的函数真的会严重损害性能......我尝试过这个简单的测试:

def make_legal_foo_string(x):
    return "This is a foo string: " + str(x)

def sum_up_to(x):
    return x*(x+1)/2

def foo(x):
    return [make_legal_foo_string(x),sum_up_to(x),x+1]

def bar(x):
    return ''.join([str(foo(x))," -- bar !! "])
Run Code Online (Sandbox Code Playgroud)

这是非常好的风格,使代码清晰,但它的速度可能只是字面上的三倍.对于可能产生副作用的函数来说,这是不可避免的,但实际上几乎无足轻重地定义一些函数,这些函数每次出现时都应该用代码行替换,将源代码转换为只编译.同样我认为对于幻数,它不需要花费很多时间从内存中读取,但是如果它们不应该被更改那么为什么不在代码编译之前用文字替换'magic'的每个实例?

bob*_*nce 6

函数调用开销不大; 你通常不会注意到它们.在这种情况下,您只能看到它们,因为您的实际代码(x*x)本身就是如此完全无关紧要.在任何真正有效的程序中,在函数调用开销上花费的时间可以忽略不计.

(在任何情况下,并不是说我真的建议在示例中使用foo,identity和square;它们是如此微不足道,它们可以读取内联并且它们并不真正封装或抽象任何东西.)

如果他们不应该被改变那么为什么不在代码编译之前用文字替换'magic'的每个实例?

因为程序是为了便于您阅读和维护而编写的.你可以用它们的文字值替换常量,但它会使程序更难以使用,为了一个非常小的好处,你甚至可能永远无法测量它:过早优化的高度.