Khóa học
Không giống các ngôn ngữ biên dịch như C++ hoặc Java, cần được dịch sang mã máy trước khi thực thi, Python được thông dịch và chạy trực tiếp các lệnh. Điều này khiến môi trường REPL trở thành lựa chọn tự nhiên để thử nghiệm, dù bạn đang kiểm thử các đoạn mã ngắn, khám phá khái niệm mới, hay gỡ lỗi từng dòng. Lợi thế của nó là được tích hợp sẵn trong mọi bản cài đặt Python, nên luôn sẵn sàng khi bạn cần.
Trong hướng dẫn này, tôi sẽ trình bày cách sử dụng môi trường Python REPL thông qua ví dụ, khám phá các tính năng của nó, và các REPL thay thế để cải thiện quy trình làm việc. Nếu bạn mới bắt đầu với Python, tôi khuyến nghị bạn học khóa Giới thiệu về Python, khóa này đề cập đến các kỹ năng như kiểu dữ liệu, danh sách, các hàm cơ bản và gói.
Python REPL là gì?
Phiên REPL là viết tắt của Read-Eval-Print Loop, mô tả bốn giai đoạn cơ bản của nó:
- Read: Môi trường REPL đọc đầu vào của người dùng, có thể là một dòng mã hoặc một câu lệnh nhiều dòng.
- Evaluate: Đánh giá mã, thực thi câu lệnh hoặc biểu thức và tính toán kết quả.
- Print: Chức năng này in kết quả đánh giá ra console. Nếu mã không tạo đầu ra, như một câu lệnh gán, thì sẽ không in gì.
- Loop: REPL lặp lại về đầu, sẵn sàng cho dòng đầu vào tiếp theo.
Các giai đoạn này hoạt động liên tục cùng nhau, tạo nên môi trường tương tác nơi bạn có thể gõ mã và xem kết quả ngay lập tức. REPL của Python hiển thị dấu nhắc chính >>> cho các câu lệnh mới và dấu nhắc phụ ... cho các dòng tiếp theo, như bên trong vòng lặp hoặc định nghĩa hàm. Với các ví dụ ở những phần dưới, chúng ta sẽ xem các dấu nhắc này hoạt động thế nào.
Các thuật ngữ "shell tương tác", "phiên trình thông dịch" và "REPL" thường được dùng thay thế cho nhau để mô tả môi trường này.
Tại sao nên dùng Python REPL
Bạn có thể dùng Python REPL cho các tác vụ sau:
Kiểm thử nhanh các đoạn mã và hàm thư viện: Bạn có thể thử ngay các đoạn mã nhỏ mà không cần tạo tệp script.
>>> import math
>>> math.sqrt(16)
4.0
Khám phá cú pháp và thử nghiệm ý tưởng: Hãy coi môi trường REPL như hộp cát cá nhân của bạn. Bạn có thể thử những điều mới như các kiểu dữ liệu, toán tử và cấu trúc điều khiển khác nhau để xem chúng hoạt động ra sao mà không lo làm hỏng một chương trình lớn hơn.
>>> [x**2 for x in range(5)]
[0, 1, 4, 9, 16]
Gỡ lỗi và kiểm tra biến: Bạn có thể dùng phiên REPL để kiểm tra giá trị và trạng thái của các biến theo từng bước, giúp dễ hiểu và xử lý sự cố hơn nhiều.
>>> x = 42
>>> type(x)
<class 'int'>
>>> x / 7
6.0
Dùng như máy tính hoặc công cụ học tập: Kết quả tức thì khiến nó hữu ích để thực hiện phép tính hoặc học các kiến thức cơ bản về Python.
>>> 10 * (5 + 2)
70
Cách bắt đầu và thoát một phiên REPL
Để bắt đầu một phiên Python REPL, mở terminal hoặc command prompt. Sau đó gõ python hoặc python3, rồi nhấn Enter. Thao tác này khởi chạy shell tương tác.
Bạn cũng có thể bắt đầu một phiên tương tác sau khi chạy script bằng cờ -i. Ví dụ, python -i calc_tax.py sẽ thực thi calc_tax.py rồi đưa bạn vào môi trường REPL với các biến của script vẫn còn trong bộ nhớ.
Để thoát REPL, bạn có thể dùng một trong các lệnh sau:
-
Gõ
quit()hoặcexit()rồi nhấn Enter. -
Trên Unix/Linux/macOS, nhấn Ctrl+D.
-
Trên Windows, nhấn Ctrl+Z rồi nhấn Enter.
Chạy mã trong môi trường REPL
Bạn có thể chạy mã trong các phiên REPL của Python theo nhiều cách tùy độ phức tạp. Hãy xem các loại mã sau mà bạn có thể chạy trong REPL.
Câu lệnh và biểu thức đơn giản
Môi trường REPL có thể đánh giá ngay các biểu thức và câu lệnh đơn giản. Ví dụ, bạn có thể thực hiện phép toán số học, gán biến và đánh giá biểu thức Boolean. Kết quả của một biểu thức sẽ được in tự động.
>>> 5 + 4
9
>>> name = "Allan"
>>> name
'Allan'
>>> 10 > 5
TrueNếu một câu lệnh, như gán biến, không tạo đầu ra, trình thông dịch REPL sẽ không in gì. Nếu bạn mắc lỗi, REPL sẽ phản hồi ngay bằng cách báo lỗi.
Câu lệnh phức hợp
Môi trường Python REPL cũng xử lý các câu lệnh phức hợp nhiều dòng như câu lệnh if và vòng lặp for. Nó tự động chuyển sang dấu nhắc phụ (...) sau khi bạn gõ một dòng kết thúc bằng dấu hai chấm (:) và nhấn Enter, cho biết nó đang chờ khối mã thụt dòng.
Lưu ý bạn cần tự thụt dòng mã của mình; môi trường REPL không tự động thụt dòng. Để báo hiệu kết thúc câu lệnh phức hợp, nhấn Enter trên một dòng trống.
Nối dòng tường minh và ngầm định
Bạn cũng có thể viết các câu lệnh nhiều dòng trong phiên Python REPL bằng cách nối dòng. Nối dòng tường minh dùng ký tự gạch chéo ngược \ ở cuối dòng để chỉ ra câu lệnh tiếp tục ở dòng sau.
Nối dòng ngầm định xảy ra tự động khi mã được đặt trong dấu ngoặc tròn (), ngoặc vuông [] hoặc ngoặc nhọn {}.
In ra vs đánh giá
Tính năng tự in của REPL chỉ hoạt động với các biểu thức có giá trị trả về. Ví dụ, nếu bạn có một danh sách và thêm phần tử bằng temp.append(45), sẽ không có đầu ra nào. Để xem danh sách mới, bạn cần đánh giá tường minh biến danh sách ở dòng tiếp theo. Với các hàm trả về None, bạn cần dùng print() để xem đầu ra của chúng.
Các tính năng hữu ích của REPL
Môi trường Python REPL có một số tính năng tích hợp giúp sử dụng và học tập hiệu quả hơn. Tôi sẽ bàn về một số tính năng hữu ích mà tôi đã sử dụng.
Biến đặc biệt _
Dấu gạch dưới (_) là một biến đặc biệt trong phiên REPL, lưu kết quả của biểu thức gần nhất. Điều này hữu ích khi bạn muốn tái sử dụng kết quả mà không cần gõ lại.
Trong ví dụ dưới đây, _ lưu giá trị 30, là kết quả của biểu thức 6*5.
Công cụ phản tỉnh
Python cung cấp một số hàm tích hợp để khám phá tương tác các đối tượng và môi trường của bạn. Bảng dưới tóm tắt mục đích của mỗi hàm kèm ví dụ.
|
Công cụ |
Mục đích |
Ví dụ |
|
|
Trả về danh sách tất cả tên (thuộc tính và phương thức) trong phạm vi cục bộ hiện tại hoặc của một đối tượng chỉ định. |
|
|
|
Khởi chạy hệ thống trợ giúp tích hợp cho đối tượng, module hoặc hàm, hiển thị tài liệu (docstring) của nó. |
|
|
|
Trả về thuộc tính |
|
|
|
Trả về một từ điển biểu diễn bảng ký hiệu cục bộ hiện tại (các biến trong phạm vi hiện tại). |
|
|
|
Trả về một từ điển biểu diễn bảng ký hiệu toàn cục hiện tại (các biến truy cập được ở mọi nơi). |
|
Lịch sử mã và hoàn thành bằng Tab
REPL tăng tốc việc viết mã với các tính năng lịch sử và tự động hoàn thành sau:
- Lịch sử mã: Bạn có thể di chuyển qua các lệnh đã nhập trước đó bằng phím Mũi tên Lên và Mũi tên Xuống. Điều này cho phép nhanh chóng chạy lại, sửa đổi hoặc chỉnh sửa các dòng trước.
- Hoàn thành bằng Tab: Hỗ trợ hoàn thành tên biến, tên module và thuộc tính đối tượng. Ví dụ, gõ
imporrồi nhấn Tab sẽ tự động hoàn thành thànhimport, hoặc gõstr..rồi Tab sẽ liệt kê các phương thức của chuỗi.
Phím tắt
Dưới đây là một số phím tắt phổ biến giúp điều hướng REPL hiệu quả hơn.
|
Phím tắt |
Hành động |
|
Ctrl+C |
Ngắt lệnh đang chạy, ví dụ một vòng lặp dài, và phát sinh |
|
Ctrl+D (Unix) |
Thoát REPL (tương tự |
|
Ctrl+Z + Enter (Win) |
Thoát REPL |
|
Ctrl+L |
Xóa màn hình (như lệnh |
|
Mũi tên Lên / Xuống |
Duyệt lịch sử lệnh |
|
Ctrl+A |
Di chuyển con trỏ về đầu dòng |
|
Ctrl+E |
Di chuyển con trỏ về cuối dòng |
|
Ctrl+K |
Xóa từ vị trí con trỏ đến cuối dòng |
|
Ctrl+U |
Xóa từ vị trí con trỏ đến đầu dòng |
Tùy biến REPL
REPL chuẩn của Python có thể được tùy biến để phù hợp với quy trình làm việc và sở thích của bạn.
Tệp khởi động
Thiết lập biến môi trường PYTHONSTARTUP trỏ đến đường dẫn một script Python chạy tự động mỗi khi REPL khởi động. Script này có thể nhập sẵn các module thường dùng, định nghĩa hàm, hoặc thay đổi chuỗi dấu nhắc.
Ví dụ, tạo tệp ~/.pystartup với nội dung sau:
import sys, os, math, random
print("Custom REPL ready. Pre-imported: sys, os, math, random")
# Change the prompt strings
import sys
sys.ps1 = ">>> "
sys.ps2 = "... "
Nếu bạn dùng Windows, bạn có thể thiết lập biến môi trường bằng lệnh sau:
setx PYTHONSTARTUP "C:\path\to\pystartup.py"
Đầu ra phong phú với rich
Bạn có thể dùng thư viện rich để tăng cường và tô màu đầu ra trong REPL. Trước tiên cần cài module rich qua pip.
pip install rich
Sau đó bật rich bằng cách import và sử dụng trong các phiên Python REPL. Trong ví dụ dưới, tôi dùng thư viện để in từ với các màu chữ khác nhau.

Các lệnh REPL ví dụ để thử
Như bạn thấy, phiên REPL của Python rất dễ sử dụng. Hãy thử các lệnh sau để luyện tập kỹ năng
|
Lệnh |
Mục đích |
Đầu ra/Miêu tả |
|
|
Phản tỉnh: Xem tất cả phương thức và thuộc tính khả dụng trên kiểu dựng sẵn |
|
|
|
Tài liệu: Hiển thị docstring cho phương thức append của đối tượng list, giải thích cách nó hoạt động. |
Mô tả chi tiết về |
|
|
Nhập một module: Tải thư viện chuẩn |
Không có đầu ra (nhưng module đã sẵn sàng). |
|
|
Tính toán: Lấy giá trị π. |
|
|
|
Tính toán: Tính sin(π/2). |
|
|
|
Thử nhanh: Chọn ngẫu nhiên một phần tử từ danh sách. |
|
|
|
Xử lý lỗi/Thoát: Bắt đầu một vòng lặp vô hạn, sau đó nhấn Ctrl+C để ngắt và thoát. |
|
Hạn chế của môi trường REPL chuẩn
Mặc dù môi trường REPL chuẩn của Python rất tuyệt cho các tác vụ nhanh, nó thường bị hạn chế so với một IDE hiện đại. Bạn sẽ nhanh chóng nhận ra một vài tính năng còn thiếu, bao gồm:
- Không tô sáng cú pháp: Tất cả mã của bạn hiển thị dưới dạng văn bản thuần. Điều này gây khó phân biệt nhanh các từ khóa, chuỗi và chú thích, buộc bạn phải đọc kỹ.
- Tự động thụt dòng tối thiểu: Mặc dù nó xử lý dấu nhắc tiếp tục (
...), bạn phải tự nhập đúng thụt dòng cho các câu lệnh phức hợp như khối if và for. - Hoàn thành mã cơ bản: Tính năng hoàn thành bằng tab tích hợp có hoạt động nhưng không cung cấp gợi ý theo ngữ cảnh, tài liệu nội tuyến, hoặc tìm mờ như các shell nâng cao.
- Chỉnh sửa nhiều dòng kém: Việc chỉnh sửa các khối mã phức tạp, nhiều dòng khá vất vả.
- Khi một khối đã được gửi, không thể dễ dàng chỉnh sửa hoặc gọi lại từ lịch sử.
Các REPL thay thế
Để vượt qua các hạn chế trên của trình thông dịch chuẩn, một số REPL và môi trường nâng cao xây dựng trên mô hình tương tác của Python cung cấp thêm các tính năng cải thiện năng suất và học tập. Tôi khuyến nghị thử bất kỳ lựa chọn nào dưới đây để tìm công cụ phù hợp với nhu cầu của bạn.
- IDLE: Môi trường Python dựa trên GUI đơn giản đi kèm với chính Python. Cung cấp tô sáng cú pháp, trình soạn thảo tích hợp và trình gỡ lỗi, thân thiện với người mới bắt đầu.
- IPython: REPL mạnh mẽ với hoàn thành bằng tab phong phú, tô sáng cú pháp, lệnh magic (các lệnh đặc biệt bắt đầu bằng %), lịch sử mở rộng và truy cập dễ dàng đến lệnh hệ thống. Được dùng rộng rãi trong khoa học dữ liệu và tính toán khoa học.
- bpython: REPL chạy trong terminal với tô sáng cú pháp nội dòng, gợi ý tự động và truy cập nhanh tài liệu. Nhẹ nhưng tăng đáng kể tính hữu dụng so với REPL mặc định.
- ptpython: Dành cho người dùng có kinh nghiệm, đây là REPL nâng cao với các tính năng như chỉnh sửa nhiều dòng thực sự, tô sáng cú pháp mạnh và thậm chí hỗ trợ chuột, giúp bạn kiểm soát tốt hơn trong terminal.
- REPL trực tuyến: Các môi trường dựa trên trình duyệt như shell tương tác của Python.org và Python Morsels REPL rất phù hợp cho thử nghiệm nhanh, chia sẻ mã hoặc luyện tập khi đang di chuyển.
Kết luận
Phiên Python REPL cung cấp môi trường tương tác, nhanh chóng để thử nghiệm mã, khiến nó trở nên vô giá cho việc kiểm thử, học tập và khám phá ý tưởng. Làm chủ các tính năng tích hợp của nó sẽ cho bạn một công cụ mạnh mẽ cho các tác vụ lập trình hằng ngày. Với các quy trình phức tạp hơn hoặc tính tiện dụng được nâng cao, thử nghiệm các REPL thay thế cũng có thể cải thiện trải nghiệm mã hóa tương tác.
Để hiểu rõ hơn về Python, bạn có thể học thêm từ các lộ trình kỹ năng Nền tảng Dữ liệu với Python và Nền tảng Lập trình Python. Phiếu gợi ý Python cho người mới bắt đầu cũng rất hữu ích khi bạn muốn xem nhanh cách tách một danh sách trong Python.
Câu hỏi thường gặp
Làm thế nào để khởi động Python REPL?
Mở terminal và gõ python hoặc python3, tùy hệ thống của bạn.
Làm thế nào để thoát REPL?
Gõ quit() hoặc exit(), hoặc dùng Ctrl+D trên Unix hoặc Ctrl+Z + Enter trên Windows.
Sự khác biệt giữa REPL và chạy script là gì?
REPL chạy mã tương tác từng dòng, trong khi script thực thi toàn bộ mã trong một tệp cùng lúc.
Biến _ trong REPL là gì?
_ giữ kết quả của biểu thức vừa được đánh giá gần nhất để bạn có thể tái sử dụng nhanh.
Dấu nhắc >>> và ... là gì?
>>> là dấu nhắc chính còn ... là dấu nhắc phụ cho đầu vào nhiều dòng.
