Các phương pháp tốt nhất trong Python
Bài viết này giải thích các phương pháp tốt nhất trong Python.
Chúng tôi sẽ giải thích các phương pháp tốt nhất trong Python bằng các ví dụ mã thực tế, giới thiệu cách viết mã dễ đọc và dễ bảo trì.
YouTube Video
Các phương pháp tốt nhất trong Python
Đặt tính dễ đọc làm ưu tiên hàng đầu
Đầu tiên, hãy xem xét việc 'đặt tính dễ đọc lên hàng đầu'.
Python là một ngôn ngữ đề cao tính 'dễ đọc'. Trước hết, hãy ưu tiên viết mã mà ý định của nó rõ ràng ngay từ cái nhìn đầu tiên.
1# Bad example: unclear variable names
2a = 10
3b = 5
4c = a * bTrong đoạn mã này, tên biến không thể hiện ý nghĩa của chúng, nên người khác sẽ mất thời gian để hiểu sau này.
1# Good example: descriptive variable names
2price = 10
3quantity = 5
4total_cost = price * quantityBằng cách đặt tên biến cụ thể, mã của bạn tự nó đã trở thành tài liệu hướng dẫn.
Viết mã rõ ràng
Tiếp theo, hãy xem xét việc 'viết mã rõ ràng'.
Trong Python, 'ý định rõ ràng' được ưu tiên hơn 'hành vi ngầm định'.
1# Bad example: implicit truthy check
2if data:
3 process(data)Trong đoạn mã này, không rõ data được mong đợi ở dạng nào, điều này dễ gây ra lỗi.
1# Good example: explicit condition
2if len(data) > 0:
3 process(data)Bằng cách làm rõ các điều kiện, ý định của mã sẽ phù hợp với đặc tả.
Giữ cho hàm nhỏ gọn và chỉ tập trung vào một nhiệm vụ duy nhất
Tiếp theo, hãy xem việc 'giữ cho hàm nhỏ và chỉ tập trung vào một nhiệm vụ duy nhất'.
Khi một hàm xử lý quá nhiều việc, việc kiểm thử và bảo trì sẽ trở nên khó khăn.
1# Bad example: doing too many things
2def handle_user(user):
3 save_to_database(user)
4 send_email(user)
5 write_log(user)Trong đoạn mã này, các quy trình bị ràng buộc chặt chẽ, khiến cho việc tái sử dụng và sửa đổi trở nên khó khăn.
1# Good example: single responsibility
2def save_user(user):
3 save_to_database(user)
4
5def notify_user(user):
6 send_email(user)
7
8def log_user(user):
9 write_log(user)Bằng cách chia nhỏ hàm, vai trò của chúng trở nên rõ ràng và thuận tiện cho việc kiểm thử.
Tích cực sử dụng chú thích kiểu
Tiếp theo, hãy xem xét việc 'tích cực sử dụng chú thích kiểu'.
Chú thích kiểu đóng vai trò như tài liệu và là công cụ mạnh mẽ để ngăn ngừa lỗi.
1# Bad example: Without type hints
2def add(a, b):
3 return a + bTrong đoạn mã này, kiểu của đối số và giá trị trả về không rõ ràng, dễ gây ra việc sử dụng sai.
1# Good example: With type hints
2def add(a: int, b: int) -> int:
3 return a + bNhờ chú thích kiểu, việc hoàn thành mã trên IDE, phân tích tĩnh và tính dễ đọc đều được cải thiện đáng kể.
Chỉ rõ khả năng trả về None
Tiếp theo, hãy xem xét việc 'chỉ rõ khả năng trả về None.'.
Các hàm có thể trả về None thường bị người sử dụng bỏ qua.
1# Bad example: Ambiguous return value
2def find_user(user_id):
3 if user_id == 1:
4 return {"id": 1, "name": "Alice"}
5 return NoneTrong đoạn mã này, không rõ liệu có giá trị trả về hay không.
1# Good example: explicit return type
2from typing import Optional, Dict, Any
3
4def find_user(user_id: int) -> Optional[Dict[str, Any]]:
5 if user_id == 1:
6 return {"id": 1, "name": "Alice"}
7 return NoneBằng cách sử dụng Optional, bạn có thể truyền đạt khả năng trả về None dưới dạng kiểu dữ liệu.
Đừng bắt ngoại lệ quá rộng
Tiếp theo, hãy xem xét việc 'không bắt ngoại lệ quá rộng'.
Xử lý ngoại lệ nên chỉ bắt những gì thực sự cần thiết.
1# Bad example: catching all exceptions
2try:
3 result = int(value)
4except Exception:
5 result = 0Đoạn mã này có thể che giấu các lỗi lẽ ra phải được phát hiện.
1# Good example: catch specific exception
2try:
3 result = int(value)
4except ValueError:
5 result = 0Bằng cách giới hạn ngoại lệ, bạn sẽ không bỏ qua các vấn đề bất ngờ.
Xử lý tài nguyên an toàn bằng câu lệnh with
Tiếp theo, hãy xem xét việc 'xử lý tài nguyên an toàn bằng câu lệnh with.'.
Các tài nguyên như tệp tin và khóa phải luôn được giải phóng một cách đáng tin cậy.
1# Bad example: manual close
2file = open("data.txt")
3content = file.read()
4file.close()Trong đoạn mã này, nếu xảy ra ngoại lệ, close() có thể sẽ không được gọi.
1# Good example: using context manager
2with open("data.txt") as file:
3 content = file.read()Bằng cách sử dụng câu lệnh with, việc dọn dẹp sẽ được thực hiện an toàn ngay cả khi có ngoại lệ xảy ra.
Sử dụng list comprehensions một cách hợp lý
Tiếp theo, hãy xem xét việc 'sử dụng list comprehensions một cách hợp lý.'.
Quá trình chuyển đổi đơn giản có thể được viết ngắn gọn bằng list comprehensions.
1# Bad example: Verbose loop
2squares = []
3for i in range(10):
4 squares.append(i * i)Trong đoạn mã này, quá trình chính rất khó nhìn thấy.
1# Good example: Clear list comprehension
2squares = [i * i for i in range(10)]Bằng cách sử dụng list comprehensions một cách hợp lý, tính dễ đọc của mã được cải thiện.
Tránh sử dụng magic numbers
Tiếp theo, hãy xem xét việc 'tránh sử dụng magic numbers.'.
Việc viết trực tiếp các con số và chuỗi làm cho ý nghĩa của chúng không rõ ràng.
1# Bad example: magic number
2if status == 404:
3 handle_not_found()Trong đoạn mã này, giả định rằng bạn biết ý nghĩa của 404.
1# Good example: named constant
2NOT_FOUND = 404
3
4if status == NOT_FOUND:
5 handle_not_found()Đặt tên sẽ làm rõ ý định.
Viết mã dễ bảo trì, không chỉ là mã 'chạy được'
Cuối cùng, hãy xem xét việc 'viết mã dễ bảo trì, không chỉ là mã chạy được.'.
Điều quan trọng là liệu bạn trong tương lai hoặc người khác có thể đọc được nó hay không.
1# Bad example: Hard to maintain
2def f(x):
3 return x * 1.08 + 100Trong đoạn mã này, đặc tả không thể hiểu được từ mã nguồn.
1# Good example: Easy to maintain
2TAX_RATE = 1.08
3BASE_FEE = 100
4
5def calculate_total(price: float) -> float:
6 return price * TAX_RATE + BASE_FEEBằng cách thể hiện ý nghĩa trong tên gọi, bản thân mã đã trở thành đặc tả.
Tóm tắt
Các phương pháp tốt nhất trong Python là viết mã dễ hiểu hơn là mã thông minh, phức tạp. Xây dựng những thói quen nhỏ giúp tạo ra mã ít lỗi hơn và có thể sử dụng lâu dài.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.