Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Ý nghĩa của if __name__ == "__main__" trong Python
Câu lệnh if __name__ == "__main__":
là một đoạn mã thường gặp trong các file Python, đóng vai trò quan trọng trong việc kiểm soát cách thức một tập lệnh được thực thi. Đây là một thực hành tốt giúp tránh việc vô tình thực thi mã khi không mong muốn.
Cụ thể, câu lệnh này có ý nghĩa trong hai trường hợp:
- Chạy file Python dưới dạng chương trình chính với lệnh
python filename.py
. - Nhập file Python dưới dạng một module bằng cách sử dụng
import filename
trong file khác.
Trong trường hợp thứ hai, chúng ta thường chỉ muốn sử dụng các hàm hoặc lớp trong file được nhập, thay vì để tất cả mã trong file đó được thực thi. Đây chính là lúc câu lệnh if __name__ == "__main__":
phát huy tác dụng như một "lá chắn" để kiểm soát hành vi này.
Biến đặc biệt __name__
trong Python
Khi trình thông dịch Python đọc một file mã nguồn, nó thực hiện hai việc:
Bài viết này được đăng tại [free tuts .net]
- Thiết lập một số biến đặc biệt, bao gồm
__name__
. - Thực thi toàn bộ mã trong file .
Dưới đây là ví dụ về cách sử dụng đúng câu lệnh if __name__ == "__main__":
:
# Đây là foo.py def functionA(): print("Function A") if __name__ == "__main__": print("Running foo") functionA()
Trường hợp 1: Chạy file foo.py
trực tiếp
Khi chạy file foo.py
dưới dạng chương trình chính, trình thông dịch Python sẽ gán giá trị chuỗi "__main__"
cho biến __name__
. Do đó, mã bên trong câu lệnh if
sẽ được thực thi:
$ python foo.py Running foo Function A
Trường hợp 2: Nhập foo.py
trong file khác
Khi nhập foo.py
vào một file khác, ví dụ như bar.py
, biến __name__
trong foo.py
sẽ được gán giá trị "foo"
(tên của file ). Do đó, mã bên trong câu lệnh if
sẽ không được thực thi.
Ví dụ:
# Đây là bar.py import foo if __name__ == "__main__": print("Running bar")
Kết quả khi chạy bar.py
:
$ python bar.py Running bar
Nếu file foo.py
không có câu lệnh if __name__ == "__main__":
, thì mã trong foo.py
sẽ được thực thi ngay cả khi file này được nhập:
$ python bar.py Running foo Function A Running bar