簡體   English   中英

為什么Python的CONTINUE_LOOP允許外部循環,而BREAK_LOOP不允許?

[英]Why does Python's CONTINUE_LOOP allow an outer loop, when BREAK_LOOP doesn't?

我注意到Python的字節碼在這里有一個有趣的特點。

CONTINUE_LOOP操作碼接受一個target參數,該參數表示循環繼續執行的指令,這是FOR_ITER指令。

但是, BREAK_LOOP操作碼不會這樣做。 它只會突破當前(最里面)的循環。

這背后的原因是什么? 為什么要continue但不能break外循環?

你誤解了目標。 處理嵌套循環不需要該值。 相反,目標標記字節碼流中的點在指令之后移動到。 BREAK不需要這樣的目標,因為該值已在其他地方定義。

BREAK_LOOP結束循環,因此循環繼續執行。 SETUP_LOOP指令已經定義了端點,因此解釋器不需要任何附加信息來執行該操作碼。

另一方面, CONTINUE_LOOP需要告知在哪里繼續。 在大多數循環中,使用JUMP_ABSOLUTE操作碼CONTINUE_LOOP在此處回顯該指令。 CONTINUE_LOOP記錄更多信息來處理try語句(跟蹤堆棧展開)。

在評估循環中,異常處理( try: ... except:try : ... finally:以及上下文管理器( with ...:async with ...:使用框架的通用概念 ,具有為其記錄的出口點,這是BREAK_LOOP指令依賴於此處的內容。 不必跟蹤偏移量就這樣簡單,避免了編譯器和評估循環不得不重復(退出點也用於其他場景,而不僅僅是break語句)。

但是跳轉更通用,因此它們的偏移更容易跟蹤與指令本身相關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM