2011-01-23 35 views
12

Có dạng ngắn hơn về điều này không?Phím tắt cho nếu __name__ == '__main__':

if __name__ == '__main__': 

Nó là khá tẻ nhạt để viết, và cũng không trông rất thoải mái trong quan điểm của tôi :)

+3

"tẻ nhạt để viết" - nhưng tối đa một lần mỗi mô-đun, thường ít thường xuyên hơn. "trông không đẹp lắm" - vâng, nhưng bạn sẽ sống sót. – delnan

+3

Tôi đã sống sót với nó trong nhiều năm, delnan;) –

Trả lời

12

PEP299 đề xuất một giải pháp cho mụn cóc này, cụ thể là có một tên chức năng đặc biệt __main__. Nó đã bị từ chối, một phần là do:

Guido phát âm mà anh ấy không thích ý tưởng anyway như đó là "không có giá trị thay đổi (trong docs, thói quen sử dụng, vv) và không có gì là đặc biệt broken . "

http://www.python.org/dev/peps/pep-0299/

Vì vậy, sự xấu xa sẽ ở lại, ít nhất là chừng nào của Guido các BDFL.

+3

BDFL không nói nữa! :) –

9

Về cơ bản tất cả các lập trình viên python nào đó. Vì vậy, chỉ cần sống với nó. Bên cạnh đó bạn có thể bỏ qua nó hoàn toàn nếu kịch bản của bạn luôn có nghĩa là chạy dưới dạng ứng dụng và không được nhập dưới dạng mô-đun - nhưng bạn vẫn được khuyến khích sử dụng nó ngay cả khi nó không thực sự cần thiết.

+6

(Tôi thích thú với +6 cho câu trả lời không thực sự đưa ra câu trả lời cho câu hỏi.) –

+1

Có lẽ tôi nên bắt đầu một PEP :) –

+3

@Gerald : xem PEP299 (và câu trả lời của tôi), có vẻ như chúng ta đang mắc kẹt với điều này. (Một sự xấu hổ cho một ngôn ngữ mà là nếu không làm sạch như vậy, vào ngày 1, một lập trình Python mới được tiếp xúc với một chi tiết thực hiện vi phạm dòng đầu tiên của "The Zen của Python": "Đẹp là tốt hơn so với xấu xí") –

1

Không, xin lỗi, không có. Nó không trông tuyệt vời, nhưng đó là những gì chúng tôi có.

3

Nó chắc chắn là một mụn cóc trong ngôn ngữ, như là bất cứ điều gì mà trở thành boilerplate và được sao chép và dán từ tập tin vào tập tin. Không có cách viết tắt cho nó.

Vì mụn cóc và lò hơi đi, mặc dù, ít nhất nó là nhỏ.

3

Bạn có nghĩa là ngắn hơn như if'__main__'==__name__:?

7

Sau khi hỏi câu hỏi này, tôi quyết định để thực hiện một giải pháp cho nó:

from automain import * # will only import the automain decorator 

@automain 
def mymain(): 
    print 'this is our main function' 

Các blog post giải thích nó, và code is on github và có thể được easy_installed:

easy_install automain 
+6

Mặc dù chắc chắn là một thủ thuật Python gọn gàng, các biến chứng được thêm vào bởi mô-đun này làm cho nó ít hữu ích hơn. Mã bằng cách sử dụng mô-đun này sẽ có bất kỳ người đọc của họ đi "wtf !?", hy vọng tìm thấy 'nếu __name__ == '__main __':' và thậm chí trang trí nhập khẩu duy nhất được cho là quá lớn một sự hy sinh. – Walter

+2

... không phải là gần như cùng độ dài này?Theo cách tính đúng đắn nhất có thể, ngắn hơn khoảng 3 ký tự. 'from automain import * @ automain' vs' if __name__ == "__main__": mymain() ' – dbr

1

ngắn hơn, nếu bạn đếm dòng:

__name__ == '__main__' and main()