首页 > 后端开发 > Python教程 > python 局部变量比全局变量、属性或槽好多少?

python 局部变量比全局变量、属性或槽好多少?

Barbara Streisand
发布: 2024-12-28 02:07:11
原创
517 人浏览过

How much better are python local variables over globals, attributes, or slots?

或者说,其他的比局部变量差多少?

有什么大不了的?

一些文章建议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% |

登录后复制

说明:
比较性能时,请始终比较(成就/资源),例如每加仑英里数或每秒计算数,而不是每公里升数或每计算秒数。

  • 时间由timeit报告,限制为3位有效数字。
  • 速率是时间的倒数。每秒有多少个。
  • 相对表现是与最佳表现相比的比率。通过使用相对性能,越大越好,两倍大就是两倍好。

发现

是的,局部变量是最快的。

不同类型变量的表现分为三组。

  1. 本地变量、全局变量和类实例槽变量:全局变量的速度比本地变量快 96%,而类实例槽属性的速度是本地变量的 92%。
  2. 类属性、非槽类实例属性和函数属性:它们分别以局部变量的 62%、59% 和 55% 执行。
  3. 方法属性:使用方法属性是在它自己的类中,其性能是局部变量的 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板