python - 封装严重损害性能?

标签 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 !! "])

它的风格非常好,代码清晰,但速度可能比直接写代码慢三倍。对于可能有副作用的函数来说,这是不可避免的,但实际上定义一些函数几乎是微不足道的,每次出现时都应该用代码行替换,将源代码翻译成那个,然后才编译。同样,我认为对于魔数(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/

相关文章:

python - 多台主机上的并行 rsync

python - Django 应用程序覆盖和导入路径?

python - Pandas 重命名: change values of index for a specific column only

performance - 对齐 AVX-256 内存存储是否值得费心?

objective-c - 测量 iOS 应用程序启动性能的规范方法?

performance - 简单的带宽/延迟测试来估计用户体验

python - 将函数应用于 pandas 数据框列中每行的每个单词

python - 根据索引将字节对象分成 n 个大小相等的 block

php - 什么是更快的平面文件或 MySQL RAM 数据库?

google-chrome - 为什么我的 Google Chrome 扩展程序的弹出 UI 在外接显示器上滞后,而在笔记本电脑的 native 屏幕上却没有?