Xin chào mọi người, hôm nay mình xin giới thiệu 1 số convention nhằm giúp bạn viết code Python đẹp hơn, hay theo cách gọi của các lập trình viên Python: Pythonic hơn.
Tiêu chuẩn viết code Python chính thức là PEP 8 (Python Enhancements Proposal8 ) 0- style guide. Các chuẩn này thì khá nhiều, mình sin tóm tắt ở dưới một số chuẩn tiêu biểu như sau:
1. Cách dòng và thụt vào
Bạn nên dùng 4 ký tự space ở mỗi tầng indent. Nếu dòng của bạn quá dài (>79 hoặc >119 ký tự tùy nơi), bạn có thể tách dòng đó thành nhiều dòng khác. Chú ý, các thành phần được xuống dòng nên được sắp xếp thẳng đứng với các thành phần ở dòng trên:
Ví dụ:
Đúng
1 2 3 4 5 | func <span class="token operator">=</span> this_is_a_long_function<span class="token punctuation">(</span>horse<span class="token punctuation">,</span> unicorn<span class="token punctuation">,</span> beetle_bug<span class="token punctuation">,</span> giant_whale<span class="token punctuation">)</span> |
Sai
1 2 3 4 | func <span class="token operator">=</span> this_is_a_long_function<span class="token punctuation">(</span>horse<span class="token punctuation">,</span> unicorn<span class="token punctuation">,</span> beetle_bug<span class="token punctuation">,</span> giant_whale<span class="token punctuation">)</span> |
Bạn cũng có thể thêm 4 ký tự space (tương đương với 1 lần thụt vào nữa) để phân biệt các tham số với các thành phần khác trong hàm
Ví dụ:
Đúng
1 2 3 4 5 6 7 | <span class="token keyword">def</span> <span class="token function">this_is_a_long_function</span><span class="token punctuation">(</span>horse<span class="token punctuation">,</span> unicorn<span class="token punctuation">,</span> beetle_bug<span class="token punctuation">,</span> giant_whale<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">pass</span> |
Sai
1 2 3 4 5 6 | <span class="token keyword">def</span> <span class="token function">this_is_a_long_function</span><span class="token punctuation">(</span> horse<span class="token punctuation">,</span> unicorn<span class="token punctuation">,</span> beetle_bug<span class="token punctuation">,</span> giant_whale<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">pass</span> |
2. Dùng Tab hay Space ?
Trong Python thì Space (dấu cách) được ưu tiên hơn. Còn dấu Tab nên sử dụng trong các trường hợp mà code đã sử dụng sẵn Tab rồi.
*Lưu ý: Python 3 không cho phép sử dụng Tab và Space lẫn lộn trong cùng 1 file.
3. Xuống dòng trước hay sau toán tử?
Điều này thực ra vẫn còn gây ra tranh cãi, nhưng một số lập trình viên Python thích xuống dòng sau toán tử để phù hợp với các cách biểu diễn trong toán học:
1 2 3 4 5 6 | <span class="token builtin">sum</span> <span class="token operator">=</span> <span class="token punctuation">(</span>number_1 <span class="token operator">+</span> number_2 <span class="token operator">+</span> number_3 <span class="token operator">+</span> number_4 <span class="token punctuation">)</span> |
4. Dòng trống
Bạn nên bọc định nghĩa của def
vàClass
với các phần trên bằng 2 dòng trống, và các method trong Class
cách nhau 1 dòng trống.
5. Import
Mỗi dòng chỉ nên import 1 thư viện.
Ví dụ:
Đúng:
1 2 3 | <span class="token keyword">import</span> flask <span class="token keyword">import</span> app |
Sai:
1 2 | <span class="token keyword">import</span> flask<span class="token punctuation">,</span> app |
Tuy nhiên, nếu import 2 module con từ 1 thư viện, bạn có thể import trong 1 dòng.
1 2 | <span class="token keyword">from</span> Flask <span class="token keyword">import</span> flask<span class="token punctuation">,</span> app |
Các lệnh import
nên được đặt ở đầu file, trước khi bạn khai báo các module và biến/hằng số.
Bạn nên nhóm các lệnh import theo thứ tự sau:
- Các thư viện tiêu chuẩn như os, sys
- Các thư viện bên thứ 3
- Các module/thư viện local
6. Sử dụng dấu cách
Bạn nên tránh các dấu cách thừa trong các trường hợp sau:
- Ngay bên trong ngoặc.
Đúng:
1 2 | foo <span class="token operator">=</span> <span class="token punctuation">(</span>bar<span class="token punctuation">,</span> buz<span class="token punctuation">)</span> |
Sai:
1 2 | foo <span class="token operator">=</span> <span class="token punctuation">(</span>bar<span class="token punctuation">,</span> buz <span class="token punctuation">)</span> |
- Ở sau dấu phẩy và trước ngoặc đóng
Đúng:
1 2 | foo <span class="token operator">=</span> <span class="token punctuation">(</span>bar<span class="token punctuation">,</span><span class="token punctuation">)</span> |
Sai:
1 2 | foo <span class="token operator">=</span> <span class="token punctuation">(</span>bar<span class="token punctuation">,</span> <span class="token punctuation">)</span> |
- Ngay trước dấu phẩy, chấm phẩy, hoặc hai chấm
Đúng:
1 2 | <span class="token keyword">if</span> a <span class="token keyword">is</span> <span class="token boolean">True</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> x<span class="token punctuation">,</span> y <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span> |
Sai:
1 2 | <span class="token keyword">if</span> a <span class="token keyword">is</span> <span class="token boolean">True</span> <span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> x <span class="token punctuation">,</span> y <span class="token operator">=</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> |
Mỗi lần gán biến, chỉ cần một dấu cách
Đúng:
1 2 3 4 | foo <span class="token operator">=</span> <span class="token number">1</span> bar <span class="token operator">=</span> <span class="token number">2</span> this_is_a_really_long_name <span class="token operator">=</span> <span class="token number">3</span> |
Sai:
1 2 3 4 | foo <span class="token operator">=</span> <span class="token number">1</span> bar <span class="token operator">=</span> <span class="token number">2</span> this_is_a_really_long_name <span class="token operator">=</span> <span class="token number">3</span> |
7. Cách đặt tên
- Tên Class và Exception nên viết hoa mỗi chữ cái đầu tiên của từ
1 2 | Class SomeExampleClass |
- Tên hàm và biến nên viết thường và tách từ bằng ký tự _
1 2 | def some_example_function |
- Tên hằng số nên viết hoa toàn bộ
1 2 | CONSTANT_STRING = "STRING" |
Đó là một số convention cơ bản nhất giúp bạn viết code Python, cảm ơn các bạn đã đọc. Chúng ta sẽ quay lại chủ đề này trong 1 bài viết tương lai. Nếu muốn, bạn có thể đọc thêm ở đây.