2009-07-10 17 views
7

Kiểm tra xem nếu __name__ == '__main__' là thành ngữ phổ biến để chạy một số mã khi tệp đang được gọi trực tiếp, thay vì thông qua mô-đun.Các giá trị có thể khác nhau cho __name__ trong một tập lệnh Python là gì và chúng có ý nghĩa gì?

Trong quá trình viết lệnh tùy chỉnh cho manage.py của Django, tôi thấy mình cần sử dụng code.InteractiveConsole, điều này mang lại hiệu quả cho người dùng vỏ chuẩn python. Trong một số mã thử nghiệm tôi đã làm, tôi thấy rằng trong kịch bản tôi đang cố gắng thực hiện, tôi nhận được rằng __name____console__, khiến mã của tôi (phụ thuộc vào __main__) để không chạy.

Tôi khá chắc chắn rằng tôi có một số điều trong triển khai ban đầu của mình để thay đổi, nhưng nó khiến tôi băn khoăn không biết những thứ khác nhau có thể là gì. Tôi không thể tìm thấy bất kỳ tài liệu nào về các giá trị có thể, cũng như ý nghĩa của chúng, vì vậy đó là cách tôi kết thúc ở đây.

Trả lời

6

từ document mã lớp.InteractiveInterpreter ([locals]):
Đối số địa phương tùy chọn chỉ định từ điển trong đó mã sẽ được thực thi; nó được đặt mặc định thành từ điển mới được tạo bằng khóa '__name__' được đặt thành '__console__' và khóa '__doc__' đặt thành None. lẽ u có thể turnning đối số người dân địa phương, thiết lập __name__ với __main__, hoặc thay đổi các điều khoản kiểm tra từ

if __name__ == '__main__' 
to 
if __name__ in set(["__main__", "__console__"]) 

Hy vọng nó giúp.

+0

@ S.Lott, cảm ơn sự giúp đỡ! – sunqiang

+1

Có lẽ không cần set() hoặc danh sách, có thể sử dụng một bộ chuỗi đơn. –

+0

@GringoSuave đồng ý, :) – sunqiang

4

__name__ thường là tên mô-đun, nhưng nó được đổi thành '__main__' khi mô-đun được đề cập được thực hiện trực tiếp thay vì được nhập bởi một mô-đun khác.

Tôi hiểu rằng các giá trị khác chỉ có thể được đặt trực tiếp bằng mã bạn đang chạy.

+1

Xem http://docs.python.org/reference/toplevel_components.html để biết thêm thông tin. '__name__' LÀ tên mô-đun. '__main__' là một mô-đun đặc biệt. –

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