为什么在Python代码中使用局部变量会更快
在Python开发中,一个常见的效率优化方法就是在进入循环之前,使用局部变量来替代全局变量。具体的,可以对比下面的两个函数:
g = 2 def local_var(): global g l = g for i in range(100000000): i % l i + l def global_var(): global g for i in range(100000000): i % g i + g
在这个大循环中,global_var采用了全局变量,而local_var中则先用l = g
把全局变量放到了局部变量里。我们可以通过timeit模块来获取他们的运行时间,比如
>>> import timeit >>> timeit.timeit(local_var, number=1, globals=globals()) 6.773113199975342 >>> timeit.timeit(global_const, number=1, globals=globals()) 6.331308399792761
如果多次比较,会发现local_var确实明显要比global_var快一些。为了分析原因,我们可以用dis模块来分别反编译这两个函数的Python中间代码,放在下面进行对比:
dis.dis(local_var) | dis.dis(global_var) |
| |
比较发现,两个函数的主要区别在于循环中,local_var使用的是LOAD_FAST指令儿global_var中使用的是LOAD_GLOBAL指令。在Python的解释器执行中,因为LOAD_GLOBAL要在全局的字典中进行查找,所以LOAD_GLOBAL要比LOAD_FAST慢不少。这应该就是采用局部变量这一优化方法可以让Python程序更快的原因了。所以,养成在进入大规模的循环之前,用局部变量还是替代全局变量的习惯,还是相当有必要的。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SAP官方到底提供了免费的S4HANA试用版没有?
经常有朋友在微信公众号上给我留言,询问是否有免费的S/4HANA系统可以用。 作为SAP员工,我能给的答复就是这篇SAP社区的博客: SAP S/4HANA Fully-Activated Appliance: Create your SAP S/4HANA system in a fraction of the usual setup time https://blogs.sap.com/2018/12/12/sap-s4hana-fully-activated-appliance-create-your-sap-s4hana-1809-system-in-a-fraction-of-the-usual-setup-time/ 博客标题里提到的Appliance是什么意思? The appliance is a compressed system image that contains an SAP S/4HANA system with pre-configured SAP Best Practices and demo scenarios. 一个压缩之后的系统镜像,包含预先配置好...
- 下一篇
如何在语雀文档中输入汉语拼音
在语雀中,无法使用HTML中的标签来输入拼音,但是语雀可以支持latex公式块的插入,所以我们可以借助公式中的latex来做汉语拼音的输入,具体来说也就是通过latex中的overset指令来输入上下并排的字符。 先举一个简单的例子 \overset{bái}{白}\overset{rì}{日}\overset{yī}{依}\overset{shān}{山}\overset{jìn}{尽},\overset{huáng}{黄}\overset{hé}{河}\overset{rù}{入}\overset{hǎi}{海}\overset{liú}{流} 然后可以让这个字稍微大一些,比如(通过small,large,huge等命令来控制字体) \huge{\overset{bái}{白}\overset{rì}{日}\overset{yī}{依}\overset{shān}{山}\overset{jìn}{尽},\overset{huáng}{黄}\overset{hé}{河}\overset{rù}{入}\overset{hǎi}{海}\overset{liú}{流}} 也可以通过text...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8