PHP
Python

Trang chủ

Trình thông dịch trong Python

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
14/01/2025
16 phút đọc
Theo dõi Vietnix trên

Trình thông dịch trong Python

Trình thông dịch đóng vai trò thiết yếu trong việc thực thi các dòng lệnh Python, chuyển đổi mã nguồn thành ngôn ngữ máy để máy tính có thể hiểu và thực thi. Với khả năng này, nhà phát triển có thể viết code một cách linh hoạt và trực tiếp. Bài viết này mình sẽ giúp bạn khám phá khái niệm cơ bản về trình thông dịch Python, cơ chế hoạt động cùng hai chế độ tương tác và kịch bản chính.

Trình thông dịch trong Python là gì?

Trình thông dịch (interpreter) trong Python là một chương trình đặc biệt, đóng vai trò như “người phiên dịch” trung gian giữa code mà bạn viết và máy tính. Thay vì dịch toàn bộ code thành một file thực thi duy nhất rồi mới chạy (như cách các ngôn ngữ biên dịch hoạt động), trình thông dịch Python sẽ dịch và thực thi từng dòng code một cách tuần tự.

Trình thông dịch trong Python có vai trò như "người phiên dịch" trung gian giữa code mà bạn viết và máy tính
Trình thông dịch trong Python có vai trò như “người phiên dịch” trung gian giữa code mà bạn viết và máy tính

Nói một cách đơn giản, khi bạn chạy một chương trình Python, trình thông dịch sẽ “đọc” từng dòng code, kiểm tra cú pháp, và thực hiện ngay dòng code đó trước khi chuyển sang dòng tiếp theo. Chính vì vậy, Python được gọi là một ngôn ngữ lập trình dựa trên trình thông dịch.

Trên các hệ thống Linux, bạn thường có thể tìm thấy trình thực thi của Python ở thư mục /usr/bin/. Trong khi đó, đối với hệ điều hành Windows, file thực thi python.exe sẽ nằm trong thư mục mà bạn đã cài đặt Python, ví dụ như C:\python311.

Cách trình thông dịch trong Python hoạt động

Python thực thi code theo phương pháp từng câu lệnh một (statement-at-a-time). Có nghĩa là Python sẽ “đọc” và thực hiện code của bạn theo thứ tự từ trên xuống dưới. Trình thông dịch Python có hai thành phần chính:

  • Bộ dịch (Translator): Thành phần này có nhiệm vụ kiểm tra cú pháp của từng câu lệnh. Nếu cú pháp đúng, bộ dịch sẽ tạo ra một mã byte trung gian.
  • Máy ảo Python (Python Virtual Machine): Mã byte trung gian này sẽ được chuyển đổi sang mã nhị phân (native binary) và thực thi bởi máy ảo Python.

Sơ đồ sau đây minh họa cách trình thông dịch trong Python hoạt động:

Sơ đồ minh họa cách trình thông dịch trong Python hoạt động
Sơ đồ minh họa cách trình thông dịch trong Python hoạt động

Trình thông dịch Python có hai chế độ hoạt động chính: chế độ tương tác và chế độ kịch bản.

Trình thông dịch Python – Chế độ tương tác

Khi bạn khởi chạy trình thông dịch Python từ dòng lệnh (command line) mà không có bất kỳ tùy chọn bổ sung nào, một dấu nhắc lệnh >>> sẽ xuất hiện. Lúc này, trình thông dịch Python sẽ hoạt động theo nguyên tắc REPL (Đọc, Đánh giá, In, Lặp). Cụ thể, mỗi câu lệnh mà bạn nhập vào trước dấu nhắc >>> sẽ được đọc, dịch và thực thi ngay lập tức.

Một phiên làm việc tương tác điển hình sẽ diễn ra như sau:

>>> price = 100
>>> qty = 5
>>> total = price * qty
>>> total
500
>>> print("Tổng = ", total)
Tổng =  500

Để kết thúc phiên làm việc tương tác, bạn có thể nhập ký tự kết thúc dòng (thường là Ctrl+D trên Linux và Ctrl+Z trên Windows). Ngoài ra, bạn cũng có thể nhập lệnh quit() trước dấu nhắc lệnh và nhấn Enter để quay trở lại dấu nhắc của hệ điều hành:

>>> quit()

$

