使用局部变量而不是全局变量在Python中获得的性能优势限制?

时间:2013-07-20 16:10:13

标签: python performance micro-optimization

我遇到了一个问题Python code runs faster in functions。所以我认为将代码分解为尽可能多的部分将是更快的方法。但是在计算某些功能时,我发现它并不是真的正确。

我不会将代码发布为it is currently placed for review at codereview。我仍在找出最好的计时方式code is also placed for review at codereview,尽管有赏金,但我没有得到很多答案。

我发现性能优势不可能是无限的,必须有一个限制,即断开功能会停止提供性能优势。

那么通过将Python代码分解为各种函数来阻止性能优势的限制是什么?从性能的角度来看,何时将代码分解为函数不再有用?

2 个答案:

答案 0 :(得分:2)

由于访问时间的原因,代码在函数中运行速度比在全局范围内快。函数有自己的本地作用域,它实现为数组,而全局作用域实际上只是一个字典。数组的访问速度比dicts快,而且这种情况发生在C级别的引擎盖下。

这并不意味着将代码分解为多个函数会使其更快,它只意味着将代码从全局移动到 函数内部将改善访问时间,这可能会导致整体提升速度。

即使您只是为了使用本地范围而不是全局而将所有代码推送到一个函数中,它也不能保证性能提升,这只能通过实际分析代码来确定。这是因为函数调用在Python中的开销相对较高,这可能会使本地访问速度加快,从而使任何性能提升相形见绌。

您提供的first link页面上有很多信息可以确认这一点。

答案 1 :(得分:1)

据我所知,性能提升仅适用于将全局变量移动到函数的本地范围内,因为它会改善其访问时间。进一步将代码分解为更多功能将不会提供任何类似的提升。