Tôi thấy mã hóa cứng (sic) "" Mỗi lần kiểm tra một chuỗi trống không tốt.
Phương pháp tiếp cận mã sạch
Làm điều này: foo == "" là thực hành rất tệ. "" là một giá trị kỳ diệu. Bạn không bao giờ nên kiểm tra chống lại các giá trị ma thuật (thường được gọi là số ma thuật)
Những gì bạn nên làm là so sánh với một tên biến mô tả.
Tên biến mô tả
Người ta có thể nghĩ rằng "trống_string" là một tên biến mô tả. Nó không phải là.It isn't.
Trước khi bạn đi và làm empty_string = "" và nghĩ rằng bạn có một tên biến tuyệt vời để so sánh với. Đây không phải là những gì "Tên biến mô tả" có nghĩa là.
Một tên biến mô tả tốt dựa trên bối cảnh của nó. Bạn phải suy nghĩ về chuỗi trống là gì.is.
- Nó đến từ đâu.
- Tại sao nó ở đó.
- Tại sao bạn cần kiểm tra nó.
Ví dụ trường mẫu đơn giản
Bạn đang xây dựng một biểu mẫu nơi người dùng có thể nhập các giá trị. Bạn muốn kiểm tra xem người dùng có viết gì đó hay không.
Một tên biến tốt có thể là if csvfield == CSV_NONE: csvfield = None 0
Điều này làm cho mã rất dễ đọc
if formfields.name == not_filled_in: raise ValueError("We need your name")Ví dụ phân tích cú pháp CSV kỹ lưỡng
Bạn đang phân tích các tệp CSV và muốn chuỗi trống được phân tích cú pháp là if csvfield == CSV_NONE: csvfield = None 1
(Vì CSV hoàn toàn dựa trên văn bản, nên nó không thể biểu thị if csvfield == CSV_NONE: csvfield = None 1 mà không sử dụng từ khóa được xác định trước)
Một tên biến tốt có thể là if csvfield == CSV_NONE: csvfield = None 3
Điều này làm cho mã dễ dàng thay đổi và điều chỉnh nếu bạn có tệp CSV mới đại diện cho if csvfield == CSV_NONE: csvfield = None 1 với một chuỗi khác so với ""
if csvfield == CSV_NONE: csvfield = NoneKhông có câu hỏi về việc nếu đoạn mã này là chính xác. Rõ ràng là nó làm những gì nó nên làm.
So sánh điều này với
if csvfield == EMPTY_STRING: csvfield = NoneCâu hỏi đầu tiên ở đây là, tại sao chuỗi trống xứng đáng được đối xử đặc biệt?
Điều này sẽ nói với các lập trình viên tương lai rằng một chuỗi trống phải luôn luôn được coi là if csvfield == CSV_NONE: csvfield = None 1.
Điều này là do nó kết hợp logic kinh doanh (giá trị CSV nên là if csvfield == CSV_NONE: csvfield = None 1) với việc triển khai mã (chúng ta thực sự so sánh với điều gì)
Cần phải có một sự tách biệt của mối quan tâm giữa hai người.
Chuyển đổi không thành một chuỗi trống trong python #
Sử dụng boolean hoặc toán tử để chuyển đổi không có chuỗi trống trong Python, ví dụ: if csvfield == CSV_NONE: csvfield = None 8. Boolean hoặc toán tử trả về giá trị bên trái nếu đó là sự thật, nếu không giá trị bên phải được trả về. Vì if csvfield == CSV_NONE: csvfield = None 1 là một giá trị giả, hoạt động sẽ trả về "".
Copied!
name = None result = name or "" print(result) # 👉️ ""Chúng tôi đã sử dụng boolean hoặc toán tử để trả về một chuỗi trống nếu giá trị bên trái là giả.
Tất cả các giá trị không phải là sự thật được coi là giả mạo. Các giá trị giả trong Python là:
- Các hằng số được xác định là giả mạo: if csvfield == CSV_NONE: csvfield = None 1 và if csvfield == EMPTY_STRING: csvfield = None 2.
- if csvfield == EMPTY_STRING: csvfield = None 3 (không) thuộc bất kỳ loại số nào
- Trình tự trống và bộ sưu tập: "" (Chuỗi trống), if csvfield == EMPTY_STRING: csvfield = None 5 (Tuple trống), if csvfield == EMPTY_STRING: csvfield = None 6 (danh sách trống), if csvfield == EMPTY_STRING: csvfield = None 7 (Từ điển trống), if csvfield == EMPTY_STRING: csvfield = None 8 (bộ trống), if csvfield == EMPTY_STRING: csvfield = None 9 (phạm vi trống).
Biểu thức Copied!
Vì if csvfield == CSV_NONE: csvfield = None 1 là một giá trị giả, nên biểu thức
Copied!
name = None result = name or "" print(result) # 👉️ "" 2 sẽ luôn trả vềCopied!
name = None result = name or "" print(result) # 👉️ "" 3.Lưu ý rằng biểu thức Copied! Copied! Copied!
Ngoài ra, bạn có thể sử dụng câu lệnh
Copied!
name = None result = name or "" print(result) # 👉️ "" 9 để kiểm tra xem biến có lưu trữ if csvfield == CSV_NONE: csvfield = None 1 hay không và chỉ định lại nó thành một chuỗi trống.Copied!
name = None if name is None: name = "" print(name) # 👉️ ""Kiểm tra if csvfield == CSV_NONE: csvfield = None 1 rõ ràng hơn nhiều và khối
Copied!
name = None result = name or "" print(result) # 👉️ "" 9 sẽ chỉ chạy nếu biến lưu trữ giá trị if csvfield == CSV_NONE: csvfield = None 1.Điều kiện sẽ không được thỏa mãn nếu biến lưu trữ bất kỳ giá trị giả nào khác.
Bạn cũng có thể sử dụng câu lệnh
Copied!
name = None if name is None: name = "" print(name) # 👉️ "" 4 một lớp.Copied!
name = None name = "" if name is None else name print(name) # 👉️ ""Nếu biến lưu trữ if csvfield == CSV_NONE: csvfield = None 1, nó sẽ được đặt thành một chuỗi trống, nếu không nó sẽ được đặt thành giá trị hiện tại của nó.
Copied!
name = 'hello' name = "" if name is None else name print(name) # 👉️ "hello"