Python Interpreter and Its Modes

Python Interpreter

Python là một ngôn ngữ dựa trên trình thông dịch. Trong hệ thống Linux, tệp thực thi của Python được cài đặt trong thư mục /usr/bin/ . Đối với Windows, tệp thực thi (python.exe) được tìm thấy trong thư mục cài đặt (ví dụ C:\python311 ).

Hướng dẫn này sẽ dạy bạn How Python Interpreter Works trong chế độ tương tác và chế độ kịch bản. Mã Python được thực thi theo phương pháp từng câu lệnh một. Trình thông dịch Python có hai thành phần. Bộ dịch kiểm tra câu lệnh về cú pháp. Nếu đúng, nó sẽ tạo ra một mã byte trung gian. Có một máy ảo Python, sau đó chuyển đổi mã byte thành nhị phân gốc và thực thi nó. Sơ đồ sau đây minh họa cơ chế:

Python Interpreter

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

Python Interpreter - Interactive Mode

Khi được khởi động từ một terminal dòng lệnh mà không có bất kỳ tùy chọn bổ sung nào, một dấu nhắc Python >>> xuất hiện và trình thông dịch Python hoạt động dựa trên nguyên tắc REPL (Read, Evaluate, Print, Loop) . Mỗi lệnh được nhập trước dấu nhắc Python sẽ được đọc, dịch và thực thi. Một phiên làm việc tương tác điển hình như sau.

>>> price = 100
>>> qty = 5
>>> total = price*qty
>>> total
500
>>> print ("Total = ", total)
Total = 500

Để đóng phiên tương tác, hãy nhập ký tự kết thúc dòng (ctrl+D cho Linux và ctrl+Z cho Windows). Bạn cũng có thể gõ quit() trước dấu nhắc Python và nhấn Enter để quay lại dấu nhắc hệ điều hành.

>>> quit()

$

Shell tương tác có sẵn với bản phân phối Python tiêu chuẩn không được trang bị các tính năng như chỉnh sửa dòng, tìm kiếm lịch sử, tự động hoàn thành, v.v. 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 bpython để có thêm các chức năng.

Python Interpreter - Scripting Mode

Thay vì nhập và nhận kết quả của một lệnh từng cái một như trong môi trường tương tác, bạn có thể lưu một tập hợp lệnh trong một tệp văn bản, đảm bảo rằng nó có đuôi .py , và sử dụng tên tệp đó như một tham số dòng lệnh cho lệnh Python.

Lưu các dòng sau dưới dạng prog.py , bằng cách sử dụng bất kỳ trình soạn thảo văn bản nào như vim trên Linux hoặc Notepad trên Windows.

print ("My first program")
price = 100
qty = 5
total = price*qty
print ("Total = ", total)

Khi chúng ta thực thi chương trình trên một máy tính Windows, nó sẽ tạo ra kết quả sau:

C:\Users\Acer>python prog.py
My first program
Total = 500

Lưu ý rằng mặc dù Python thực thi toàn bộ đoạn mã trong một lần, nhưng bên trong nó vẫn được thực thi theo từng dòng một.

Trong trường hợp của bất kỳ ngôn ngữ lập trình nào dựa trên biên dịch như Java, mã nguồn sẽ không được chuyển đổi thành byte code trừ khi toàn bộ mã không có lỗi. Trong Python, ngược lại, các câu lệnh sẽ được thực thi cho đến khi gặp phải lỗi đầu tiên.

Hãy để chúng tôi cố ý giới thiệu một lỗi trong đoạn mã trên.

print ("My first program")
price = 100
qty = 5
total = prive*qty #Error in this statement
print ("Total = ", total)

Lưu ý biến bị đánh vần sai prive thay vì price . Hãy thử thực hiện lại kịch bản như trước −

C:\Users\Acer>python prog.py
My first program
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'?

Lưu ý rằng các câu lệnh trước câu lệnh có lỗi được thực thi và sau đó thông báo lỗi xuất hiện. Do đó, giờ đây rõ ràng rằng script Python được thực thi theo cách diễn giải.