Giao diện dòng lệnh tương tác (interactive shell) được cung cấp cùng với bản cài đặt Python tiêu chuẩn thường không có các tính năng nâng cao như chỉnh sửa dòng lệnh, tìm kiếm lịch sử lệnh, tự động hoàn thành (auto-completion),… Tuy nhiên, bạn có thể sử dụng các phần mềm thông dịch tương tác nâng cao khác như IPython hoặc bpython để có thêm các chức năng này.

Trình thông dịch Python – Chế độ kịch bản

Nếu như ở chế độ tương tác, bạn nhập từng lệnh một và nhận kết quả ngay lập tức, thì ở chế độ kịch bản, bạn có thể lưu một tập hợp các câu lệnh vào một file văn bản, đảm bảo file đó có phần mở rộng là .py. Sau đó, bạn dùng tên file này làm tham số dòng lệnh cho lệnh python.

Nói một cách dễ hiểu, chế độ kịch bản cho phép bạn viết sẵn code vào một file, sau đó “chạy” file đó như một chương trình.

Ví dụ, hãy lưu các dòng code sau vào một file có tên prog.py, bằng cách sử dụng một trình soạn thảo văn bản bất kỳ, như vim trên Linux hoặc Notepad trên Windows:

print ("Chương trình đầu tiên của tôi")
price = 100
qty = 5
total = price * qty
print ("Tổng cộng =", total)

Khi bạn chạy chương trình trên một máy tính Windows, kết quả sẽ như sau:

C:\Users\Acer>python prog.py
Chương trình đầu tiên của tôi
Tổng cộng = 500

Giải thích chi tiết:

  • Ở chế độ kịch bản, bạn tạo file .py (ví dụ: prog.py), file này sẽ chứa các câu lệnh Python bạn muốn thực thi.
  • Bạn chạy file này bằng cách sử dụng lệnh python prog.py (hoặc lệnh tương tự) trong cửa sổ dòng lệnh hoặc terminal.
  • Trình thông dịch Python sẽ đọc file prog.py, thực hiện các lệnh bên trong theo thứ tự, và in kết quả ra màn hình (nếu có).
  • Đoạn code trên tính toán một phép nhân đơn giản: price (giá) nhân qty (số lượng) để cho ra total (tổng cộng), và in kết quả ra.

Lưu ý: Mặc dù Python thực thi toàn bộ script một lần, nhưng về bản chất, code vẫn được thực hiện theo từng dòng một. Đây là một điểm khác biệt quan trọng so với các ngôn ngữ lập trình khác.

Trong các ngôn ngữ dựa trên trình biên dịch (compiler) như Java, code nguồn sẽ không được chuyển thành mã byte cho đến khi toàn bộ code không còn lỗi. Ngược lại, trong Python, các câu lệnh được thực thi cho đến khi gặp lỗi đầu tiên.

Để hiểu rõ hơn về điều này, hãy cố tình tạo ra một lỗi trong code ở ví dụ trước:

print ("Chương trình đầu tiên của tôi")
price = 100
qty = 5
total = prive * qty  # Lỗi ở dòng này: Biến 'prive' viết sai
print ("Tổng cộng =", total)

Lưu ý: biến prive đã bị viết sai chính tả, trong khi lẽ ra phải là price. Hãy thử chạy lại script như trước:

C:\Users\Acer>python prog.py
Chương trình đầu tiên của tôi
Traceback (most recent call last):
  File "C:\Python311\prog.py", line 4, in <module>
    total = prive * qty
            ^^^^^
NameError: name 'prive' is not defined. Did you mean: 'price'?

Bạn thấy rằng, các câu lệnh trước dòng có lỗi vẫn được thực thi bình thường, và sau đó thông báo lỗi mới xuất hiện. Điều này chứng minh rằng script Python được thực thi theo cách thông dịch.

Sử dụng Shebang #! với trình thông dịch trong Python

cho file script Python có khả năng tự thực thi (self-executable) như một shell script trên hệ điều hành Linux. Để làm được điều này, bạn cần thêm một dòng shebang ở đầu file script.

Dòng shebang cho biết trình thực thi nào sẽ được dùng để “dịch” (interpret) các câu lệnh Python trong script. Dòng đầu tiên của script phải bắt đầu bằng #!, theo sau là đường dẫn đến file thực thi của Python. Hãy sửa file prog.py như sau:

