Bài viết này là tập hợp các phương pháp hay nhất để biết thêm về các mã đặc biệt trong python, đặc biệt nếu bạn chưa quen với python.
Xử lý ngoại lệ
Đây là một cách xử lý nếu mã của bạn gặp lỗi
# Cách chưa hay
try:
do_something()
except:
pass
# Một cách tốt hơn (them vào logging), nhưng vẫn chưa tốt:
try:
do_something()
except Exception:
logging.exception()
# Một cách tốt hơn:
try:
do_something()
except ValueError:
logging.exception()
# thêm vào đoạn code xử lý ngoại lệ
Ở đây ta đã sử dụng loại Exception cụ thể (ValueError)
Các toán tử so sánh liên tiếp
Có nhiều cách so sánh trong Python:
# Đừng như thế:
if 0 < x and x < 10:
print('x lớn hơn 0 nhưng nhỏ hơn 10')
# Hãy thực hiện:
if 0 < x < 10:
print('x lớn hơn 0 nhưng nhỏ hơn 10')
Đối số mặc định có thể thay đổi
# cách sai !
# cách này sẽ dẫn đến bug trong chương trình của bạn
def add_fruit(fruit, box=[]):
box.append(fruit)
return box
# cách đúng
def add_fruit(fruit, box=None):
if box is None:
box = []
box.append(fruit)
return box
Định dạng chuỗi
# Tránh sử dụng
# %-formatting
name = "Trong Nghia”
profession = "Coach"
print("Hello, %s. You are a %s." % (name, profession))
# Tốt hơn chút
# str.format()
print("Hello, {}. You are a {}.".format(name, profession))
# Ngon lành !
# f-strings
print(f"Hello, {name}. You are a {profession}.")
Chữ f trong chuỗi f cũng là viết tắt của “nhanh (fast)”. f-string nhanh hơn cả % -formatting và str.format().
Biểu thức điều kiện
if x < 10:
return 1
else:
return 2
Có thể được tinh gọn thành:
return 1 if x < 10 else 2
Lặp lại trên một biến lặp
Bạn không nhất thiết phải lặp lại các chỉ số của các phần tử trong một biến lặp nếu bạn không cần chúng. Bạn có thể lặp lại trực tiếp qua các phần tử.
Điều này làm cho mã của bạn trở nên python hơn.
list_of_fruits = ["apple", "pear", "orange"]
# cách tệ
for i in range(len(list_of_fruits)):
fruit = list_of_fruits[i]
process_fruit(fruit)
# cách tốt
for fruit in list_of_fruits:
process_fruit(fruit)
Lập chỉ mục / Đếm trong quá trình lặp
# Đừng:
index = 0
for value in collection:
print(index, value)
index += 1
# Hay giống vậy
for index in range(len(collection)):
value = collection[index]
print(index, value)
# Cũng đừng như vậy
index = 0
while index < len(collection):
value = collection[index]
print(index, value)
index += 1
# Hãy sử dụng `enumerate()`
for index, value in enumerate(collection):
print(index, value)
Sử dụng trình quản lý ngữ cảnh
Python cung cấp trình quản lý ngữ cảnh quản lý chi phí khởi tạo và giải phóng tài nguyên và cho phép bạn tập trung vào việc triển khai. Ví dụ trong trường hợp đọc một tập tin, bạn không cần quan tâm đến việc đóng tệp theo cách thủ công.
d = {"foo": 1}
# cách tệ
f = open("data.csv", "wb")
f.write("some data")
v = d["bar"] # KeyError
f.close() # dòng này sẽ không bao giờ được thực thi nên dẫn đến ảnh hưởng bộ nhớ
f.close()
# cách hay
with open("data.csv", "wb") as f:
f.write("some data")
v = d["bar"]
# python vẫn thực hiện f.close() dù cho xảy ra lỗi KeyError