Trong Python, giá trị `truthy` và `falsy`
Bài viết này giải thích về giá trị truthy
và falsy
trong Python.
YouTube Video
Trong Python, giá trị truthy
và falsy
Định nghĩa về truthy
và falsy
Trong Python, các đối tượng được đánh giá trong các biểu thức điều kiện sẽ được coi là 'True' hoặc 'False'. Truthy
dùng để chỉ các đối tượng được đánh giá là 'True', còn falsy
dùng để chỉ các đối tượng được đánh giá là 'False'. Những đánh giá này thường được sử dụng trong các nhánh điều kiện như câu lệnh if
hoặc vòng lặp while
. Ngoài ra, hàm bool()
nhận bất kỳ đối tượng nào và trả về giá trị Boolean của nó.
Falsy
(Đối tượng được đánh giá là False)
Trong Python, các đối tượng sau được coi là falsy
:.
-
Sai
-
Không có gì
-
Giá trị số không
- Ví dụ:
0
,0.0
- Ví dụ:
-
Các kiểu chuỗi rỗng (như danh sách rỗng, tuple rỗng hoặc chuỗi rỗng)
- Ví dụ:
[]
,()
,""
- Ví dụ:
-
Từ điển rỗng
- Ví dụ:
{}
- Ví dụ:
-
Tập hợp rỗng
- Ví dụ:
set()
- Ví dụ:
Các đối tượng này được đánh giá là 'falsy' khi được sử dụng trong điều kiện của câu if
. Ví dụ, bạn có thể viết mã như sau.
1if not []:
2 print("The list is falsy.")
- Trong đoạn mã này, danh sách
[]
là rỗng, vì vậy nó được đánh giá làfalsy
, và câu lệnhprint
được thực thi.
Truthy
(Đối tượng được đánh giá là True)
Những đối tượng không được coi là falsy
thì được xem là truthy
.
-
Số khác không (số nguyên, số thập phân)
- Ví dụ:
1
,3.14
,-100
- Ví dụ:
-
Các loại chuỗi không rỗng (danh sách, bộ giá trị, chuỗi, v.v.)
- Ví dụ:
[1, 2, 3]
,(1, 2)
,"Hello"
- Ví dụ:
-
Từ điển không rỗng
- Ví dụ:
{"key": "value"}
- Ví dụ:
-
Tập hợp không rỗng
- Ví dụ:
{1, 2, 3}
- Ví dụ:
Các đối tượng được xem là truthy
sẽ được đánh giá là 'True' khi sử dụng trong điều kiện của câu lệnh if
. Ví dụ, bạn có thể viết mã như sau.
1if [1, 2, 3]:
2 print("The list is truthy.")
- Trong đoạn mã trên, vì danh sách
[1, 2, 3]
không rỗng nên nó được xem làtruthy
và lệnhprint
sẽ được thực thi.
Đánh giá giá trị Boolean với hàm bool()
Bạn có thể đánh giá giá trị Boolean của một đối tượng bằng cách sử dụng hàm bool()
.
1# Examples of falsy values
2print("False is", "truthy" if bool(False) else "falsy")
3print("0 is", "truthy" if bool(0) else "falsy")
4print('"" is', "truthy" if bool("") else "falsy")
5print("None is", "truthy" if bool(None) else "falsy")
6print("[] is", "truthy" if bool([]) else "falsy")
7
8# Examples of truthy values
9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
- Mã này minh họa cách giá trị chân lý của các giá trị khác nhau được đánh giá như thế nào. Ví dụ, giá trị số
0
và chuỗi rỗng được xem làFalse
, trong khi một dấu cách hoặc chuỗi"0"
được xem làTrue
.
Sử dụng truthy
và falsy
Bằng cách sử dụng truthy
và falsy
, mã có thể được viết ngắn gọn và trực quan hơn. Đặc biệt, các câu lệnh if
thường có thể được đánh giá mà không cần so sánh tường minh để làm cho chúng ngắn hơn. Ví dụ, hai đoạn mã dưới đây có hành vi tương tự nhau, nhưng đoạn đầu tiên ngắn gọn hơn.
1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5 print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9 print("The list is not empty.")
Trong ví dụ trên, bạn có thể thấy rằng my_list
được đánh giá là truthy
miễn là nó không phải là một danh sách rỗng, điều này giúp loại bỏ nhu cầu so sánh tường minh.
Thiết kế với truthy
và falsy
Bằng cách sử dụng hiệu quả các khái niệm truthy
và falsy
, bạn có thể cải thiện khả năng đọc mã và hiệu quả. Chúng đặc biệt hữu ích trong việc thiết lập giá trị mặc định, kiểm tra tính hợp lệ của biến và xác thực đầu vào. Ví dụ, nếu bạn mong đợi Không có gì
hoặc một danh sách rỗng được truyền làm tham số, bạn có thể viết mã như sau.
1def process_data(data=None):
2 data = data or []
3 print(data)
4
5process_data() # An empty list is used by default.
- Trong đoạn mã này, nếu
data
làNone
thì danh sách rỗng[]
sẽ được gán làm giá trị mặc định. Bằng cách này, việc sử dụngtruthy
vàfalsy
cho phép bạn thiết lập các giá trị mặc định một cách ngắn gọn.
Những điểm cần lưu ý để tránh hành vi không mong muốn
Tuy nhiên, mặc dù mã sử dụng giá trị truthy
và falsy
có thể ngắn gọn và tiện lợi, hãy lưu ý rằng nó có thể gây ra những hành vi không mong muốn. Ví dụ, trong đoạn mã này, không chỉ khi data
là None
mà còn khi nó là bất kỳ giá trị nào được đánh giá là False
, như chuỗi rỗng hoặc 0
, nó cũng sẽ bị thay thế bởi danh sách rỗng mặc định []
. Vì lý do này, khi cần một điều kiện nghiêm ngặt hơn, như chỉ khởi tạo khi giá trị là None
, bạn nên sử dụng một điều kiện rõ ràng như value is None:
. Tùy theo tình huống, việc thiết kế cân bằng giữa sự ngắn gọn và sự chặt chẽ là rất quan trọng.
1def process_data(data=None):
2 if data is None:
3 data = []
4 print(data)
5
6process_data() # An empty list is used by default.
7process_data(0) # 0 is printed because it's not None.
- Trong đoạn mã này,
data
chỉ được khởi tạo thành một danh sách rỗng nếu nó làNone
, còn các giá trị sai khác như0
sẽ được giữ nguyên.
Kiểm soát giá trị Boolean trong các đối tượng tùy biến
Ngay cả trong các lớp do bạn tự định nghĩa, bạn có thể kiểm soát giá trị Boolean của một thực thể bằng cách định nghĩa __bool__()
hoặc __len__()
.
1class MyContainer:
2 def __init__(self, items):
3 self.items = items
4
5 def __len__(self):
6 return len(self.items)
7
8box = MyContainer([])
9print(bool(box)) # False
10
11box.items.append("item")
12print(bool(box)) # True
- Trong đoạn mã này, phương thức
__len__()
khiến container được đánh giá làFalse
khi nó rỗng vàTrue
khi nó có phần tử.
Kết luận
Các khái niệm về truthy
và falsy
trong Python rất quan trọng để viết các biểu thức điều kiện ngắn gọn và làm cho mã dễ hiểu hơn. Hiểu và sử dụng đúng các khái niệm này có thể cải thiện đáng kể khả năng đọc và hiệu quả của mã.
Bạn có thể làm theo bài viết trên bằng cách sử dụng Visual Studio Code trên kênh YouTube của chúng tôi. Vui lòng ghé thăm kênh YouTube.