Python Interpreter - Using Shebang #!

Ngoài việc thực thi tập lệnh Python như trên, tập lệnh đó cũng có thể là một tệp thực thi tự động trong Linux, giống như một tập lệnh shell. Bạn phải thêm một dòng shebang ở đầu tập lệnh. Shebang chỉ ra tệp thực thi nào được sử dụng để diễn giải các câu lệnh Python trong tập lệnh. Dòng đầu tiên của tập lệnh bắt đầu bằng #! và theo sau là đường dẫn đến tệp thực thi Python.

Sửa đổi tập tin prog.py như sau:

#! /usr/bin/python3.11

print ("My first program")
price = 100
qty = 5
total = price*qty
print ("Total = ", total)

Để đánh dấu kịch bản là tự thực thi, hãy sử dụng lệnh chmod .

$ chmod +x prog.py

Bây giờ bạn có thể thực thi kịch bản trực tiếp, mà không cần sử dụng nó như một đối số dòng lệnh.

$ ./hello.py

Interactive Python - IPython

IPython (viết tắt cho Interactive Python ) là một môi trường tương tác nâng cao và mạnh mẽ cho Python với nhiều chức năng hơn so với shell Python tiêu chuẩn. IPython được phát triển ban đầu bởi Fernando Perez vào năm 2001.

IPython có các tính năng quan trọng sau đây −

  • IPython khả năng kiểm tra đối tượng để kiểm tra các thuộc tính của một đối tượng trong thời gian chạy.

  • Cú pháp tô màu của nó chứng tỏ hữu ích trong việc xác định các yếu tố ngôn ngữ như từ khóa, variables v.v.

  • Lịch sử các tương tác được lưu trữ nội bộ và có thể được tái hiện.

  • Tính năng hoàn thành tab cho các từ khóa, biến và tên function là một trong những tính năng quan trọng nhất.

  • Hệ thống lệnh Magic của IPython rất hữu ích để kiểm soát Python environment và thực hiện các tác vụ hệ điều hành.

  • Nó là kernel chính cho Jupyter notebook và các công cụ front-end khác của Dự án Jupyter.

Cài đặt IPython bằng công cụ cài đặt PIP.

pip3 install ipython

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

C:\Users\Acer>ipython
Python 3.11.2 (tags/v3.11.2:878ead1, Feb 7 2023, 16:38:35) [MSC v.1934
64 bit (AMD64)] on win32
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]:

Thay vì dấu nhắc >>> thông thường như trong trình thông dịch tiêu chuẩn, bạn sẽ thấy hai dấu nhắc chính của IPython như được giải thích dưới đây −

  • In[1] xuất hiện trước bất kỳ biểu thức đầu vào nào.

  • Out[1] xuất hiện trước khi Kết quả xuất hiện.

In [1]: price = 100
In [2]: quantity = 5
In [3]: total = price*quantity
In [4]: total
Out[4]: 500
In [5]:

Tính năng hoàn thành bằng phím Tab là một trong những cải tiến hữu ích nhất mà IPython cung cấp. IPython sẽ hiển thị danh sách các phương thức phù hợp khi bạn nhấn phím Tab sau dấu chấm trước đối tượng.

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

In [5]: var = "Hello World"
In [6]: var?
Type: str
String form: Hello World
Length: 11
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 hàm ma thuật của IPython rất mạnh mẽ. Các lệnh dòng cho phép bạn chạy các lệnh DOS bên trong IPython. Hãy để chúng ta chạy lệnh dir từ bên trong console IPython.

In [8]: !dir *.exe
 Volume in drive F has no label.
 Volume Serial Number is E20D-C4B9

 Directory of F:\Python311

07-02-2023 16:55            103,192 python.exe
07-02-2023 16:55            101,656 pythonw.exe
                2 File(s)    204,848 bytes
                0 Dir(s)  105,260,306,432 bytes free

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