或者说,其他的比局部变量差多少?
有什么大不了的?
一些文章建议Python程序员如果会经常使用局部变量,即使只是引用但不改变。
例如,以下是“Making Python Programs Blazing Fast”中的两句话:
“实际上,甚至在函数中的局部变量(最快)、类级属性(例如 self.name - 较慢)和全局(例如 time.time 等导入函数)之间,查找速度也存在差异(最慢) ”。
“不要访问属性
另一个可能会减慢程序速度的事情是访问对象属性时使用的点运算符 (.)。此运算符使用 getattribute 触发字典查找,这会在代码中产生额外的开销。 “
而且,这些并不是唯一的可能性。之间的差异如何:
我通过在循环中使用所有这些进行 1,000,000 次迭代进行测试,但其中每次迭代的工作量最少。除了用于测试类外函数的函数属性的函数之外,这些函数都是类的方法。
典型的函数具有以下形式:
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
所有代码都在这篇文章的底部。
| | | | Relative | | Where | Time | Rate | Performance | | LV Local Variable | 1.92 | 0.5208 | 100% | | GV Global Variable | 1.99 | 0.5020 | 96% | | ISA Instance Slotted Attribute | 2.09 | 0.4789 | 92% | | CA Class Attribute | 3.12 | 0.3204 | 62% | | INSA Instance Non-Slotted Attribute | 3.28 | 0.3051 | 59% | | FA Function Attribute | 3.49 | 0.2865 | 55% | | MA Method Attribute | 6.29 | 0.1589 | 31% |
说明:
比较性能时,请始终比较(成就/资源),例如每加仑英里数或每秒计算数,而不是每公里升数或每计算秒数。
是的,局部变量是最快的。
不同类型变量的表现分为三组。
令人惊讶的是,与常识相比,全局变量是第二好的,甚至比类中的开槽实例属性更好。另一个令人惊讶的是方法属性是最差的。
def testINSA(self): s=0 for i in range(10000000): s+=self.INSA # what is after the = differs in each function. return s
以上是python 局部变量比全局变量、属性或槽好多少?的详细内容。更多信息请关注PHP中文网其他相关文章!