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++中,这个不是一个问题)
原文链接: https://www.cnblogs.com/lvxiuquan/archive/2013/05/15/3079546.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/88669
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!