Python 直譯器基類


Python 的互動模式基於 REPL (讀取-求值-列印-迴圈) 原理。Python 標準庫中的 `code` 模組提供了一些類和便捷函式,用於在 Python 指令碼中設定 REPL 環境。

`code` 模組中定義了以下兩個類:

`InteractiveInterpreter`:此類處理解析和直譯器狀態(使用者的名稱空間)。

`InteractiveConsole`: 緊密模擬互動式 Python 直譯器的行為。

模組中的兩個便捷函式是:

`interact()`:執行讀取-求值-列印迴圈的便捷函式。

`compile_command()`:此函式對於想要模擬 Python 直譯器主迴圈(REPL)的程式很有用。

互動式直譯器方法

`runsource()`:編譯並在直譯器中執行一些原始碼。

`runcode()`:執行程式碼物件。

互動式控制檯方法

因為 `InteractiveConsole` 類是 `InteractiveInterpreter` 的子類,所以上述方法會自動可用。此外,還定義了以下方法:

`interact()`:緊密模擬互動式 Python 控制檯。

`push()`:將一行源文字推送到直譯器。

`resetbuffer()`:從輸入緩衝區中移除任何未處理的源文字。

`raw_input(prompt="")`

預設情況下,從 `sys.stdin` 寫入提示並讀取一行。

示例

import code
x = 10
y = 20
def add(x,y):
   return x+y
print (add(x,y))
code.interact(local=locals())
print (x,y)
print (add(x,y))

在上面的程式碼中,定義了兩個變數並將其傳遞給一個函式。然後我們呼叫互動式控制檯。引數 `local=locals()` 允許使用區域性名稱空間作為直譯器迴圈中的預設名稱空間。

如果為變數賦值不同的值並透過按 Ctrl+D 退出控制檯,則這些值現在將傳遞給函式。

輸出

addition= 30
Python 3.6.6 |Anaconda custom (64-bit)| (default, Oct 9 2018, 12:34:16)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> x=100
>>> y=200
>>>

now exiting InteractiveConsole...
100 200
addition = 300

更新於:2019-07-30

396 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.