#! /usr/bin/python3.11

print ("Chương trình đầu tiên của tôi")
price = 100
qty = 5
total = price * qty
print ("Tổng cộng =", total)

Để đánh dấu file script này là tự thực thi được, bạn cần sử dụng lệnh chmod:

$ chmod +x prog.py

Giờ đây, bạn có thể thực thi script trực tiếp, mà không cần phải dùng nó làm tham số cho lệnh python nữa:

$ ./prog.py

Giải thích chi tiết:

  • Shebang #!: Dòng này không phải là code Python, mà là một chỉ thị đặc biệt cho hệ điều hành, để hệ điều hành biết dùng chương trình nào (ở đây là Python) để chạy script này.
  • #! /usr/bin/python3.11: Dòng này chỉ rõ rằng: dùng chương trình Python phiên bản 3.11 (nằm ở thư mục /usr/bin/) để thực thi file script này. Đường dẫn này có thể thay đổi tùy theo hệ thống của bạn.
  • chmod +x prog.py: Lệnh này giúp file prog.py có thêm quyền thực thi (+x), điều cần thiết để nó có thể chạy như một chương trình.
  • ./prog.py: Lệnh này dùng để chạy trực tiếp file script. ./ nghĩa là file prog.py nằm ở thư mục hiện tại.

IPython – Môi trường tương tác Python nâng cao

IPython (viết tắt của Interactive Python) là một môi trường tương tác mạnh mẽ và được nâng cấp dành cho Python. So với trình thông dịch Python tiêu chuẩn, IPython mang đến nhiều tính năng vượt trội, giúp cho việc làm việc với Python trở nên hiệu quả và trực quan hơn. IPython được phát triển lần đầu tiên bởi Fernando Perez vào năm 2001.

IPython sở hữu những tính năng nổi bật sau:

  • Khả năng tự kiểm tra đối tượng (object introspection): IPython cho phép bạn kiểm tra các thuộc tính của một đối tượng ngay trong quá trình chạy chương trình. Tính năng này rất hữu ích để gỡ lỗi (debug) và khám phá các đối tượng trong Python.
  • Tô sáng cú pháp (syntax highlighting): IPython làm nổi bật các thành phần khác nhau trong code Python (như từ khóa, biến, hàm), giúp bạn dễ dàng nhận biết và tránh các lỗi chính tả.
  • Lưu trữ lịch sử tương tác: Tất cả các lệnh bạn đã nhập trước đó trong IPython đều được lưu lại. Bạn có thể dễ dàng xem lại và sử dụng lại chúng.
  • Tự động hoàn thành bằng phím Tab: Khi gõ lệnh, bạn có thể nhấn phím Tab để IPython tự động hoàn thành các từ khóa, tên biến, hay tên hàm. Đây là một tính năng cực kỳ hữu ích giúp tiết kiệm thời gian và tránh sai sót khi gõ code.
  • Hệ thống lệnh “Magic”: IPython có một hệ thống các lệnh “magic” đặc biệt, cho phép bạn điều khiển môi trường Python và thực hiện các tác vụ của hệ điều hành một cách dễ dàng.
  • Là nhân chính cho Jupyter Notebook: IPython đóng vai trò là “trái tim” của Jupyter Notebook và các công cụ giao diện người dùng khác trong dự án Jupyter.

Bạn có thể cài đặt IPython một cách dễ dàng bằng công cụ pip, đây là một trình quản lý gói phổ biến trong Python:

pip3 install ipython

Khởi động IPython từ dòng lệnh:

