2012-08-02 36 views
6

Bạn thường có thể thấy điều này (biến a):Tại sao hàm main() không được định nghĩa bên trong if '__main__'?

def main(): 
    do_something() 
    do_sth_else() 

if __name__ == '__main__': 
    main() 

Và bây giờ tôi đang tự hỏi tại sao không này (biến b):

if __name__ == '__main__': 
    do_something() 
    do_sth_else() 

Hoặc ít nhất này (biến thể c):

if __name__ == '__main__': 
    def main(): 
     do_something() 
     do_sth_else() 

    main() 

Tất nhiên, hàm gọi bên trong main() có thể không được gọi hàm, chúng chỉ đại diện cho bất cứ điều gì bạn có thể muốn làm trong hàm main() của bạn.

Vậy tại sao mọi người lại thích biến thể hơn những người khác? Nó chỉ là phong cách/cảm giác hoặc có một số lý do thực sự? Nếu có thể, vui lòng liên kết các nguồn.

Trả lời

11

Tại sao lại giới hạn chức năng main() của bạn để chỉ sử dụng dòng lệnh?

Bằng cách xác định hàm main() ở phạm vi mô-đun, bây giờ bạn có thể bao bọc tập lệnh của mình và thay đổi cách nó được gọi. Có lẽ bạn muốn đặt đối số mặc định trong sys.argv, có thể bạn muốn sử dụng lại mã trong một tập lệnh khác.

4

Điều này là do có hai cách sử dụng tập lệnh Python. Một từ dòng lệnh và một khi nhập nó từ một tập lệnh khác. Khi bạn chạy nó từ dòng lệnh, bạn muốn chạy chức năng main() và khi bạn nhập nó, bạn có thể không muốn chạy hàm main() cho đến khi bạn cần nó (bạn chỉ muốn nhập main()).

Các vấn đề liên quan