Hướng dẫn is none and empty string same in python? - không và chuỗi trống có giống nhau trong python không?

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ụ:

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!

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ề.

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!

name = None result = name or "" print(result) # 👉️ ""
0 cũng sẽ trả về

Copied!

name = None result = name or "" print(result) # 👉️ ""
3 nếu

Copied!

name = None result = name or "" print(result) # 👉️ ""
6 là bất kỳ giá trị giả nào khác, ví dụ:
if csvfield == EMPTY_STRING:
    csvfield = None
3,
if csvfield == EMPTY_STRING:
    csvfield = None
2 hoặc một danh sách trống, dict hoặc tuple.

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"

Chuỗi trống có bằng không không?

Một chuỗi trống là một thể hiện chuỗi có độ dài bằng không, trong khi một chuỗi null không có giá trị nào cả.Một chuỗi trống được biểu diễn là "".Đó là một chuỗi ký tự của các ký tự bằng không.Một chuỗi null được biểu diễn bởi null., whereas a null string has no value at all. An empty string is represented as "" . It is a character sequence of zero characters. A null string is represented by null .

Chuỗi trống có đánh giá không có trong Python không?

Sử dụng không để kiểm tra xem một chuỗi có trống trong các chuỗi trống Python trong Python được coi là giả mạo hay không, có nghĩa là chúng đánh giá là sai.Empty strings in Python are considered to be falsy, meaning that they evaluate to False .

Chuỗi trống có sai trong Python không?

Khoa học dữ liệu thực tế bằng cách sử dụng các chuỗi trống Python là "giả", điều đó có nghĩa là chúng được coi là sai trong bối cảnh boolean, vì vậy bạn chỉ có thể sử dụng không chuỗi.Empty strings are "falsy" which means they are considered false in a Boolean context, so you can just use not string.

Chuỗi trống có trống không?

Chúng tôi coi một chuỗi là trống nếu nó null hoặc một chuỗi không có độ dài.Nếu một chuỗi chỉ bao gồm khoảng trắng, thì chúng ta gọi nó là trống.Đối với Java, khoảng trắng là ký tự, như không gian, tab, v.v.If a string only consists of whitespace, then we call it blank. For Java, whitespaces are characters, like spaces, tabs, and so on.