Mọi người khác đã trả lời, nhưng tôi nghĩ tôi vẫn còn một thứ khác để thêm.
lý do để có mà if
tuyên bố kêu gọi main()
(không theo thứ tự đặc biệt):
ngôn ngữ khác (như C và Java) có chức năng main()
đó được gọi là khi chương trình được thực thi. Sử dụng if
này, chúng tôi có thể làm cho Python hoạt động giống như họ, điều này cảm thấy quen thuộc hơn với nhiều người.
Mã sẽ là sạch, dễ đọc hơn và được sắp xếp tốt hơn. (vâng, tôi biết điều này là chủ quan)
Có thể import
mã python đó làm mô-đun mà không có các tác dụng phụ khó chịu.
biến bên trong def main
là địa phương, trong khi những người bên ngoài nó là toàn cầu. Điều này có thể giới thiệu một số lỗi và hành vi không mong muốn.
Tuy nhiên, bạn đang không cần để viết một hàm main()
và gọi nó bên trong một tuyên bố if
.
Bản thân tôi thường bắt đầu viết các kịch bản lệnh ném nhỏ mà không có bất kỳ loại chức năng nào. Nếu kịch bản phát triển đủ lớn, hoặc nếu tôi cảm thấy đặt tất cả các mã bên trong một hàm sẽ mang lại lợi ích cho tôi, sau đó tôi refactor mã và làm điều đó. Điều này cũng xảy ra khi tôi viết bash
tập lệnh.
Ngay cả khi bạn đặt mã bên trong hàm chính, bạn không bắt buộc phải viết mã chính xác như vậy. Một biến thể gọn gàng có thể là:
import sys
def main(argv):
# My code here
pass
if __name__ == "__main__":
main(sys.argv)
Điều này có nghĩa là bạn có thể gọi main()
từ các tập lệnh khác (hoặc trình tương tác) chuyển các thông số tùy chỉnh. Điều này có thể hữu ích trong các bài kiểm tra đơn vị, hoặc khi xử lý theo lô. Nhưng hãy nhớ rằng đoạn mã trên sẽ yêu cầu phân tích cú pháp của argv, do đó có thể tốt hơn nếu sử dụng một lệnh gọi khác để chuyển các tham số đã được phân tích cú pháp.
Trong một ứng dụng hướng đối tượng tôi đã viết, mã trông như thế này:
class MyApplication(something):
# My code here
if __name__ == "__main__":
app = MyApplication()
app.run()
Vì vậy, cảm thấy tự do để viết mã mà phù hợp với bạn tốt hơn. :)
Nguồn
2010-10-28 10:00:47
Xem http://stackoverflow.com/questions/419163/what-does-if-name-main-do – gimel
stackoverflow.com/questions/419163/what-does-if-name-main-do does không trả lời toàn bộ câu hỏi. – Johnsyweb
Điều gì mà bản sao không trả lời: có hàm main() (thay vì chỉ viết tất cả mã vào khối "if __name__") vì nó tránh vô tình tạo các biến toàn cục có thể ảnh hưởng đến các hàm khác. – slowdog