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ức | Kết quả | Giải thích |
|---|---|---|
None == False | False | None KHÔNG bằng False |
bool(None) | False | Nhưng là "falsy" trong boolean context |
None == "" | False | Không bằng chuỗi rỗng |
None == 0 | False | Không bằng số 0 |
None is None | True | Chỉ bằng chính nó (identity) |
None == None | True | Equality 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
- Luôn dùng
is None/is not None(identity check), không dùng== None. - Dùng
Nonelàm default argument cho mutable objects:def func(items=None): if items is None: items = [] items.append(1) return items - Tránh gán
Nonecho 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.