Một trong những pep's Python sớm nhất là PEP-20, được viết vào năm 2004. Nó liệt kê 19 luận đề hoặc quy tắc liên quan đến lập trình Python được gọi là 'Thiền của Python. ' Ngôn ngữ Python được xây dựng dựa trên các nguyên tắc hướng dẫn này và các quy tắc lần lượt được lấy cảm hứng từ PEP-8, hướng dẫn phong cách ban đầu cho Python do chính Guido van Rossum viết
Tác giả của Zen of Python, Pythoneer Tim Peters lâu năm, đã bỏ trống quy tắc thứ 20. Ý tưởng của anh ấy là để Guido đóng góp số 20, nhưng điều đó đã không bao giờ xảy ra.
Mục lục
19 quy tắc từ Zen of Python
19 quy tắc được liệt kê trong Zen of Python như sau
- Đẹp thì tốt hơn là xấu
- Rõ ràng là tốt hơn ngầm
- Đơn giản là tốt hơn phức tạp
- Phức tạp tốt hơn phức tạp
- Căn hộ tốt hơn lồng nhau
- Thưa thớt tốt hơn dày đặc
- số lượng khả năng đọc
- Các trường hợp đặc biệt không đủ đặc biệt để phá vỡ các quy tắc
- Mặc dù tính thực tế đánh bại sự tinh khiết
- Lỗi không bao giờ nên âm thầm trôi qua
- Trừ khi im lặng rõ ràng
- Khi đối mặt với sự mơ hồ, hãy từ chối sự cám dỗ để đoán
- Nên có một – và tốt nhất là chỉ có một – cách rõ ràng để làm điều đó
- Mặc dù ban đầu cách đó có thể không rõ ràng trừ khi bạn là người Hà Lan
- Bây giờ tốt hơn là không bao giờ
- Mặc dù không bao giờ thường tốt hơn bây giờ
- Nếu việc triển khai khó giải thích, thì đó là một ý tưởng tồi
- Nếu việc triển khai dễ giải thích, đó có thể là một ý kiến hay
- Không gian tên là một ý tưởng tuyệt vời - hãy làm nhiều hơn nữa
Cách Zen của Python hiển thị xuyên suốt Python
Như đã đề cập, các quy tắc này một phần được lấy cảm hứng từ PEP-8, hướng dẫn phong cách Python được viết bởi Guido van Rossum. Cho đến ngày nay, các nhà phát triển Python, đặc biệt là những người làm việc trong chính dự án Python, cố gắng tuân thủ các nguyên tắc này
Để làm ví dụ về cách các quy tắc này áp dụng cho ngôn ngữ Python, chúng ta có thể xem quy tắc 13 [nên có một – và tốt nhất là chỉ một – cách rõ ràng để thực hiện]. Nó rõ ràng được áp dụng cho cách chúng ta có thể lấy độ dài của một đối tượng trong Python. Xét cho cùng, Python có hàm len[] hoạt động trên bất kỳ đối tượng nào có độ dài, chỉ cho chúng ta một cách rõ ràng để lấy độ dài của đối tượng. Ngược lại, một số ngôn ngữ khác không có cách thực hiện được xác định như vậy kết thúc bằng vô số phương thức đối tượng như object.length[]
, object.size[]
, v.v., tất cả đều có tên hơi khác nhau tùy thuộc vào người thực hiện nó
Tuy nhiên, đó không phải là tất cả cầu vồng và ánh nắng mặt trời. Ví dụ, hiện có ba cách để định dạng chuỗi trong Python
- %-định dạng
- Sử dụng str. định dạng[]
- chuỗi f
Trong những năm qua, các nhà phát triển Python tiếp tục tìm ra những cách mới và tốt hơn để làm điều này nhưng phải giữ nguyên những cách cũ để tương thích
Trứng phục sinh Zen của Python
Một quả trứng Phục sinh nhỏ đã có mặt trong Python từ lâu liệt kê Zen of Python. Bạn có thể kích hoạt trứng Phục sinh bằng cách nhập mô-đun this
. Nếu bạn làm như vậy trong REPL, bạn sẽ thấy điều này
The Zen of Python của Tim Peters là 20 nguyên tắc thiết kế ngôn ngữ Python. Mã Python của bạn không nhất thiết phải tuân theo các nguyên tắc này, nhưng bạn nên ghi nhớ chúng. Zen of Python là một quả trứng Phục sinh, hay trò đùa ẩn giấu, sẽ xuất hiện nếu bạn chạy import this
>>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
GHI CHÚ. Thật bí ẩn, chỉ có 19 hướng dẫn được viết ra. Guido van Rosum được cho là đã nói rằng câu cách ngôn thứ 20 bị thiếu là “một trò đùa kỳ quái nào đó của Tim Peters. ”
Cuối cùng, những hướng dẫn này là những ý kiến có thể được tranh luận hoặc chống lại. Giống như tất cả các bộ quy tắc đạo đức tốt, đôi khi chúng tự mâu thuẫn để mang lại sự linh hoạt nhất. Đây là cách giải thích của riêng tôi về những câu cách ngôn này
Đẹp thì tốt hơn là xấu
Các lập trình viên thường viết mã nhanh chóng mà không cần quan tâm đến khả năng đọc. Mặc dù mã không nhất thiết phải đọc được, nhưng bản thân mã của ngôn ngữ Python phải được nghĩ ra, nhất quán và thú vị khi sử dụng. Tất nhiên, không phải tập lệnh nào cũng cần phải đẹp và đẹp là chủ quan, nhưng phần lớn sự phổ biến của Python là do rất dễ làm việc với nó.
Rõ ràng là tốt hơn ngầm
“Câu cách ngôn này tự giải thích được,” đó sẽ là một lời giải thích khủng khiếp cho bất kỳ câu cách ngôn nào. Tương tự như vậy, sẽ tốt hơn nếu mã dài dòng và rõ ràng. Bạn nên tránh ẩn chức năng của mã đằng sau các tính năng ngôn ngữ tối nghĩa đòi hỏi sự quen thuộc để hiểu đầy đủ
Đơn giản là tốt hơn phức tạp. Phức tạp tốt hơn phức tạp
Hai câu cách ngôn này nhắc nhở chúng ta rằng việc xây dựng bất cứ thứ gì đều có thể được thực hiện bằng các kỹ thuật đơn giản hoặc phức tạp. Với một vấn đề đơn giản, chẳng hạn như xây dựng một chuồng chim, một giải pháp đơn giản sẽ tốt hơn. Mặt khác, chế tạo động cơ tàu hỏa diesel là một vấn đề phức tạp đòi hỏi các kỹ thuật phức tạp. Ngay cả khi về mặt kỹ thuật, bạn có thể chế tạo một động cơ tàu hỏa diesel bằng kỹ thuật chuồng chim, thì có lẽ bạn sẽ phải kết thúc với một sự sắp xếp phức tạp, Rube Goldberg của các bộ phận chuồng chim sẽ không phải là một giải pháp lý tưởng. Thích đơn giản hơn phức tạp, nhưng biết giới hạn của sự đơn giản
Căn hộ tốt hơn lồng nhau
Các lập trình viên thích sắp xếp mọi thứ thành các danh mục, đặc biệt là các danh mục chứa các danh mục con chứa các danh mục con khác. Những hệ thống phân cấp này thường không thêm tổ chức nhiều như họ thêm bộ máy hành chính. Có thể có mã chỉ trong một mô-đun hoặc lớp trên cùng thay vì chia thành nhiều mô-đun con hoặc lớp con. Nếu bạn tạo các gói và mô-đun yêu cầu mã như import spam.eggs.bacon.ham.foo.bar
, thì bạn đang làm cho mã của mình quá phức tạp
Thưa thớt tốt hơn dày đặc
Các lập trình viên thường thích nhồi nhét càng nhiều chức năng vào càng ít mã càng tốt, chẳng hạn như một lớp lót như sau. print['\n'.join["%i bytes = %i bits which has %i possible values." % [j, j*8, 256**j-1] for j in [1 >> nhập cái này The Zen of Python, của Tim Peters Đẹp thì tốt hơn xấu. Rõ ràng là tốt hơn ngầm.