gpt4 book ai didi

python - 为什么 Python 代码在函数中运行得更快?

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:05 24 4
gpt4 key购买 nike

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

这段Python代码运行在(注:计时是用Linux中BASH中的time函数完成的。)

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

但是,如果 for 循环没有放置在函数内,

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

然后它运行的时间会更长:

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

这是为什么?

最佳答案

在函数内部,字节码是:

  2           0 SETUP_LOOP              20 (to 23)
3 LOAD_GLOBAL 0 (xrange)
6 LOAD_CONST 3 (100000000)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_FAST 0 (i)

3 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
>> 23 LOAD_CONST 0 (None)
26 RETURN_VALUE

在顶层,字节码是:

  1           0 SETUP_LOOP              20 (to 23)
3 LOAD_NAME 0 (xrange)
6 LOAD_CONST 3 (100000000)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 6 (to 22)
16 STORE_NAME 1 (i)

2 19 JUMP_ABSOLUTE 13
>> 22 POP_BLOCK
>> 23 LOAD_CONST 2 (None)
26 RETURN_VALUE

不同的是 STORE_FASTSTORE_NAME 更快(!) 。这是因为在函数中,i 是局部函数,但在顶层它是全局函数。

要检查字节码,请使用 dis module 。我能够直接反汇编该函数,但要反汇编顶级代码,我必须使用 compile builtin .

关于python - 为什么 Python 代码在函数中运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com