Hướng dẫn idiomatic python - con trăn thành ngữ
"Idiomatic python" có nghĩa là viết code theo cách mà cộng đồng Python cho rằng code nên được viết như vậy. Ai là người quyết định code nên được viết như thế nào? Tất nhiên là tất cả những người phát triển Python, thông qua code của họ đã làm nên cái gì gọi là idiomatic. Đó cũng là nội dung sẽ được trình bày trong bài viết này. Người thực sự quyết định trong một số trường hợp là BDFL (Guido) hoặc PEP. Show
Bạn chưa biết gì về pythonic code? Không sao, trong bài viết này sẽ trình bày cho bạn một số khái niệm cơ bản, giúp chúng ta viết code Python một cách chuyên nghiệp và "Pythonic" nhất. Cấu trúc điều khiển và hàmLệnh |
Định dang code tuân theo PEP 8 | Python có một bộ tiêu chuẩn về định dạng code của ngôn ngữ là PEP 8. Nếu bạn xem các commit của một dự án Python, bạn có thể thấy một vài commit liên quan đến sửa code theo PEP 8. Lý do rất đơn giản: Nếu tất cả chúng ta đều đồng ý với một bộ quy tắc chung về đặt tên là định dạng code, thì code Python sẽ rất dễ hiểu với cả người mới và những lập trình viên có kinh nghiệm. PEP 8 là một ví dụ rất rõ ràng về các idiom trong cộng đồng Python. Hãy đọc nó, cài đặt cách package hỗ trợ vào editor của bạn (editor nào cũng có cả) và viết code theo cách mà cộng đồng Python đã tuân theo. Dưới đây là một số ví dụ: | Identifier Type |
---|---|---|
Format | Example | Class |
CamelCase | True 24 | Variable |
Words joined by True 13 | True 24 | Variable |
Words joined by True 13 | True 26 | Function |
True
28
Constant
All uppercase
True
29
Về cơ bản những thứ chưa được liệt kê nên được đặt tên giống quy tắc với đặt tên biến/hàm (từ ngăn cách bằng dấu gạch dưới).
Script thực thi
Harmful
Idiomatic
Tránh đặt nhiều lệnh trên cùng dòng
Mặc dù ngôn ngữ cho phép chúng ta dùng dấu chấm phẩy (True
20) để kết thúc lệnh, nhưng việc dùng nó mà không có lý do gì đặc biệt sẽ làm code khó hiểu hơn. Đặc biệt khi bạn dùng nó để đặt các lệnh trên một dòng, nhất là kết hợp với if
, False
8 và False
9 thì vấn đề còn tồi tệ hơn nữa.
Harmful
Idiomatic
Tránh đặt nhiều lệnh trên cùng dòng
Mặc dù ngôn ngữ cho phép chúng ta dùng dấu chấm phẩy (True
20) để kết thúc lệnh, nhưng việc dùng nó mà không có lý do gì đặc biệt sẽ làm code khó hiểu hơn. Đặc biệt khi bạn dùng nó để đặt các lệnh trên một dòng, nhất là kết hợp với if
, False
8 và False
9 thì vấn đề còn tồi tệ hơn nữa.
Định dang code tuân theo PEP 8
Python có một bộ tiêu chuẩn về định dạng code của ngôn ngữ là PEP 8. Nếu bạn xem các commit của một dự án Python, bạn có thể thấy một vài commit liên quan đến sửa code theo PEP 8. Lý do rất đơn giản: Nếu tất cả chúng ta đều đồng ý với một bộ quy tắc chung về đặt tên là định dạng code, thì code Python sẽ rất dễ hiểu với cả người mới và những lập trình viên có kinh nghiệm. PEP 8 là một ví dụ rất rõ ràng về các idiom trong cộng đồng Python. Hãy đọc nó, cài đặt cách package hỗ trợ vào editor của bạn (editor nào cũng có cả) và viết code theo cách mà cộng đồng Python đã tuân theo. Dưới đây là một số ví dụ:
Identifier Type
Format
Harmful
Idiomatic
Không sử dụng True
54 để import nội dung module
Sử dụng dấu 0
7 (ví dụ True
54) là cách nhanh nhất đề làm lộn xộn namespace của bạn. Điều này thậm chí gây ra một số vấn đề nếu tên bạn định nghĩa trùng với tên được import từ package.
Nhưng nếu bạn cần phải import một lượng lớn các đối tượng từ package True
6 bạn phải làm thế nào? Hãy sử dụng ngoặc đơn None
1 để nhóm các đối tượng trong một lệnh True
19. Bạn không cần phải viết 10 dòng để import từ cùng một module, và namespace của bạn vẫn rất gọn gàng.
Tốt hơn cả, bạn nên sử dụng import tuyệt đối. Nếu tên package hay module quá dài, bạn có thể dùng mệnh đề True
48 đề thu gọn chúng.
Harmful
Idiomatic
Không sử dụng True
54 để import nội dung module
Sử dụng dấu 0
7 (ví dụ True
54) là cách nhanh nhất đề làm lộn xộn namespace của bạn. Điều này thậm chí gây ra một số vấn đề nếu tên bạn định nghĩa trùng với tên được import từ package.tất cả các lệnh import ở phần trên cùng của mỗi file, chọn một thứ tự chuẩn để sắp xếp các lệnh import và tuân thủ theo chuẩn này. Bởi vì thứ tự import nhiều khi không quan trọng, nhưng thứ tự sau được recommend bởi Python's Programming FAQ:
- Nhưng nếu bạn cần phải import một lượng lớn các đối tượng từ package
True
6 bạn phải làm thế nào? Hãy sử dụng ngoặc đơnNone
1 để nhóm các đối tượng trong một lệnhTrue
19. Bạn không cần phải viết 10 dòng để import từ cùng một module, và namespace của bạn vẫn rất gọn gàng. - Tốt hơn cả, bạn nên sử dụng import tuyệt đối. Nếu tên package hay module quá dài, bạn có thể dùng mệnh đề
True
48 đề thu gọn chúng. - Sắp xếp các lệnh
True
19 theo thứ tự chuẩn
Khi dự án lớn dần lên (nhất là với các dự án phát triển Web), sẽ có rất nhiều lệnh import khác nhau được thực hiện. Hãy để tất cả các lệnh import ở phần trên cùng của mỗi file, chọn một thứ tự chuẩn để sắp xếp các lệnh import và tuân thủ theo chuẩn này. Bởi vì thứ tự import nhiều khi không quan trọng, nhưng thứ tự sau được recommend bởi Python's Programming FAQ:
Harmful
Idiomatic
Không sử dụng True54 để import nội dung module
Sử dụng dấu 07 (ví dụ True54) là cách nhanh nhất đề làm lộn xộn namespace của bạn. Điều này thậm chí gây ra một số vấn đề nếu tên bạn định nghĩa trùng với tên được import từ package.
Nhưng nếu bạn cần phải import một lượng lớn các đối tượng từ package True
6 bạn phải làm thế nào? Hãy sử dụng ngoặc đơn None
1 để nhóm các đối tượng trong một lệnh True
19. Bạn không cần phải viết 10 dòng để import từ cùng một module, và namespace của bạn vẫn rất gọn gàng.
Tốt hơn cả, bạn nên sử dụng import tuyệt đối. Nếu tên package hay module quá dài, bạn có thể dùng mệnh đề True
48 đề thu gọn chúng.
Sắp xếp các lệnh True
19 theo thứ tự chuẩn
Khi dự án lớn dần lên (nhất là với các dự án phát triển Web), sẽ có rất nhiều lệnh import khác nhau được thực hiện. Hãy để tất cả các lệnh import ở phần trên cùng của mỗi file, chọn một thứ tự chuẩn để sắp xếp các lệnh import và tuân thủ theo chuẩn này. Bởi vì thứ tự import nhiều khi không quan trọng, nhưng thứ tự sau được recommend bởi Python's Programming FAQ:
Các module thư viện chuẩn
Các module thư viện bên thứ 3 được cài trong True
62
Các module trong dự án hiện tại
Nhiều người chọn sắp xếp các lệnh import theo thứ tự từ điển. Nhiều người khác nghĩ rằng như thế là ngu ngốc. Thực ra, chẳng có vấn đề gì cả. Những gì bạn cần làm là chọn ra một chuẩn quy tắc và tuân thủ theo nó.
Lời khuyên chung
Tránh "tái phát minh bánh xe"
Hiểu nội dung của thư viện Python chuẩn
Sử dụng hàm của True
73 khi làm việc với đường dẫn các file, thư mục
Khi viết một script dạng command-line, những developer mới thường sử dụng đến các phép toán của xâu để thao tác với dường dẫn của file và thư mục. Python có một module rất đầy đủ và dành riêng cho việc này, đó là True
73. Sử dụng True
73 làm giảm nguy cơ xảy ra các lỗi phổ biến, làm code của bạn khả chuyển hơn, và dễ hiểu hơn.
Harmful
Idiomatic