python程序在函数内执行得更快
http://www.cnblogs.com/nepaul/archive/2012/07/15/2592179.html
为什么Python程序在函数内执行得更快?(来源StackOverflow)
考虑下面的代码,一个在函数体内,一个是全局的代码。
函数内的代码执行效率为 1.8s
1
2
3
4
|
def main(): for i in xrange ( 10 * * 8 ): pass main() |
函数体外的代码执行效率为 4.5s
1
2
|
for i in xrange ( 10 * * 8 ): pass |
不用太纠结时间,只是一个示例,我们可以看到效率查得很多。为什么会这样呢?我们使用 dis
module 反汇编函数体内的bytecode 代码,使用 compile
builtin 反汇编全局bytecode,我们可以看到下面的反汇编(注意我高亮的地方)
1
2
3
|
13 FOR_ITER 6 (to 22) 16 STORE_FAST 1 (i) 19 JUMP_ABSOLUTE 13 |
1
2
3
|
13 FOR_ITER 6 (to 22) 16 STORE_NAME 1 (i) 19 JUMP_ABSOLUTE 13 |
我们可以看到,差别就是 STORE_FAST
和 STORE_NAME,前者比后者快很多。所以,在全局代码中,变量i成了一个全局变量,而函数中的i是放在本地变量表中,所以在全局变量表中查找变量就慢很多。如果你在main函数中声明global i 那么效率也就下来了。
原因是,本地变量是存在一个数组中(直到),用一个整型常量去访问,而全局变量存在一个dictionary中,查询很慢。
(注:在
C/C++中,这个不是一个问题)