Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tải lại Module (Reloading Modules) trong Python


Hàm reload() - tải lại một module đã được import hoặc loaded trước đó. Điều này hữu ích trong tình huống bạn chạy nhiều lần script test trong phiên tương tác (interactive session), nó luôn dùng phiên bản đầu tiên của các module chúng ta đang phát triển, ngay cả khi đã thay đổi code. Trong tình huống đó, chúng ta cần đảm bảo các module được tải lại.

Đối số truyền cho reload() phải là một đối tượng module đã được import thành công trước đó.

Cú pháp

import importlib
importlib.reload(sys)

Ví dụ

>>> import sys
>>> import importlib
>>> importlib.reload(sys)

Tuy nhiên, nếu bạn thử tải lại một module chưa được import trước đó, bạn có thể gặp lỗi.

>>> import importlib
>>> importlib.reload(sys)
Traceback (most recent call last):
File "", line 1, in 
importlib.reload(sys)
NameError: name 'sys' is not defined

Một vài điểm cần hiểu khi reload() được thực thi:

  • Mã của module Python được biên dịch lại và code cấp độ module được thực thi lại, định nghĩa một tập đối tượng mới được gán cho tên trong dictionary của module bằng cách tái sử dụng loader ban đầu tải module. Tuy nhiên, hàm init của module không được tải lại.
  • Các đối tượng cũ chỉ được thu hồi sau khi số tham chiếu (reference counts) của chúng giảm xuống 0.
  • Các tên trong namespace của module được thay đổi thành đối tượng mới nếu có.
  • Các tham chiếu khác đến đối tượng cũ (như tên bên ngoài module) không nhất thiết tham chiếu đến đối tượng mới và phải được cập nhật trong mỗi namespace nơi chúng xuất hiện nếu cần thiết.