Theo Clean Code. A Handbook of Agile Software Craftsmanship, “Tỷ lệ thời gian đọc so với. bài viết cũng được hơn 10. 1. ”
Thông thường, lập trình thẩm mỹ không phải là một vấn đề quan trọng khi chúng tôi còn học ở trường. Các cá nhân sau đó làm theo phong cách của họ khi viết bằng Python. Tuy nhiên, công việc có thể không như mong muốn bất cứ khi nào chúng ta phải dành phần lớn thời gian để hiểu mã ẩn của một người, điều này cũng có thể xảy ra với những người khác khi đọc mã của chúng ta. Do đó, hãy tập trung vào Zen của Python và một số mẹo cải tiến để giải quyết vấn đề
Thiền của Python?
Đối với những người chưa từng thấy nó trước đây, hãy nhập và thực thi import this
trong trình thông dịch Python của bạn và 19 nguyên tắc hướng dẫn do Tim Peters chấp bút sẽ hiển thị
- Đẹ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ỉ 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 *ngay* 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
Trong phần này, tôi sẽ chia sẻ cách giải thích của tôi về những câu cách ngôn này và một số mẹo Python hữu ích mà tôi đã học được
Ảnh của June Wong trên Bapt
Đẹp Tốt Hơn Xấu
Python có cú pháp đơn giản, khả năng đọc mã và các lệnh giống tiếng Anh giúp mã hóa dễ dàng và hiệu quả hơn nhiều so với các ngôn ngữ lập trình khác. Ví dụ: sử dụng or
and
so với. ||
&&
để xây dựng các biểu thức tương tự theo quan điểm ngữ nghĩa
Hơn nữa, bố cục và thành phần của mã là rất quan trọng và có rất nhiều tài nguyên tồn tại về chủ đề này. Đây là cái phổ biến nhất và yêu thích của tôi
PEP 8 — Hướng dẫn phong cách cho mã Python
Ngôi nhà chính thức của Ngôn ngữ lập trình Python
www. con trăn. tổ chức
Sau khi xem qua PEP8, hãy xem các bài viết này cho thấy một số điểm nổi bật và ứng dụng
- Cách viết mã Python đẹp với PEP 8
- Python sành điệu với PEP8
- Cạm bẫy của PEP-8
Không bao giờ làm rối mã của bạn. Hãy thanh lịch và làm cho nó đẹp
Rõ ràng là tốt hơn tiềm ẩn
Trong Python, một quy ước đặt tên tốt không chỉ giúp bạn không bị điểm kém trong lớp mà còn làm cho mã của bạn rõ ràng. May mắn thay, có một số hướng dẫn bạn có thể tìm thấy trong PEP8 và tôi muốn nhấn mạnh một số điểm bên dưới
- Nói chung, tránh sử dụng tên
1. Quá chung chung, nhưmy_list
.
2. Quá dài dòng, nhưlist_of_machine_learning_data_set
.
3. Quá mơ hồ, như "l", "I", "o", "O. " - Tên gói/mô-đun phải là chữ thường.
- Ưu tiên tên một từ.
- Khi cần nhiều từ, hãy thêm dấu gạch dưới để phân tách chúng. - Tên lớp phải tuân theo quy ước UpperCaseCamelCase
- Biến\Phương thức\Hàm phải tuân theo quy ước chữ thường [thêm dấu gạch dưới vào các từ riêng biệt nếu cần]
- Tên hằng phải được viết hoa đầy đủ [thêm dấu gạch dưới vào các từ riêng biệt nếu cần]
Mọi thứ phải sáng suốt và dễ hiểu
Đơn giản là tốt hơn phức tạp
“Đơn giản có thể khó hơn phức tạp. Bạn phải làm việc chăm chỉ để làm cho suy nghĩ của bạn rõ ràng để làm cho nó đơn giản. Nhưng cuối cùng nó cũng đáng vì một khi bạn đến đó, bạn có thể dời núi. ” – Steve Jobs
Rất nhiều lần khi xử lý các trình vòng lặp, chúng ta cũng cần phải đếm số lần lặp. Python giảm bớt nhiệm vụ bằng cách cung cấp một chức năng tích hợp có tên là enumerate[]
. Đây là cách chưa trưởng thành theo sau là cách được đề xuất
Một ví dụ khác là sử dụng hàm zip[]
tích hợp, tạo ra một trình vòng lặp có thể ghép nối các phần tử từ hai hoặc nhiều vòng lặp. Bạn có thể sử dụng nó để giải quyết các vấn đề lập trình phổ biến một cách nhanh chóng và hiệu quả, chẳng hạn như tạo từ điển
Khả năng đơn giản hóa là loại bỏ những gì không cần thiết để những gì cần thiết có thể nói
Phức tạp tốt hơn phức tạp
Sự khác biệt giữa phức tạp và phức tạp là phức tạp được sử dụng để chỉ cấp độ hệ thống của các thành phần, trong khi phức tạp đề cập đến mức độ khó cao
Đôi khi, mặc dù chúng tôi cố gắng giữ cho các nhiệm vụ đơn giản và ngớ ngẩn, nhưng kết quả vẫn có thể rất tệ. Trong trường hợp này, việc tối ưu hóa trong lập trình trở nên cần thiết và tùy chọn học yêu thích của tôi là hoạt động trên các trang web thử thách viết mã. Bạn có thể xem các giải pháp của người khác và thậm chí được truyền cảm hứng bởi các thuật toán tốt hơn
HackerRank cung cấp nhiều cấp độ phù hợp với các lập trình viên mới, đây là cấp độ nổi bật để bắt đầu. Sau đó, hãy thử các trang web chuyên nghiệp hơn, chẳng hạn như
mã hóa. Nền tảng đánh giá mã hóa số 1
Cải thiện kỹ năng viết mã của bạn với thư viện hơn 300 thử thách của chúng tôi và chuẩn bị cho các cuộc phỏng vấn viết mã với nội dung từ…
www. byte mã hóa. com
Topcoder
Topcoder là một thị trường cung cấp dịch vụ cộng đồng kết nối các doanh nghiệp với chuyên môn khó tìm. Cộng đồng Topcoder…
www. topcoder. com
Căn hộ tốt hơn lồng nhau
Các mô-đun lồng nhau không phổ biến trong Python—ít nhất là tôi chưa từng thấy thứ gì giống như import this
0 trước đây—và không dễ đọc. Mặc dù việc xây dựng một mô hình con trong một mô hình con khác có thể làm giảm dòng mã, nhưng chúng tôi không muốn người dùng gặp rắc rối với cú pháp không trực quan
Giữ nó nông
Thưa thớt tốt hơn dày đặc
Đừng gây căng thẳng cho người đọc bằng cách dán quá nhiều mã vào một dòng. Độ dài dòng tối đa được đề xuất là 79 ký tự. Giới hạn độ rộng của cửa sổ soạn thảo hoạt động tốt khi sử dụng các công cụ kiểm tra mã
Tải xuống hình ảnh nhanh hơn từ Bapt bằng Python
Số lượng khả năng đọc
Mã được đọc thường xuyên hơn nó được viết. Hãy suy nghĩ về thụt đầu dòng và việc đọc mã dễ dàng hơn nhiều như thế nào và so sánh các mã bên dưới
Trong trường hợp này, các mã chia sẻ cùng một kết quả, nhưng mã cuối cùng cung cấp khả năng đọc dễ dàng hơn bằng cách sử dụng trình giữ chỗ gạch dưới và chuỗi f. Sau Python 3. 6 đã được công bố, f-string bắt đầu giúp định dạng dễ dàng hơn và mạnh mẽ hơn khi xử lý các câu dài hơn với nhiều biến hơn bên trong
Phong cách của một nhà văn không nên tạo ra những trở ngại giữa ý tưởng của anh ta và tâm trí của độc giả
Các trường hợp đặc biệt không đủ đặc biệt để phá vỡ các quy tắc
Tính nhất quán của việc hỗ trợ các trường hợp chung là chìa khóa, vì vậy hãy cố gắng sắp xếp lại một dự án cồng kềnh thành một dạng đơn giản. Ví dụ: cấu trúc mã theo lớp hoặc sắp xếp mã thành các tệp khác nhau theo chức năng của nó, mặc dù Python không bắt buộc bạn phải làm như vậy. Vì Python là ngôn ngữ lập trình đa mô hình, nên một cách tiếp cận mạnh mẽ để giải quyết vấn đề là tạo ra các đối tượng, được gọi là lập trình hướng đối tượng
Lập trình hướng đối tượng là một mô hình lập trình tổ chức cấu trúc chương trình sao cho các thuộc tính và hành vi có thể được xem như các đối tượng riêng lẻ. Lợi ích của nó là trực quan và dễ thao tác, và nhiều hướng dẫn đã giải thích các khái niệm một cách xuất sắc. Đây là một yêu thích của tôi
Mặc dù tính thực tế đánh bại sự tinh khiết
Câu cách ngôn này mâu thuẫn với câu cách ngôn trước và nhắc nhở chúng ta về sự cân bằng giữa chúng
Ảnh của Scott Webb trên Bapt
Sai lầm không bao giờ nên lặng lẽ trôi qua
Việc chuyển lỗi cuối cùng sẽ để lại các lỗi tiềm ẩn thậm chí còn khó tìm ra hơn. Nhờ khả năng xử lý lỗi mạnh mẽ của Python, không khó để các lập trình viên sử dụng công cụ này so với các ngôn ngữ khác
Theo tài liệu của Python. “Ngay cả khi một câu lệnh hoặc biểu thức đúng về mặt cú pháp, nó vẫn có thể gây ra lỗi khi cố gắng thực hiện nó. ”
Đặc biệt đối với một dự án lớn, chúng tôi không muốn mã của mình bị sập sau một quá trình tính toán tốn thời gian. Đây là lý do tại sao quản lý ngoại lệ rất quyến rũ
Trừ khi hoàn toàn im lặng
Trong một số trường hợp, lỗi nhỏ sẽ không làm phiền bạn. Tuy nhiên, có thể bạn muốn bắt lỗi cụ thể. Để biết thêm chi tiết về các thông báo lỗi cụ thể, tôi khuyên bạn nên đọc tài liệu chính thức về Ngoại lệ tích hợp sẵn và tìm ra mục tiêu của bạn
Ngoại lệ tích hợp — Python 3. 8. 2 tài liệu
Trong Python, tất cả các ngoại lệ phải là thể hiện của một lớp bắt nguồn từ. Trong một tuyên bố với một mệnh đề đề cập đến…
tài liệu. con trăn. tổ chức
Khi đối mặt với sự mơ hồ, hãy từ chối sự cám dỗ để đoán
“Điều quan trọng là không ngừng học hỏi, thích thử thách và chấp nhận sự mơ hồ. Cuối cùng không có câu trả lời nhất định. ” - Matina Horner
Câu nói này tao nhã và trữ tình nhưng không phải là một phép ẩn dụ tốt trong lập trình. Sự mơ hồ có thể đề cập đến cú pháp không rõ ràng, cấu trúc chương trình phức tạp hoặc lỗi gây ra thông báo lỗi. Ví dụ, một lỗi đơn giản khi sử dụng mô-đun import this
1 lần đầu tiên
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any[] or a.all[]
Nếu bạn thực thi đoạn mã trên, bạn sẽ tìm thấy một mảng gồm năm bool ở đầu ra cho biết các giá trị dưới 3. Do đó, câu lệnh import this
2 không thể xác định trạng thái. Các hàm import this
3 và import this
4 tích hợp được hiển thị trong thông báo được sử dụng cho Và/Hoặc liên tiếp
Đầu ra cho thấy rằng import this
3 chỉ trả về import this
6 nếu tất cả các mục là import this
6, trong khi import this
4 trả về import this
6 nếu bất kỳ mục nào là import this
6
Nên có một - và tốt hơn là chỉ có một - Cách rõ ràng để làm điều đó
Hãy nghĩ về lý do tại sao Python được mô tả là một ngôn ngữ lập trình dễ học. Với các hàm/thư viện tích hợp tuyệt vời và khả năng mở rộng cao, Python khuyến khích các lập trình viên viết một cách duyên dáng. Mặc dù có nhiều giải pháp hơn để cung cấp tính linh hoạt, nhưng có thể mất quá nhiều thời gian để đào sâu vào cùng một vấn đề
Nhập nhập phản trọng lực và thực hiện
Mặc dù lúc đầu cách đó có thể không rõ ràng trừ khi bạn là người Hà Lan
Người tạo ra Python, Guido van Rossum, là một lập trình viên người Hà Lan, người đã khiến câu cách ngôn này trở nên không thể tranh cãi. Bạn sẽ không tuyên bố rằng bạn biết Python tốt hơn anh ấy… ít nhất là tôi sẽ không
Hình ảnh lịch sự của Guido van Rossum trên GitHub
Bây giờ tốt hơn không bao giờ
“Bạn có thể trì hoãn, nhưng thời gian thì không, và thời gian đã mất thì không bao giờ tìm lại được. ” —Benjamin Franklin
Đối với những người mắc chứng trì hoãn như tôi và đang tìm kiếm sự thay đổi, hãy xem điều này và hợp tác với con quái vật hoảng loạn
Mặt khác, một khía cạnh khác của câu cách ngôn là ngăn bạn lập kế hoạch quá mức, điều này không hiệu quả hơn việc xem Netflix
Thuộc tính chung của sự trì hoãn và lập kế hoạch quá mức là
“Không có gì được thực hiện. ”
Mặc dù Không bao giờ Thường Tốt hơn *Ngay* Bây giờ
“Bây giờ còn hơn không” không có nghĩa là lập kế hoạch là vô ích. Viết ra ý tưởng và đặt mục tiêu chinh phục sẽ tốt hơn là làm ngay. Ví dụ, tôi thường dành một giờ vào Chủ nhật hàng tuần để vạch ra lịch trình hàng tuần của mình và cập nhật kế hoạch cho ngày mai ngay trước khi đi ngủ để kiểm tra xem có việc gì phải hoãn lại không.
Ảnh của Djim Loic trên Bapt
Nếu việc triển khai khó giải thích, thì đó là một ý tưởng tồi
Nhớ lại ý tưởng “Phức tạp tốt hơn phức tạp. ” Thông thường, mã phức tạp có nghĩa là thiết kế yếu—đặc biệt là trong các ngôn ngữ lập trình cấp cao như Python. Tuy nhiên, trong một số trường hợp, sự phức tạp của kiến thức miền có thể khiến việc triển khai trở nên khó giải thích và làm thế nào để tối ưu hóa tính rõ ràng của nó mới là vấn đề. Đây là hướng dẫn để cấu trúc các dự án thúc đẩy thành tích của bạn
Cấu trúc dự án của bạn — Hướng dẫn về Python của người quá giang
“Cấu trúc” có nghĩa là các quyết định bạn đưa ra liên quan đến cách dự án của bạn đáp ứng tốt nhất mục tiêu của nó. Chúng ta cần phải xem xét…
tài liệu. hướng dẫn python. tổ chức
Nếu việc triển khai dễ giải thích, đó có thể là một ý tưởng hay
Chuyên môn lập trình là làm cho thiết kế [hoặc thậm chí là cuộc sống của mọi người] dễ dàng hơn trong khi kiến thức nền tảng có thể sâu sắc và tôi nghĩ đây là phần khó nhất của lập trình
Ảnh của Thought Catalog trên Bapt
Tận dụng sự đơn giản và dễ đọc trong Python để thực hiện những ý tưởng điên rồ
Không gian tên là một ý tưởng tuyệt vời - Hãy làm nhiều hơn nữa
Cuối cùng nhưng không kém phần quan trọng, một không gian tên là một tập hợp các ký hiệu được sử dụng để tổ chức các loại đối tượng khác nhau sao cho các đối tượng này có thể được gọi bằng các tên duy nhất. Trong Python, một không gian tên là một hệ thống bao gồm