Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đối tượng None trong Python (Null Object)

Mô tả

Python không có null như Java/C#. Giá trị "rỗng" là None (kiểu NoneType).

Kiểm tra kiểu

print(type(None))          # 
# print(type(Null))        # NameError: name 'Null' is not defined

Đặc điểm quan trọng của None

Biểu thứcKết quảGiải thích
None == FalseFalseNone KHÔNG bằng False
bool(None)FalseNhưng là "falsy" trong boolean context
None == ""FalseKhông bằng chuỗi rỗng
None == 0FalseKhông bằng số 0
None is NoneTrueChỉ bằng chính nó (identity)
None == NoneTrueEquality cũng True

Biến None vs Biến chưa định nghĩa

var_a = None
print('var_a is:', var_a)  # var_a is: None

# print(var_b)  # NameError: name 'var_b' is not defined

# Kiểm tra biến tồn tại
try:
    print(var_b)
except NameError:
    print("var_b chưa được định nghĩa")

# Kiểm tra giá trị None
var_c = None
if var_c is None:
    print("var_c là None")
else:
    print("var_c có giá trị")

None không có phương thức

listA = [5, 9, 3, 7]
listA.append(18)
print(listA)  # [5, 9, 3, 7, 18]

listA = None
# listA.append(34)  # AttributeError: 'NoneType' object has no attribute 'append'

# Cách an toàn
if listA is not None:
    listA.append(34)
else:
    print("listA là None, không thể append")

Best Practices

  1. Luôn dùng is None / is not None (identity check), không dùng == None.
  2. Dùng None làm default argument cho mutable objects:
    def func(items=None):
        if items is None:
            items = []
        items.append(1)
        return items
  3. Tránh gán None cho biến sau khi đã dùng (như ví dụ listA) - gây bug khó tìm.

None trong Pandas

Pandas dùng NaN (float) cho missing numeric, None cho object, NaT cho datetime. Kiểm tra: pd.isna() bắt cả 3 loại.