在 Visual Studio Code 中執行 Python 程式碼
無論你是在 REPL 中試驗較短的 Python 程式碼,還是準備執行一個 Python 指令碼,Python 擴充套件都提供了多種執行程式碼的方式。
以互動方式執行 Python 程式碼
安裝在計算機上的 Python 直譯器為你提供了一個稱為互動式 REPL(Read-Evaluate-Print Loop,讀取-求值-列印迴圈)的工具,它會讀取一段程式碼,對其求值,然後將結果列印到控制檯。
在你的計算機上安裝 Python 直譯器後,你可以透過開啟系統的終端或命令提示符,然後輸入 python
(Windows) 或 python3
(macOS/Linux) 來啟用 Python REPL(以 >>>
標記),從而與 Python REPL 互動。
在 VS Code 中,還有另外兩種與 Python REPL 互動的方式。
原生 REPL
VS Code 的 Python 原生 REPL 構建於經典的 Python REPL 之上,並提供了額外的功能,如 Intellisense(智慧感知)和語法高亮,使你的 Python 開發體驗更加高效。然而,這個 REPL 仍然遵循 Python 內建 REPL 的原則,即歷史執行順序及其內容是不可變的。
你可以透過命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 搜尋 Python: Start Native REPL (Python: 啟動原生 REPL) 來開啟原生 REPL。此外,你可以在你的 settings.json
檔案中設定 "python.REPL.sendToNativeREPL": true
,透過智慧傳送 (Shift+Enter) 和 Run Selection/Line in Python REPL (在 Python REPL 中執行選中內容/行) 將程式碼傳送到原生 REPL。你也可以選擇在 settings.json
中設定 "python.REPL.sendToNativeREPL": false
,繼續使用位於終端中的 Python 內建 REPL (>>>
)。
終端 REPL
與在 VS Code 之外與 Python REPL 互動的方式類似,你可以在 VS Code 中開啟一個終端並激活 Python REPL。為此,你可以在命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中搜索 Python: Start Terminal REPL (Python: 啟動終端 REPL),這將為當前選擇的 Python 直譯器開啟一個終端。或者,你也可以導航到 Terminal > New Terminal (終端 > 新建終端) 並輸入 python
(Windows) 或 python3
(macOS/Linux) 命令。
透過終端 Shell 整合,終端支援許多功能,例如執行最近的命令、命令修飾符和改進的可訪問性。要在終端中啟用或停用 Shell 整合,你可以在設定中切換 python.terminal.shellIntegration.enabled。
執行 Python 程式碼
Python 擴充套件提供了多種無需額外配置即可執行 Python 程式碼的方式。
-
選擇編輯器右上角的 Run Python File in Terminal (在終端中執行 Python 檔案) 播放按鈕。
該按鈕會開啟一個終端面板,其中你的 Python 直譯器會自動啟用,然後執行指定的指令碼(例如,
python3 hello.py
(macOS/Linux) 或python hello.py
(Windows))。 -
在編輯器視窗的任意位置右鍵單擊,然後選擇 Run > Python File in Terminal (執行 > 在終端中執行 Python 檔案)(這會自動儲存檔案)。
-
選擇一行或多行,然後按 Shift+Enter,或右鍵單擊並選擇 Run Selection/Line in Python Terminal (在 Python 終端中執行選中內容/行)。
此選項對於僅測試檔案的一部分非常方便。
-
將游標放在一行程式碼上,然後按 Shift+Enter 啟用智慧傳送。
智慧傳送
Python 擴充套件預設啟用智慧傳送 (Shift+Enter)。智慧傳送會檢視游標所在位置的程式碼,將最小的可執行程式碼塊傳送到 Python REPL,然後將游標移動到下一行程式碼。這使你能夠輕鬆高效地執行程式中的 Python 程式碼。
智慧傳送在不支援的 Python 版本(例如 Python 2)或無效的 Python 程式碼上將不起作用。要停用智慧傳送,改為僅傳送游標所在行的程式碼,請將 python.REPL.enableREPLSmartSend
設定為 false
。