Điều này cho phép bạn sử dụng cùng một tệp với cả thư viện (bằng cách nhập nó) hoặc làm điểm bắt đầu cho một ứng dụng.
Ví dụ, hãy xem xét các hồ sơ sau:
# hello.py
def hello(to=__name__):
return "hello, %s" % to
if __name__ == "__main__":
print hello("world")
Bạn có thể sử dụng mã mà theo hai cách. Đối với một, bạn có thể viết một chương trình nhập khẩu nó. Nếu bạn nhập thư viện, __name__
sẽ là tên của thư viện và do đó việc kiểm tra sẽ thất bại, và mã sẽ không thực hiện (đó là hành vi mong muốn):
#program.py
from hello import hello # this won't cause anything to print
print hello("world")
Nếu bạn không muốn viết tập tin thứ hai này, bạn có thể trực tiếp chạy mã của bạn từ dòng lệnh với một cái gì đó như:
$ python hello.py
hello, __main__
hành vi này tất cả phụ thuộc vào biến đặc biệt __name__
mà python sẽ đặt dựa vào việc thư viện được nhập khẩu hoặc chạy trực tiếp bởi thông dịch viên. Nếu chạy trực tiếp, nó sẽ được đặt thành __main__
. Nếu được nhập, nó sẽ được đặt thành tên thư viện (trong trường hợp này là hello
).
Thường thì cấu trúc này được sử dụng để thêm các kiểm tra đơn vị vào mã của bạn. Bằng cách này, khi bạn viết một thư viện, bạn có thể nhúng mã thử nghiệm ngay trong tệp mà không lo lắng rằng nó sẽ được thực hiện khi thư viện được sử dụng theo cách thông thường. Khi bạn muốn kiểm tra thư viện, bạn không cần bất kỳ khung công tác nào vì bạn chỉ có thể chạy thư viện như thể nó là một chương trình.
Xem thêm __main__
in the python documentation (mặc dù nó khá thưa thớt)
Nguồn
2011-11-22 12:11:35
Ồ, tôi hiểu rồi ... 'nếu __name __ = "__ __ chính":' kiểm tra tàn lụi kịch bản là một độc lập hoặc một mô-đun. – Adobe
Đối với người sao chép và/hoặc để tránh nhầm lẫn, hãy lưu ý lỗi đánh máy trong nhận xét trước: 'if __name __ ==" __ main __ ":' – alberto