7 thủ thuật để viết mã Python tốt hơn
Viết mã làm việc không phải lúc nào cũng đủ; bạn cũng nên cố gắng viết mã có cấu trúc tốt, dễ hiểu. Mã sạch sẽ giúp bạn—và những người khác—dễ dàng bảo trì phần mềm của bạn.
Python có nhiều tính năng và chức năng có thể giúp bạn viết mã gọn gàng hơn. Đây là một số cái tốt nhất.
Mục Lục
1. Tự động đóng tài nguyên với Trình quản lý ngữ cảnh
Việc đóng tài nguyên theo cách thủ công có thể gây bất tiện khi mã của bạn tương tác với nhiều tài nguyên. Bạn có thể quên đóng một tài nguyên. Điều này làm cho chương trình của bạn sử dụng tài nguyên hệ thống không hiệu quả, có thể dẫn đến rò rỉ bộ nhớ.
Mã này mở một tệp, sau đó đóng tệp theo cách thủ công:
file = open('test.txt', 'r')
file_contents = file.read()
file.close()
words = file_contents.split(' ')
word_count = len(words)
print(word_count)
Bạn có thể tự động hóa việc đóng tệp bằng trình quản lý ngữ cảnh. Trình quản lý ngữ cảnh xử lý tài nguyên cho bạn, vì vậy bạn không cần phải nhớ quản lý chúng theo cách thủ công. Sử dụng với câu lệnh để tạo ngữ cảnh để quản lý tài nguyên:
with open('test.txt', 'r') as file:
file_contents = file.read()
words = file_contents.split(' ')
word_count = len(words)
print(word_count)
Mã trong khối này chạy trong ngữ cảnh của đối tượng tệp mở trở lại. Python tự động đóng tệp đó khi mã rời khỏi ngữ cảnh đó, ngay cả khi có ngoại lệ xảy ra.
2. Viết câu lệnh có điều kiện rõ ràng hơn
Bạn có thể thấy mình viết rất nhiều mã không cần thiết khi xử lý các câu lệnh if-else. Python có các toán tử bậc ba sẽ giúp bạn viết các câu lệnh ngắn gọn hơn. Khối mã dưới đây hiển thị một câu lệnh if-else bình thường.
condition = Trueif condition:
x = 1
else:
x = 0
print(x)
Bạn có thể viết lại mã này bằng toán tử bậc ba cho phép bạn viết điều kiện trong một dòng mã.
condition = True
x = 1 if condition else 0
print(x)
Điều quan trọng cần lưu ý là bạn nên sử dụng toán tử bậc ba khi triển khai logic đơn giản. Trong logic phức tạp hơn và các câu lệnh điều kiện lồng nhau, toán tử bậc ba có thể trở nên khó hiểu.
3. Theo dõi các mục với chức năng liệt kê
Khi lặp qua danh sách Python, bạn có thể truy cập chỉ mục của mục hiện tại theo hai cách. Một cách là sử dụng vòng lặp for truyền thống. Điều này hoạt động tốt, nhưng mã không sạch như mong muốn. Nó cũng yêu cầu bạn khởi tạo chỉ mục theo cách thủ công.
cars = ['Bugatti', 'Mercedes', 'Toyota']
index = 0for car in cars:
print(index, car)
index += 1
Một cách khác là sử dụng hàm liệt kê tích hợp sẵn của Python. Điều này sẽ cho phép bạn truy cập chỉ mục và giá trị tương ứng trong danh sách trong khi lặp.
cars = ['Bugatti', 'Mercedes', 'Toyota']for index, car in enumerate (cars):
print(index, car)
Bây giờ bạn không phải theo dõi chỉ mục theo cách thủ công.
4. Lặp lại nhiều danh sách với chức năng Zip
Bạn cũng có thể sử dụng hàm liệt kê để lặp qua nhiều danh sách cùng một lúc. Lấy chỉ mục của danh sách đầu tiên, sau đó sử dụng nó để truy cập các giá trị tương ứng trong các danh sách khác.
english_names = ['food', 'water', 'car']
spanish_names = ['alimento', 'agua', 'auto']for index, name in enumerate(english_names):
spanish = spanish_names [index]
print (f' {name} in spanish is {spanish}')
Điều này hoạt động tốt, nhưng bạn sẽ phải viết nhiều mã không cần thiết nếu số lượng danh sách tăng lên. Để viết mã sạch hơn, bạn có thể sử dụng chức năng zip và chuyển tên danh sách của mình cho nó.
english_names = ['food', 'water', 'car']
spanish_names = ['alimento', 'agua', 'auto']for english, spanish in zip(english_names, spanish_names):
print(f' {english} in spanish is {spanish}')
Bạn nên tiếp tục sử dụng hàm liệt kê để lặp qua một danh sách. Nhưng nếu bạn đang lặp lại nhiều danh sách cùng nhau, hãy cân nhắc sử dụng hàm zip.
5. Ẩn đầu vào nhạy cảm của người dùng với GetPass
Khi nhập thông tin nhạy cảm, đầu vào không được hiển thị dưới dạng văn bản thuần túy trên màn hình. Cách thông thường để lấy đầu vào trong Python là sử dụng hàm đầu vào:
username = input('Username: ')
password = input('Password: ')
print('Logging In...')
Tuy nhiên, chức năng nhập làm cho mật khẩu hiển thị dưới dạng văn bản thuần túy trên màn hình trong khi nhập. Để đảm bảo mật khẩu không hiển thị trên màn hình, bạn nên sử dụng hàm getpass để thay thế:
from getpass import getpass
username = input('Username: ')
password = getpass('Password:')
print('Logging In...')
Mô-đun getpass là một phần của thư viện chuẩn của Python, vì vậy bạn không cần cài đặt nó.
6. Làm cho số lớn có thể đọc được bằng cách sử dụng trình giữ chỗ gạch dưới
Khi bạn xử lý các số lớn trong chương trình của mình, chúng có thể rất khó đọc trong nháy mắt. Gán sai số cho các biến dẫn đến chương trình bị lỗi và việc phát hiện ra lỗi này có thể rất khó.
num1 = 10000000000
num2 = 100000000
total = num1 + num2
print(total)
Bạn có thể viết lại đoạn mã trên bằng cách sử dụng dấu gạch dưới để phân tách các nhóm hàng nghìn, một cách phổ biến để làm cho các số lớn dễ đọc hơn.
num1 = 10_000_000_000
num2 = 100_000_000
total = num1 + num2
print(f'{total:,}')
Chuỗi f trong hàm in phân tách đầu ra bằng dấu tách hàng nghìn.
7. Sử dụng chức năng trợ giúp để tìm hiểu thêm về mô-đun
Hàm trợ giúp rất quan trọng trong Python. Nó sẽ cho bạn biết cách sử dụng một mô-đun mà bạn đã cài đặt. Để sử dụng nó, hãy cài đặt mô-đun, sau đó khởi chạy trình thông dịch Python trong một thiết bị đầu cuối và trỏ đến đường dẫn bạn đã cài đặt mô-đun. Nhập mô-đun và cuối cùng chuyển tên của mô-đun cho chức năng trợ giúp.
Để khám phá những phương thức và thuộc tính nào bạn có thể sử dụng, hãy thay thế hàm trợ giúp bằng hàm dir.
Hàm dir trả về các phương thức và thuộc tính mà mô-đun hỗ trợ chứ không phải toàn bộ tài liệu. Điều này rất hữu ích khi bạn muốn có một cái nhìn thoáng qua về chức năng của mô-đun.
Viết mã Python sạch hơn
Python là một ngôn ngữ rất đa dạng. Như với bất kỳ ngôn ngữ nào khác, bạn sẽ trở nên giỏi hơn trong việc viết mã Python sạch hơn theo thời gian.
Python có nhiều mô-đun và chức năng tích hợp sẵn. Trong một số trường hợp, bạn có thể viết mã khó đọc vì bạn không biết về sự tồn tại của một chức năng nhất định. Để chắc chắn rằng bạn có nhiều thông tin hơn, bạn nên đọc thêm các bài viết về cách viết mã tốt hơn.