Computer >> Máy Tính >  >> Lập trình >> Python

Nhập tuyệt đối và tương đối trong Python

Nhiều khi chúng tôi tạo mã python, chúng tôi thấy rằng chúng tôi cần truy cập mã từ một tệp hoặc gói python khác. Đây là lúc bạn cần nhập tệp hoặc gói python khác vào mã hiện tại của mình. Vì vậy, cách dễ dàng để đạt được điều này chỉ là viết câu lệnh dưới đây ở đầu chương trình python hiện tại của bạn.

import package_name or module_name
or
from pacakge_name import module_name/object_name

Khi câu lệnh trên được phân tích cú pháp, trình thông dịch sẽ thực hiện những việc sau.

  • Trình thông dịch sẽ tìm kiếm các tên trong bộ nhớ cache của tất cả các mô-đun đã được nhập trước đó. Tên của mô-đun bộ nhớ cache này trong sys.modules.

  • Nếu không tìm thấy trong bước trên thì trình thông dịch sẽ tìm kiếm nó trong danh sách các mô-đun tích hợp sẵn. Các mô-đun này là một phần của thư viện tiêu chuẩn python.

  • Trong trường hợp nó vẫn không được tìm thấy trong bước 2 ở trên, thì trình thông dịch sẽ tìm kiếm các gói hoặc tên mô-đun trong danh sách các thư mục được xác định trong sys.path có thư mục hiện tại là thư mục đầu tiên được tìm kiếm.

  • Khi tìm thấy chúng là một mô-đun được nhập trong bất kỳ bước nào ở trên, tên của gói hoặc mô-đun được liên kết với phạm vi cục bộ của chương trình hiện tại.

  • Nếu gói hoặc mô-đun không bao giờ được tìm thấy, thì lỗi ModuleNotFoundError sẽ xuất hiện.

Một số quy tắc về nhập.

Các câu lệnh nhập phải được đề cập ở đầu tệp sử dụng các câu lệnh đó. Thứ tự nhập phải được đề cập như dưới đây.

  • Các mô-đun thư viện tiêu chuẩn của Python

  • Nhập từ các mô-đun của bên thứ ba

  • Nhập từ các ứng dụng cục bộ

Nhập tuyệt đối

Trong kiểu nhập này, chúng tôi chỉ định đường dẫn đầy đủ của gói / mô-đun / chức năng sẽ được nhập. Dấu chấm (.) Được sử dụng theo tốc độ của dấu gạch chéo (/) cho cấu trúc thư mục.

Hãy xem xét cấu trúc thư mục sau cho một gói.

python_project_name/packageA/moduleA1.py
python_project_name/packageA/moduleA2.py

Ngoài ra, hãy giả sử moduleA2 có một tên hàm là myfunc. Khi chúng tôi muốn nhập hàm đó vào chương trình python hiện tại của mình, sau đó sử dụng đường dẫn tuyệt đối, chúng tôi đề cập đến câu lệnh nhập sau.

from packageA.moduleA2 import myfunc

Ưu điểm lớn của nhập khẩu tuyệt đối là nó chỉ ra rõ ràng nơi nhập đang diễn ra, mặt khác, đôi khi nó có thể khá dài.

Nhập tương đối

Trong quá trình nhập tương đối, chúng tôi đề cập đến đường dẫn của gói đã nhập liên quan đến vị trí của tập lệnh hiện tại đang sử dụng mô-đun đã nhập.

Một dấu chấm biểu thị một thư mục đi lên từ vị trí hiện tại và hai dấu chấm biểu thị hai thư mục lên trên, v.v.

Hãy xem xét cấu trúc thư mục sau cho một gói.

python_project_name/packageA/moduleA1.py
python_project_name/packageB/moduleB1.py

Giả sử moduleB1 trong cấu trúc gói ở trên cần nhập moduleA1. Sau đó, câu lệnh nhập là:

from ..packageA import moduleA1

Hai dấu chấm chỉ ra rằng từ vị trí của moduleB1, chúng ta phải di chuyển đến thư mục python_project_name và sau đó chuyển đến packageA để lấy moduleA1.

Loại nhập này ngắn và dự án cấp cao nhất có thể được di chuyển từ vị trí này sang vị trí khác mà không cần thay đổi đường dẫn trong các câu lệnh nhập một cách dễ dàng. Mặt khác, nếu các thư mục nhập được chia sẻ thì mã dễ dàng bị ảnh hưởng khi có một số sửa đổi trong đường dẫn.