Trong Python, giá trị `truthy` và `falsy`

Trong Python, giá trị `truthy` và `falsy`

Bài viết này giải thích về giá trị truthyfalsy trong Python.

YouTube Video

Trong Python, giá trị truthyfalsy

Định nghĩa về truthyfalsy

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
  • 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ụ: [], (), ""
  • Từ điển rỗng

    • Ví dụ: {}
  • Tập hợp rỗng

    • Ví dụ: set()

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ệnh print đượ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
  • 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"
  • Từ điển không rỗng

    • Ví dụ: {"key": "value"}
  • Tập hợp không rỗng

    • Ví dụ: {1, 2, 3}

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ệnh print 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 truthyfalsy

Bằng cách sử dụng truthyfalsy, 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 truthyfalsy

Bằng cách sử dụng hiệu quả các khái niệm truthyfalsy, 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 dataNone 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ụng truthyfalsy 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ị truthyfalsy 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 dataNone 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ề truthyfalsy 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.

YouTube Video