#更2021/09/14
感谢各位大大的支援
详细可以看sooge大的那篇文
for i in range()
如果是包在function里
那个i 会使用 STORE_FAST
当执行到FOR_ITER时
会预测下一个指令为STORE_FAST
所以会直接peek到再下一个opcode
但 STORE_NAME 不会
包在function里
STORE_FAST
https://i.imgur.com/yNTNuHN.jpg
如果没包的话会是用 STORE_NAME
https://i.imgur.com/8ml1USm.jpg
图中的TOS是 Top-of-stack
==============================
如题
我想知道在function内外执行速度上会不好有差异
func()是随便写的
然后for循环重复执行func()
一支程式是直接写在外面执行
另一支是写一个main() function去执行
直接在外面执行
https://i.imgur.com/wxDf04N.jpg
写在main()去执行
https://i.imgur.com/RxNR7wP.jpg
执行后发现是写在main()里的执行的比较快
https://i.imgur.com/x9S8rez.jpg
我想请问为什么会有这个速度上的差别
我猜测是因为range(10000000)
我有 print( id(10000000))
我发现那个1000000是有内存位置的
所以是因为那个10000000如果写在main里会是local变量
而local变量读取比较快
是这样吗?
只测一次不准,而且要用time.perf_counter比较精确
我测满多次了,差不多都是这个数字time.perf_counter 我在试试看!感谢
看不出来有啥差 不过一般来说存取local是会比global快可以用dis.dis看一下指令长怎样
作者:
pmove (金疾柠檬)
2021-09-14 17:15:00我自己实测也是类似原po的结果,但不知道主因是啥?
测试了一下 包在function for的i对应指令是STORE_FAST没包成function for的i指令是STORE_NAME 应该是差在这还有call function时 包-LOAD_GLOBAL 不包-LOAD_NAME实际状况可能要请其他人补充 因为我也只是猜测
作者:
sooge (老衲)
2021-09-14 18:52:00作者: jeff082 2021-09-19 17:33:00
10000000 当然有内存位置啊,python里的一切都是物件