我知道这个问题有点愚蠢,也许它只是编写代码的一部分,但似乎定义简单的函数确实会严重损害性能......我试过这个简单的测试:
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 !! "])
它的风格非常好,代码清晰,但速度可能比直接写代码慢三倍。对于可能有副作用的函数来说,这是不可避免的,但实际上定义一些函数几乎是微不足道的,每次出现时都应该用代码行替换,将源代码翻译成那个,然后才编译。同样,我认为对于魔数(Magic Number),从内存中读取并不需要很多时间,但如果不应该更改它们,那么为什么不在代码编译之前用文字替换每个“魔法”实例?
最佳答案
函数调用开销不大;您通常不会注意到它们。在这种情况下,您只能看到它们,因为您的实际代码 (x*x) 本身非常微不足道。在任何执行实际工作的实际程序中,花费在函数调用开销上的时间都可以忽略不计。
(并不是说我真的建议在示例中使用 foo、identity 和 square,无论如何;它们是如此微不足道,将它们内联起来同样可读,而且它们并没有真正封装或抽象任何东西。)
if they're not supposed to be changed then why not just replace every instance of 'magic' with a literal before the code compiles?
因为编写程序是为了让您易于阅读和维护。您可以用它们的字面值替换常量,但这会使程序更难使用,因为一个非常小的好处,您可能永远无法测量它:高度premature optimisation .
关于python - 封装严重损害性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362997/