日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中函数提高代码执行速度吗_为什么Python代码在一个函数中运行得更快?

發布時間:2024/9/19 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中函数提高代码执行速度吗_为什么Python代码在一个函数中运行得更快? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匿名用戶

除了局部/全局變量存儲時間外,操作碼預測使函數更快。

正如其他答案所解釋的,該函數在循環中使用store_fast操作碼。下面是函數循環的字節碼:>> 13 FOR_ITER 6 (to 22) # get next value from iterator

16 STORE_FAST 0 (x) # set local variable

19 JUMP_ABSOLUTE 13 # back to FOR_ITER

通常,當程序運行時,Python會一個接一個地執行每個操作碼,跟蹤a堆棧,并在每個操作碼執行后對堆棧幀進行其他檢查。操作碼預測意味著在某些情況下,Python能夠直接跳轉到下一個操作碼,從而避免了一些開銷。

在這種情況下,每次Python看到for_iter(循環的頂部)時,它都會“預測”store_fast是它必須執行的下一個操作碼。然后,Python查看下一個操作碼,如果預測正確,則直接跳到store_fast。這具有將兩個操作碼壓縮為單個操作碼的效果。

另一方面,store_name操作碼在全局級別的循環中使用。當Python看到這個操作碼時,它不會做出類似的預測。相反,它必須返回到計算循環的頂部,這對循環的執行速度有明顯的影響。

為了給出有關這種優化的更多技術細節,下面引用ceval.c文件(Python虛擬機的“引擎”):

有些操作碼傾向于成對出現,因此當第一個代碼運行時,可以預測第二個代碼。例如,get_iter后面經常跟著for_iter。而且for_iter后面通常是store_fast或unpack_sequence。

驗證預測需要對寄存器變量進行一次針對常數的高速測試。如果配對良好,那么處理器自己的內部分支預測成功的可能性很高,從而導致幾乎零開銷地過渡到下一個操作碼。一個成功的預測節省了通過eval-loop(包括它的兩個不可預測分支,has_arg測試和開關情況)的行程。與處理器的內部分支預測相結合,成功的predict具有使兩個操作碼運行的效果,就像它們是一個單獨的帶有主體組合的新操作碼一樣。

我們可以在for_iter操作碼的源代碼中看到預測store_fast的確切位置:case FOR_ITER: // the FOR_ITER opcode case

v = TOP();

x = (*v->ob_type->tp_iternext)(v); // x is the next value from iterator

if (x != NULL) {

PUSH(x); // put x on top of the stack

PREDICT(STORE_FAST); // predict STORE_FAST will follow - success!

PREDICT(UNPACK_SEQUENCE); // this and everything below is skipped

continue;

}

// error-checking and more code for when the iterator ends normally

如果(*next_instr==op)轉到pred_##op,則predict函數將擴展為,即跳轉到預測操作碼的開始。在這種情況下,我們跳到這里:PREDICTED_WITH_ARG(STORE_FAST);

case STORE_FAST:

v = POP(); // pop x back off the stack

SETLOCAL(oparg, v); // set it as the new local variable

goto fast_next_opcode;

現在設置了局部變量,下一個操作碼開始執行。Python繼續通過迭代程序,直到它到達最后,每次都成功地進行預測。

Python wiki頁面有更多關于CPython虛擬機如何工作的信息。

總結

以上是生活随笔為你收集整理的python中函数提高代码执行速度吗_为什么Python代码在一个函数中运行得更快?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。