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 = None
Khô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 = None
Câ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ụ:
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ề if csvfield == CSV_NONE:
csvfield = None
""
.
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:
1 vàif csvfield == CSV_NONE: csvfield = None
2.if csvfield == EMPTY_STRING: csvfield = None
3 [không] thuộc bất kỳ loại số nàoif csvfield == EMPTY_STRING: csvfield = None
- Trình tự trống và bộ sưu tập:
""
[Chuỗi trống],
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].if csvfield == EMPTY_STRING: csvfield = None
Biểu thức Copied!
name = None
result = name or ""
print[result] # 👉️ ""
0 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ả, nên biểu thức 2 sẽ luôn trả vềCopied!
name = None result = name or "" print[result] # 👉️ ""
3.Copied!
name = None result = name or "" print[result] # 👉️ ""
Lưu ý rằng biểu thức Copied! Copied! Copied!
0 cũng sẽ trả về name = None
result = name or ""
print[result] # 👉️ ""
3 nếu name = None
result = name or ""
print[result] # 👉️ ""
6 là bất kỳ giá trị giả nào khác, ví dụ: name = None
result = name or ""
print[result] # 👉️ ""
3, if csvfield == EMPTY_STRING:
csvfield = None
2 hoặc một danh sách trống, dict hoặc tuple.if csvfield == EMPTY_STRING:
csvfield = None
Ngoài ra, bạn có thể sử dụng câu lệnh
9 để kiểm tra xem biến có lưu trữCopied!
name = None result = name or "" print[result] # 👉️ ""
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 9 sẽ chỉ chạy nếu biến lưu trữ giá trịCopied!
name = None result = name or "" print[result] # 👉️ ""
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
4 một lớp.Copied!
name = None if name is None: name = "" print[name] # 👉️ ""
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"