文档章节

【转】python为什么在函数中执行速度快

回忆书签
 回忆书签
发布于 2012/07/06 09:54
字数 179
阅读 91
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

转自 stackoverflow

http://stackoverflow.com/questions/11241523/why-does-python-code-run-faster-in-a-function

为什么同样的代码在函数中就要比不在函数中快?

def main():
    for i in xrange(10**8):
        pass
main()

real    0m1.841s
user    0m1.828s
sys     0m0.012s

 

for i in xrange(10**8):
    pass

real    0m4.543s
user    0m4.524s
sys     0m0.012s

 

原因是这样的:

i在函数中是局部变量,使用STORE_FAST指令, i不在函数中为全局变量使用STORE_NAME指令

而 STORE_FAST要比STORE_NAME快。

可使用 dis模块查看字节码:

import dis

def a():
    pass

 
 dis.dis(a)
  2           0 LOAD_CONST               0 (None)
              3 RETURN_VALUE

 

 为什么 局部变量比全局变量快?

局部变量编译后被存为固定大小的数组, 而全局变量是个字典。

 

© 著作权归作者所有

回忆书签
粉丝 0
博文 23
码字总数 3350
作品 0
海淀
项目经理
私信 提问
用 Python 编写的 Python 解释器

(点击上方公众号,可快速关注) 翻译: qingyunha 英文:Allison Kaptur http://qingyunha.github.io/taotao/ Allison是Dropbox的工程师,在那里她维护着世界上最大的由Python客户组成的网络...

Python开发者
2018/04/22
0
0
看书 Python 源码分析笔记 (四)

学习对应书上的第2部分: Python 虚拟机. 第7章 Python 的编译结果 -- Code 对象与 pyc 文件 作者提出问题: 一个文本方式的 .py 文件是怎样转换成一系列的机器指令并被执行的呢? Python 程序的...

刘军兴
2015/12/21
145
0
python中base64编码与解码

引言:   在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应报文进行解码; Base64编码是一种“防君子不防小人”的...

上官夏洛特
2018/09/06
26
0
Python之 is 和 == 的区别 字符串的intern机制

在 Python 中会用到对象之间比较,可以用 ==,也可以用 is 。但是它们的区别是什么呢? is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。莱布尼茨说...

阿豪boy
2018/04/03
49
3
统计学习方法第五章:决策树(decision tree),CART算法,剪枝及python实现

统计学习方法第二章:感知机(perceptron)算法及python实现 统计学习方法第三章:k近邻法(k-NN),kd树及python实现 统计学习方法第四章:朴素贝叶斯法(naive Bayes),贝叶斯估计及python实现 ...

无限大的饿
02/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何管stderr,而不是stdout?

我有一个要写入信息的程序stdout和stderr ,我需要grep通过什么是未来标准错误 ,而忽视标准输出 。 我当然可以分2步完成: command > /dev/null 2> temp.filegrep 'something' temp.file...

技术盛宴
20分钟前
4
0
centos7.5上通过docker安装并运行mysql5.7

1. docker pull mysql:5.7 2. docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7...

Ryub
24分钟前
5
0
什么是比赛条件?

在编写多线程应用程序时,遇到的最常见问题之一是竞争条件。 我对社区的问题是: 什么是比赛条件? 您如何检测到它们? 您如何处理它们? 最后,如何防止它们发生? #1楼 当设备或系统试图同...

javail
35分钟前
5
0
SpringMVC源码分析-DispatcherServlet-init方法分析

上一篇:SpringMVC源码分析-DispatcherServlet实例化干了些什么 先吐槽一下。。。写了两小时的博客突然被俺家小屁孩按了刷新,东西不见了,建议OSCHINA能够自动定时保存啊。让我先安静一下。...

特拉仔
43分钟前
5
0
python协程 生成器

协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子...

沙门行道
53分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部