C:\Users\Admin>ipython
Python 3.12.3 (tags/v3.12.3:f6650f9, Apr  9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.26.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

Thay vì dấu nhắc >>> thông thường như ở trình thông dịch Python tiêu chuẩn, IPython sử dụng hai loại dấu nhắc đặc trưng:

  • In [1]: xuất hiện trước bất kỳ biểu thức nhập nào.
  • Out[1]: xuất hiện trước kết quả trả về của biểu thức đó.

Bạn có thể nhập các lệnh sau:

In [1]: price = 100

In [2]: quantity = 3

In [3]: total = price*quantity

In [4]: total
Out[4]: 300

In [5]:

Tính năng gợi ý lệnh bằng phím Tab là một trong những cải tiến hữu ích nhất của IPython. Khi bạn nhập một đối tượng rồi gõ dấu chấm . và nhấn phím Tab, IPython sẽ hiển thị danh sách các phương thức và thuộc tính có thể sử dụng của đối tượng đó.

IPython cho phép bạn dễ dàng tìm hiểu thông tin (introspection) về bất kỳ đối tượng nào bằng cách đặt dấu ? ở trước đối tượng đó. Thông tin này bao gồm chuỗi tài liệu (docstring), định nghĩa hàm, và chi tiết về hàm khởi tạo của lớp. Ví dụ, để khám phá đối tượng chuỗi var đã được định nghĩa trước đó, nhập vào dấu nhắc:

In [5]: var = "Hello Vietnix"

In [6]: var?
Type:        str
String form: Hello Vietnix
Length:      13
Docstring:
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.

Các lệnh “magic” của IPython là một công cụ vô cùng mạnh mẽ. Các lệnh “magic” dòng (line magics) cho phép bạn thực thi các lệnh của hệ điều hành DOS ngay bên trong IPython. Ví dụ, chúng ta có thể chạy lệnh dir để liệt kê các file .exe trong thư mục hiện tại:

In [7]: !dir *.exe
 Volume in drive C has no label.
 Volume Serial Number is AEFC-7F88

 Directory of C:\Users\Admin

File Not Found

Hoặc:

In [8]: %ls
 Volume in drive C has no label.
 Volume Serial Number is AEFC-7F88

 Directory of C:\Users\Admin

07/16/2024  11:40 PM    <DIR>          .
07/05/2024  11:58 AM    <DIR>          ..
05/21/2024  10:04 AM    <DIR>          .cache
06/19/2024  07:14 PM    <DIR>          .config
07/11/2024  11:44 PM    <DIR>          .docker
05/25/2024  12:00 AM                20 .erlang.cookie
06/12/2024  12:03 AM               157 .gitconfig
06/12/2024  02:54 PM                53 .git-for-windows-updater
07/16/2024  11:40 PM    <DIR>          .ipython
06/27/2024  09:25 AM                20 .lesshst
06/09/2024  01:25 PM    <DIR>          .m2
05/21/2024  10:04 AM    <DIR>          .redhat
05/14/2024  09:18 PM    <DIR>          .vscode
06/14/2024  09:53 PM                32 .vuerc
05/18/2024  11:37 AM    <DIR>          .wdm
07/05/2024  11:55 AM    <DIR>          build
05/14/2024  08:30 PM    <DIR>          Contacts
07/12/2024  03:00 AM    <DIR>          Desktop
07/05/2024  11:59 AM    <DIR>          dist
05/29/2024  09:30 AM    <DIR>          Documents
07/16/2024  11:36 PM    <DIR>          Downloads
06/11/2024  01:07 AM         4,364,483 erl_crash.dump
05/14/2024  08:30 PM    <DIR>          Favorites
05/14/2024  08:30 PM    <DIR>          Links
07/05/2024  10:59 PM               109 log.txt
05/14/2024  08:30 PM    <DIR>          Music
05/14/2024  08:32 PM    <DIR>          OneDrive
05/17/2024  08:48 AM    <DIR>          Pictures
05/31/2024  03:34 PM    <DIR>          Postman
05/14/2024  08:30 PM    <DIR>          Saved Games
05/14/2024  06:45 PM    <DIR>          Searches
07/10/2024  11:55 AM    <DIR>          Videos
               7 File(s)      4,364,874 bytes
              25 Dir(s)  202,362,871,808 bytes free

Jupyter Notebook là một giao diện dựa trên web để sử dụng các môi trường lập trình như Python, Julia, R và nhiều ngôn ngữ khác. Với Python, Jupyter Notebook sử dụng IPython làm kernel (lõi) chính của nó.

Lời kết

Qua bài viết này, bạn đã nắm được những kiến thức quan trọng và vai trò của trình thông dịch Python. Hy vọng điều này sẽ giúp bạn hiểu sâu hơn về quá trình thực thi code, từ đó ứng dụng một cách hiệu quả trong các bài toán lập trình của mình. Đừng ngần ngại thử nghiệm và khám phá thêm về những điều thú vị mà Python mang lại nhé!

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn