Khi trình thông dịch Python đọc một file nguồn, nó sẽ thực thi toàn bộ mã code trong file đó.
Trước khi thực thi code, trình thông dịch định nghĩa một số biến đặc biệt. Ví dụ: nếu trình thông dịch đang chạy module (file nguồn) đó làm chương trình chính, nó sẽ gán biến đặc biệt __name__ giá trị "__main__". Nếu file này được import từ module khác, __name__ sẽ được đặt thành tên của module đó.
Lý do làm vậy là đôi khi bạn viết một module (file .py) có thể chạy trực tiếp, nhưng cũng có thể được import và sử dụng trong module khác. Nhờ kiểm tra __main__, bạn chỉ cho code chạy khi muốn chạy module như một chương trình, không chạy khi ai đó chỉ import module để gọi hàm.
Ví dụ minh họa
Giả sử có 2 file one.py và two.py với code sau:
one.py:
def func():
print("func() in one.py")
print("Root of one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported")
two.py:
import one
print("Root of two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported")
Khi chạy python one.py, kết quả:
Root of one.py one.py is being run directly
Khi chạy python two.py, kết quả:
Root of one.py one.py is being imported Root of two.py func() in one.py two.py is being run directly