Hướng dẫn dùng true true python



Các khóa học miễn phí qua video:
Lập trình C Java SQL Server PHP HTML5-CSS3-JavaScript

Mục lục bài viết:

  • Kiểu Boolean Python
    • Python Booleans làm Từ khóa
    • Python Booleans dưới dạng số
  • Toán tử Boolean
    • Các nhà khai thác không có đầu vào
    • Toán tử không phải Boolean
    • Toán tử và Boolean
    • Toán tử hoặc Boolean
    • Các toán tử Boolean khác
  • Toán tử so sánh
    • Bình đẳng và Bất bình đẳng
    • So sánh đơn hàng
    • Nhà điều hành là
    • Nhà điều hành trong
    • Các toán tử so sánh chuỗi
  • Thử nghiệm Boolean trong Python
    • Không có giá trị Boolean
    • Các số dưới dạng giá trị Boolean
    • Chuỗi dưới dạng giá trị Boolean
    • Các loại khác dưới dạng giá trị Boolean
    • Ví dụ: Mảng NumPy
    • Toán tử và Chức năng
  • Phần kết luận

Nội dung chính

Nội dung chính

  • Mục lục bài viết:
  • Kiểu Boolean Python
  • Python Booleans làm Từ khóa
  • Python Booleans as Numbers
  • Toán tử Boolean
  • Các nhà khai thác không có đầu vào
  • Các notBoolean điều hành
  • Các andBoolean điều hành
  • Các orBoolean điều hành
  • Other Boolean Operators
  • Toán tử so sánh
  • Bình đẳng và Bất bình đẳng
  • So sánh đơn hàng
  • Người isđiều hành
  • The in Operator
  • Chaining Comparison Operators
  • Thử nghiệm Boolean trong Python
  • None dưới dạng Giá trị Boolean
  • Các số dưới dạng giá trị Boolean
  • Chuỗi dưới dạng giá trị Boolean
  • Các loại khác dưới dạng giá trị Boolean
  • Ví dụ: Mảng NumPy
  • Toán tử và Chức năng
  • Phần kết luận

Nội dung chính

  • Mục lục bài viết:
  • Kiểu Boolean Python
  • Python Booleans làm Từ khóa
  • Python Booleans as Numbers
  • Toán tử Boolean
  • Các nhà khai thác không có đầu vào
  • Các notBoolean điều hành
  • Các andBoolean điều hành
  • Các orBoolean điều hành
  • Other Boolean Operators
  • Toán tử so sánh
  • Bình đẳng và Bất bình đẳng
  • So sánh đơn hàng
  • Người isđiều hành
  • The in Operator
  • Chaining Comparison Operators
  • Thử nghiệm Boolean trong Python
  • None dưới dạng Giá trị Boolean
  • Các số dưới dạng giá trị Boolean
  • Chuỗi dưới dạng giá trị Boolean
  • Các loại khác dưới dạng giá trị Boolean
  • Ví dụ: Mảng NumPy
  • Toán tử và Chức năng
  • Phần kết luận
  • Mục lục bài viết:
  • Kiểu Boolean Python
  • Python Booleans làm Từ khóa
  • Python Booleans as Numbers
  • Toán tử Boolean
  • Các nhà khai thác không có đầu vào
  • Các notBoolean điều hành
  • Các andBoolean điều hành
  • Các orBoolean điều hành
  • Other Boolean Operators
  • Toán tử so sánh
  • Bình đẳng và Bất bình đẳng
  • So sánh đơn hàng
  • Người isđiều hành
  • The in Operator
  • Chaining Comparison Operators
  • Thử nghiệm Boolean trong Python
  • None dưới dạng Giá trị Boolean
  • Các số dưới dạng giá trị Boolean
  • Chuỗi dưới dạng giá trị Boolean
  • Các loại khác dưới dạng giá trị Boolean
  • Ví dụ: Mảng NumPy
  • Toán tử và Chức năng
  • Phần kết luận

Kiểu Boolean trong Python là một trong những kiểu dữ liệu tích hợp sẵn của Python . Nó được sử dụng để biểu thị giá trị chân lý của một biểu thức. Ví dụ, biểu thức 1 <= 2là True, trong khi biểu thức 0 == 1là False. Việc hiểu cách các giá trị Boolean trong Python hoạt động rất quan trọng để lập trình tốt bằng Python.

Trong hướng dẫn này, bạn sẽ học cách:

  • Thao tác các giá trị Boolean với các toán tử Boolean
  • Chuyển đổi Boolean sang các loại khác
  • Chuyển đổi các loại khác sang Python Booleans
  • Sử dụng Python Booleans để viết mã Python hiệu quả và dễ đọc

Kiểu Boolean Python

Kiểu Boolean trong Python chỉ có hai giá trị có thể có:

  1. True
  2. False

Không có giá trị nào khác sẽ có boolnhư loại của nó. Bạn có thể kiểm tra loại Truevà Falsevới cài đặt sẵn type():

>>>

>>> type(False)

>>> type(True)

Của type()cả hai Falsevà Truelà bool.

Kiểu boolđược tích hợp sẵn , có nghĩa là nó luôn có sẵn bằng Python và không cần nhập. Tuy nhiên, bản thân tên không phải là một từ khóa trong ngôn ngữ. Mặc dù kiểu sau được coi là kiểu xấu, nhưng có thể gán cho tên bool:

>>>

>>> bool

>>> bool = "this is not a type"
>>> bool
'this is not a type'

Mặc dù có thể về mặt kỹ thuật, nhưng để tránh nhầm lẫn, bạn không nên gán một giá trị khác cho bool.

Python Booleans làm Từ khóa

Tên dựng sẵn không phải là từ khóa. Đối với ngôn ngữ Python, chúng là các biến thông thường . Nếu bạn gán cho chúng, thì bạn sẽ ghi đè giá trị tích hợp sẵn.

Ngược lại, các tên Truevà không phảiFalse là cài sẵn. Chúng là từ khóa . Không giống như nhiều từ khóa Python khác , và là các biểu thức Python . Vì chúng là biểu thức, chúng có thể được sử dụng ở bất kỳ nơi nào có thể sử dụng các biểu thức khác, chẳng hạn như ,.TrueFalse1 + 1

Có thể gán giá trị Boolean cho các biến, nhưng không thể gán giá trị cho True:

>>>

>>> a_true_alias = True
>>> a_true_alias
True
>>> True = 5
  File "", line 1
SyntaxError: cannot assign to True

Vì Truelà từ khóa nên bạn không thể gán giá trị cho nó. Quy tắc tương tự áp dụng cho False:

>>>

>>> False = 5
  File "", line 1
SyntaxError: cannot assign to False

You can’t assign to False because it’s a keyword in Python. In this way, True and False behave like other numeric constants. For example, you can pass 1.5 to functions or assign it to variables. However, it’s impossible to assign a value to 1.5. The statement 1.5 = 5 is not valid Python. Both 1.5 = 5 and False = 5 are invalid Python code and will raise a SyntaxError when parsed.

Python Booleans as Numbers

Booleans are considered a numeric type in Python. This means they’re numbers for all intents and purposes. In other words, you can apply arithmetic operations to Booleans, and you can also compare them to numbers:

>>>

>>> True == 1
True
>>> False == 0
True
>>> True + (False / True)
1.0

There aren’t many uses for the numerical nature of Boolean values, but there’s one technique you may find helpful. Because True is equal to 1 and False is equal to 0, adding Booleans together is a quick way to count the number of True values. This can come in handy when you need to count the number of items that satisfy a condition.

For example, if you want to analyze a verse in a classic children’s poem to see what fraction of lines contain the word "the", then the fact that True is equal to 1 and False is equal to 0 can come in quite handy:

>>>

>>> lines="""\
... He took his vorpal sword in hand;
...       Long time the manxome foe he sought—
... So rested he by the Tumtum tree
...       And stood awhile in thought.
... """.splitlines()
>>> sum("the" in line.lower() for line in lines) / len(lines)
0.5

Tính tổng tất cả các giá trị trong một biểu thức trình tạo như thế này cho phép bạn biết số lần Truexuất hiện trong trình tạo. Số lần Truetrong bộ tạo bằng số dòng có chứa từ "the", không phân biệt chữ hoa chữ thường. Chia số này cho tổng số dòng sẽ cho bạn tỷ lệ giữa các dòng phù hợp với tổng số dòng.

Để xem tại sao điều này hoạt động, bạn có thể chia đoạn mã trên thành các phần nhỏ hơn:

>>>

>>> lines = """\
... He took his vorpal sword in hand;
...       Long time the manxome foe he sought—
... So rested he by the Tumtum tree
...       And stood awhile in thought.
... """
>>> line_list = lines.splitlines()
>>> "the" in line_list[0]
False
>>> "the" in line_list[1]
True
>>> 0 + False + True # Equivalent to 0 + 0 + 1
1
>>> ["the" in line for line in line_list]
[False, True, True, False]
>>> False + True + True + False
2
>>> len(line_list)
4
>>> 2/4
0.5

Các line_listbiến giữ một danh sách các dòng. Dòng đầu tiên không có tiếng nói "the"trong nó, vì vậy "the" in line_list[0]là False. Trong dòng thứ hai, "the"không xuất hiện, vì vậy "the" in line_list[1]là True. Vì Boolean là số, bạn có thể thêm chúng vào số và 0 + False + Truecho 1.

Vì ["the" in line for line in line_list]là danh sách bốn Boolean, bạn có thể thêm chúng lại với nhau. Khi bạn thêm False + True + True + False, bạn nhận được 2. Bây giờ, nếu bạn chia kết quả đó 4cho độ dài của danh sách, bạn sẽ có được 0.5. Từ "the"xuất hiện trong một nửa số dòng trong vùng chọn. Đây là một cách hữu ích để tận dụng thực tế rằng Boolean là các số.

Toán tử Boolean

Toán tử Boolean là những toán tử nhận đầu vào Boolean và trả về kết quả Boolean .

Lưu ý: Sau đó, bạn sẽ thấy rằng các toán tử này có thể được cung cấp các đầu vào khác và không phải lúc nào cũng trả về kết quả Boolean. Hiện tại, tất cả các ví dụ sẽ sử dụng đầu vào và kết quả Boolean. Bạn sẽ thấy cách điều này tổng quát cho các giá trị khác trong phần về độ tin cậy .

Vì các giá trị Boolean trong Python chỉ có hai tùy chọn khả thi, Truehoặc False, có thể chỉ định các toán tử hoàn toàn theo kết quả mà chúng gán cho mọi kết hợp đầu vào có thể có. Các thông số kỹ thuật này được gọi là bảng sự thật vì chúng được hiển thị trong một bảng.

Như bạn sẽ thấy ở phần sau, trong một số tình huống, biết một đầu vào cho một toán tử là đủ để xác định giá trị của nó. Trong những trường hợp đó, đầu vào khác không được đánh giá. Đây được gọi là đánh giá ngắn mạch .

Tầm quan trọng của việc đánh giá ngắn mạch phụ thuộc vào từng trường hợp cụ thể. Trong một số trường hợp, nó có thể ít ảnh hưởng đến chương trình của bạn. Trong các trường hợp khác, chẳng hạn như khi cần tính toán nhiều để đánh giá các biểu thức không ảnh hưởng đến kết quả, nó mang lại lợi ích hiệu suất đáng kể. Trong những trường hợp khắc nghiệt nhất, tính đúng đắn của mã của bạn có thể phụ thuộc vào việc đánh giá ngắn mạch.

Các nhà khai thác không có đầu vào

Bạn có thể nghĩ về Truevà Falsenhư các toán tử Boolean mà không cần đầu vào. Một trong những toán tử này luôn trả về Truevà toán tử kia luôn trả về False.

Việc coi các giá trị Boolean trong Python như các toán tử đôi khi rất hữu ích. Ví dụ: cách tiếp cận này giúp nhắc nhở bạn rằng chúng không phải là các biến. Vì lý do tương tự mà bạn không thể gán cho +, không thể gán cho Truehoặc False.

Chỉ có hai giá trị Boolean trong Python tồn tại. Toán tử Boolean không có đầu vào luôn trả về cùng một giá trị. Bởi vì điều này, Truevà Falselà hai toán tử Boolean duy nhất không nhận đầu vào.

Các notBoolean điều hành

Toán tử Boolean duy nhất có một đối số là not. Nó nhận một đối số và trả về kết quả ngược lại: Falsefor Truevà Truefor False. Đây là bảng sự thật:

Bảng này minh họa nottrả về giá trị chân lý ngược lại của đối số. Vì notchỉ lấy một đối số nên nó không ngắn mạch. Nó đánh giá đối số của nó trước khi trả về kết quả:

>>>

>>> not True
False
>>> not False
True
>>> def print_and_true():
...     print("I got called")
...     return True
...
>>> not print_and_true()
I got called
False

Dòng cuối cùng cho thấy notđánh giá đầu vào của nó trước khi trả về False.

Bạn có thể tự hỏi tại sao không có toán tử Boolean nào khác nhận một đối số duy nhất. Để hiểu lý do tại sao, bạn có thể nhìn vào bảng hiển thị tất cả các toán tử Boolean về mặt lý thuyết có thể sử dụng một đối số:

Anot ADanh tínhĐúngKhông
True False True True False
False True False True False

Chỉ có bốn toán tử khả thi với một đối số. Ngoài ra not, ba toán tử còn lại đều có những cái tên hơi kỳ quái vì chúng không thực sự tồn tại:

  • Identity: Vì toán tử này chỉ trả lại đầu vào của nó, bạn chỉ có thể xóa nó khỏi mã của mình mà không ảnh hưởng gì.

  • Yes: Đây là một toán tử ngắn mạch vì nó không phụ thuộc vào đối số của nó. Bạn chỉ có thể thay thế nó bằng Truevà nhận được kết quả tương tự.

  • No: Đây là một toán tử ngắn mạch khác vì nó không phụ thuộc vào đối số của nó. Bạn chỉ có thể thay thế nó bằng Falsevà nhận được kết quả tương tự.

Không có toán tử nào khác có thể có với một đối số sẽ hữu ích.

Các andBoolean điều hành

Các andnhà điều hành phải mất hai đối số. Nó đánh giá Falsetrừ khi cả hai đầu vào True. Bạn có thể xác định hành vi của andbằng bảng sự thật sau:

ABA and B
True True True
False True False
True False False
False False False

Bảng này dài dòng. Tuy nhiên, nó minh họa hành vi tương tự như mô tả ở trên. Nếu Alà False, thì giá trị của Bkhông quan trọng. Bởi vì điều này, andngắn mạch nếu đầu vào đầu tiên là False. Nói cách khác, nếu đầu vào đầu tiên là False, thì đầu vào thứ hai không được đánh giá.

Mã sau có đầu vào thứ hai có tác dụng phụ , in ra, để cung cấp một ví dụ cụ thể:

>>>

>>> def print_and_return(x):
...     print(f"I am returning {x}")
...     return x
...
>>> True and print_and_return(True)
I am returning True
True
>>> True and print_and_return(False)
I am returning False
False
>>> False and print_and_return(True)
False
>>> False and print_and_return(False)
False

Trong hai trường hợp cuối cùng, không có gì được in. Hàm không được gọi vì việc gọi nó không cần thiết để xác định giá trị của andtoán tử. Nhận thức được hiện tượng đoản mạch là rất quan trọng khi các biểu thức có tác dụng phụ. Trong hai ví dụ cuối cùng, việc đánh giá ngắn mạch ngăn cản tác dụng phụ khi in xảy ra.

Một ví dụ trong đó hành vi này có thể quan trọng là trong mã có thể tạo ra các ngoại lệ:

>>>

>>> def inverse_and_true(n):
...     1 // n
...     return True
...
>>> inverse_and_true(5)
True
>>> inverse_and_true(0)
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in inverse_and_true
ZeroDivisionError: integer division or modulo by zero
>>> False and inverse_and_true(0)
False

Hàm inverse_and_true()này được thừa nhận là ngớ ngẩn và nhiều linters sẽ cảnh báo về việc biểu thức này 1 // nlà vô dụng. Nó phục vụ mục đích không thành công khi được cung cấp 0dưới dạng tham số vì phép chia cho 0không hợp lệ. Tuy nhiên, dòng cuối cùng không nêu ra một ngoại lệ. Do đánh giá ngắn mạch, hàm không được gọi, phép chia 0cho không xảy ra và không có ngoại lệ nào được nêu ra.

Ngược lại, True and inverse_and_true(0)sẽ nêu ra một ngoại lệ. Trong trường hợp đó, giá trị của đầu vào thứ hai sẽ cần thiết cho kết quả của and. Khi đầu vào thứ hai được đánh giá, inverse_and_true(0)sẽ được gọi, nó sẽ chia cho 0và một ngoại lệ sẽ được đưa ra.

Các orBoolean điều hành

Giá trị của ortoán tử là Truetrừ khi cả hai đầu vào của nó False. Các ornhà điều hành cũng có thể được xác định bởi bảng sau sự thật:

ABA or B
True True True
False True True
True False True
False False False

Bảng này dài dòng, nhưng nó có ý nghĩa tương tự như phần giải thích ở trên.

Khi được sử dụng không chính thức, từ hoặc có thể có một trong hai nghĩa:

  • Độc quyền hoặc là cách hoặc được sử dụng trong cụm từ "Bạn có thể nộp đơn gia hạn hoặc nộp bài tập về nhà đúng hạn." Trong trường hợp này, bạn không thể vừa nộp đơn xin gia hạn vừa nộp bài tập về nhà đúng hạn.

  • Bao gồm hoặc đôi khi được chỉ định bằng cách sử dụng kết hợp và / hoặc . Ví dụ: “Nếu bạn làm tốt nhiệm vụ này, thì bạn có thể được tăng lương và / hoặc thăng chức” có nghĩa là bạn có thể được tăng lương và thăng chức.

Khi Python diễn giải từ khóa or, nó sẽ làm như vậy bằng cách sử dụng bao gồm hoặc . Nếu cả hai đầu vào là True, thì kết quả của orlà True.

Bởi vì nó sử dụng bao gồm hoặc , ortoán tử trong Python cũng sử dụng đánh giá ngắn mạch. Nếu đối số đầu tiên là True, thì kết quả là True, và không cần đánh giá đối số thứ hai. Các ví dụ sau đây chứng minh đánh giá ngắn mạch của or:

>>>

>>> def print_and_true():
...     print("print_and_true called")
...     return True
...
>>> True or print_and_true()
True
>>> False or print_and_true()
print_and_true called
True

The second input isn’t evaluated by or unless the first one is False. In practice, the short-circuit evaluation of or is used much less often than that of and. However, it’s important to keep this behavior in mind when reading code.

Other Boolean Operators

The mathematical theory of Boolean logic determines that no other operators beyond notand, and or are needed. All other operators on two inputs can be specified in terms of these three operators. All operators on three or more inputs can be specified in terms of operators of two inputs.

Trong thực tế, thậm chí có cả hai orvà andlà thừa. Các andnhà điều hành có thể được xác định theo notvà or, và các ornhà điều hành có thể được xác định theo notvà and. Tuy nhiên, andvà orhữu ích đến mức tất cả các ngôn ngữ lập trình đều có cả hai.

Có mười sáu toán tử Boolean hai đầu vào có thể có. Ngoại trừ andvà or, chúng hiếm khi cần thiết trong thực tế. Bởi vì điều này, TrueFalsenotand, và orđược chỉ được xây dựng trong các nhà khai thác Python Boolean.

Toán tử so sánh

Một số toán tử của Python kiểm tra xem liệu mối quan hệ có giữ giữa hai đối tượng hay không. Vì mối quan hệ giữ hoặc không giữ, các toán tử này, được gọi là toán tử so sánh , luôn trả về các giá trị Boolean.

Các toán tử so sánh là nguồn phổ biến nhất của các giá trị Boolean.

Bình đẳng và Bất bình đẳng

Các toán tử so sánh phổ biến nhất là toán tử bình đẳng ( ==) và toán tử bất bình đẳng ( !=) . Hầu như không thể viết bất kỳ lượng mã Python có ý nghĩa nào mà không sử dụng ít nhất một trong những toán tử đó.

Toán tử bình đẳng ( ==) là một trong những toán tử được sử dụng nhiều nhất trong mã Python. Bạn thường cần so sánh một kết quả chưa biết với một kết quả đã biết hoặc hai kết quả chưa biết với nhau. Một số hàm trả về các giá trị cần được so sánh với một trạm gác để xem liệu một số điều kiện cạnh đã được phát hiện hay chưa. Đôi khi bạn cần so sánh kết quả từ hai hàm với nhau.

Toán tử bình đẳng thường được sử dụng để so sánh các số:

>>>

>>> 1 == 1
True
>>> 1 == 1.0
True
>>> 1 == 2
False

Bạn có thể đã sử dụng toán tử bình đẳng trước đây. Chúng là một số toán tử phổ biến nhất trong Python. Đối với tất cả các đối tượng Python dựng sẵn và đối với hầu hết các lớp của bên thứ ba, chúng trả về giá trị Boolean : Truehoặc False.

Lưu ý: Ngôn ngữ Python không thực thi điều đó ==và !=trả về Booleans. Các thư viện như NumPy và pandas trả về các giá trị khác.

Chỉ đứng sau toán tử bình đẳng phổ biến là toán tử bất bình đẳng ( !=). Nó trả về Truenếu các đối số không bằng nhau và Falsenếu chúng có. Các ví dụ tương tự nhau trên phạm vi rộng. Nhiều bài kiểm tra đơn vị kiểm tra rằng giá trị không bằng một giá trị không hợp lệ cụ thể. Ứng dụng khách web có thể kiểm tra xem có phải mã lỗi không 404 Not Foundtrước khi thử một giải pháp thay thế.

Dưới đây là hai ví dụ về toán tử bất đẳng thức Python đang được sử dụng:

>>>

>>> 1 != 2
True
>>> 1 != (1 + 0.0)
False

Có lẽ điều đáng ngạc nhiên nhất về toán tử bất đẳng thức Python là thực tế là nó tồn tại ngay từ đầu. Rốt cuộc, bạn có thể đạt được kết quả tương tự như 1 != 2với not (1 == 2). Python thường tránh các cú pháp bổ sung, và đặc biệt là các toán tử lõi phụ, vì những thứ có thể dễ dàng đạt được bằng các phương tiện khác.

Tuy nhiên, bất bình đẳng được sử dụng thường xuyên đến mức cần có một nhà điều hành riêng cho nó. Trong các phiên bản cũ của Python, trong 1.xloạt bài này, thực sự có hai cú pháp khác nhau.

Như một trò đùa của ngày Cá tháng Tư, Python vẫn hỗ trợ một cú pháp thay thế cho sự bất bình đẳng với việc __future__nhập đúng :

>>>

>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True

Điều này không bao giờ được sử dụng trong bất kỳ mã nào dành cho mục đích sử dụng thực tế. Tuy nhiên, nó có thể hữu ích cho đêm đố Python tiếp theo của bạn.

So sánh đơn hàng

Một tập hợp các toán tử kiểm tra khác là các toán tử so sánh thứ tự . Có bốn toán tử so sánh đơn hàng có thể được phân loại theo hai chất lượng:

  • Hướng : Nó nhỏ hơn hay lớn hơn?
  • Tính chặt chẽ : Có được phép bình đẳng hay không?

Vì hai lựa chọn là độc lập, bạn nhận được 2 * 2 == 4các toán tử so sánh đơn hàng. Tất cả bốn được liệt kê trong bảng này:

 Ít hơnLớn hơn
Nghiêm khắc < >
Không nghiêm khắc <= >=
     

Có hai lựa chọn về hướng đi và hai lựa chọn về sự nghiêm khắc. Điều này dẫn đến tổng cộng bốn toán tử so sánh đơn hàng.

Các toán tử so sánh thứ tự không được xác định cho tất cả các đối tượng. Một số đối tượng không có thứ tự có ý nghĩa. Mặc dù các danh sách và bộ giá trị được sắp xếp theo thứ tự từ điển , nhưng từ điển không có thứ tự có ý nghĩa:

>>>

>>> {1: 3} < {2: 4}
Traceback (most recent call last):
  File "", line 1, in 
TypeError: '<' not supported between instances of 'dict' and 'dict'

Không rõ ràng từ điển nên được sắp xếp như thế nào. Theo Zen of Python , khi đối mặt với sự mơ hồ, Python từ chối đoán.

Mặc dù chuỗi và số nguyên được sắp xếp riêng biệt, so sánh giữa các loại không được hỗ trợ:

>>>

>>> 1 <= "1"
Traceback (most recent call last):
  File "", line 1, in 
TypeError: '<=' not supported between instances of 'int' and 'str'

Một lần nữa, vì không có cách rõ ràng để xác định thứ tự, Python từ chối so sánh chúng. Điều này tương tự với toán tử cộng ( +). Mặc dù bạn có thể thêm chuỗi vào chuỗi và số nguyên vào số nguyên, việc thêm chuỗi vào số nguyên sẽ dẫn đến một ngoại lệ.

Khi các toán tử so sánh thứ tự được xác định, nói chung chúng trả về một Boolean.

Lưu ý : Python không bắt buộc các toán tử so sánh trả về Booleans. Trong khi tất cả các đối tượng Python được tích hợp sẵn và hầu hết các đối tượng của bên thứ ba, trả về Boolean khi được so sánh, vẫn có những ngoại lệ.

Ví dụ, các toán tử so sánh giữa các mảng NumPy hoặc gấu trúc DataFrames trả về mảng và DataFrames. Bạn sẽ thấy thêm về sự tương tác của các giá trị NumPy và Boolean ở phần sau trong hướng dẫn này.

So sánh các số trong Python là một cách phổ biến để kiểm tra các điều kiện biên. Lưu ý rằng điều <đó không cho phép bình đẳng, trong khi <=đó:

>>>

>>> 1 <= 1
True
>>> 1 < 1
False
>>> 2 > 3
False
>>> 2 >= 2
True

Các lập trình viên thường sử dụng các toán tử so sánh mà không nhận ra rằng chúng trả về một giá trị Python Boolean.

Người isđiều hành

Người isđiều hành kiểm tra danh tính đối tượng . Nói cách khác, chỉ x is yđánh giá Truekhi xvà yđánh giá cho cùng một đối tượng. Các isnhà khai thác có ngược lại, các is notnhà điều hành.

Một cách sử dụng điển hình của isvà is notlà để so sánh danh sách cho danh tính:

>>>

>>> x = []
>>> y = []
>>> x is x
True
>>> x is not x
False
>>> x is y
False
>>> x is not y
True

Even though x == y, they are not the same object. The is not operator always returns the opposite of is. There’s no difference between the expression x is not y and the expression not (x is y) except for readability.

Keep in mind that the above examples show the is operator used only with lists. The behavior of the is operator on immutable objects like numbers and strings is more complicated.

The in Operator

The in operator checks for membership. An object can define what it considers members. Most sequences, such as lists, consider their elements to be members:

>>>

>>> small_even = [2, 4]
>>> 1 in small_even
False
>>> 2 in small_even
True
>>> 10 in small_even
False

Since 2 is an element of the list, 2 in small_even returns True. Since 1 and 10 aren’t in the list, the other expressions return False. In all cases, the in operator returns a Boolean value.

Since strings are sequences of characters, you might expect them to also check for membership. In other words, characters that are members of the string will return True for in, while those that don’t will return False:

>>>

>>> "e" in "hello beautiful world"
True
>>> "x" in "hello beautiful world"
False

Since "e" is the second element of the string, the first example returns True. Since x doesn’t appear in the string, the second example returns False. However, along with individual characters, substrings are also considered to be members of a string:

>>>

>>> "beautiful" in "hello beautiful world"
True
>>> "belle" in "hello beautiful world"
False

Since "beautiful" is a substring, the in operator returns True. Since "belle" is not a substring, the in operator returns False. This is despite the fact that every individual letter in "belle" is a member of the string.

Like the operators is and ==, the in operator also has an opposite, not in. You can use not in to confirm that an element is not a member of an object.

Chaining Comparison Operators

Comparison operators can form chains. You can create comparison operator chains by separating expressions with comparison operators to form a larger expression:

The expression 1 < 2 < 3 is a comparison operator chain. It has expressions separated by comparison operators. The result is True because both parts of the chain are True. You can break up the chain to see how it works:

>>>

>>> 1 < 2 and 2 < 3
True

Since 1 < 2 returns True and 2 < 3 returns Trueand returns True. A comparison chain is equivalent to using and on all its links. In this case, since True and True returns True, the result of the whole chain is True. This means that if any of the links are False, then the whole chain is False:

Chuỗi so sánh này trả về Falsevì không phải tất cả các liên kết của nó đều như vậy True. Bởi vì các chuỗi so sánh là một andtoán tử ngầm , nếu ngay cả một liên kết là False, thì toàn bộ chuỗi là False. Bạn có thể chia nhỏ chuỗi để xem nó hoạt động như thế nào:

>>>

>>> 1 < 3 and 3 < 2
False

Trong trường hợp này, các phần của chuỗi đánh giá theo các Boolean sau:

  • 1 < 3 Là True
  • 3 < 2 Là False

Điều này có nghĩa là một trong các kết quả là Truevà một là False. Vì True and Falsebằng False, giá trị của toàn bộ chuỗi là False.

Bạn có thể kết hợp các loại và hoạt động trong một chuỗi so sánh miễn là các loại có thể được so sánh:

>>>

>>> 1 < 2 < 1
False
>>> 1 == 1.0 < 0.5
False
>>> 1 == 1.0 == True
True
>>> 1 < 3 > 2
True
>>> 1 < 2 < 3 < 4 < 5
True

Các toán tử không nhất thiết phải giống nhau. Thậm chí không phải tất cả các loại đều giống nhau. Trong các ví dụ trên, bạn có ba kiểu số:

  1. int
  2. float
  3. bool

Đây là ba kiểu số khác nhau, nhưng bạn có thể so sánh các đối tượng thuộc các kiểu số khác nhau mà không gặp vấn đề gì.

Đánh giá chuỗi ngắn mạch

Nếu dây chuyền sử dụng ngầm định and, thì dây chuyền cũng phải ngắn mạch. Điều này rất quan trọng vì ngay cả trong trường hợp so sánh đơn hàng không được xác định, thì một chuỗi vẫn có thể trả về False:

>>>

>>> 2 < "2"
Traceback (most recent call last):
  File "", line 1, in 
TypeError: '<' not supported between instances of 'int' and 'str'
>>> 3 < 2 < "2"
False

Mặc dù Python không thể so sánh thứ tự số nguyên và số chuỗi, nhưng sẽ 3 < 2 < "2"đánh giá Falsevì nó không đánh giá so sánh thứ hai. Trong trường hợp này, đánh giá ngắn mạch ngăn chặn một tác dụng phụ khác: nêu ra một ngoại lệ.

Đánh giá ngắn mạch của chuỗi so sánh có thể ngăn ngừa các trường hợp ngoại lệ khác:

>>>

>>> 3 < 2 < (1//0)
False

Chia 1theo 0lẽ ra sẽ nâng cao a ZeroDivisionError. Tuy nhiên, vì đánh giá ngắn mạch, Python không đánh giá sự phân chia không hợp lệ. Điều này có nghĩa là Python bỏ qua việc đánh giá không chỉ so sánh mà còn cả các đầu vào cho phép so sánh.

Một khía cạnh khác đó là quan trọng để hiểu về chuỗi so sánh là khi Python thực hiện đánh giá một yếu tố trong chuỗi, nó đánh giá nó một lần duy nhất:

>>>

>>> def foo():
...     print("I'm foo")
...     return 1
...
>>> 0 < foo() < 2
I'm foo
True
>>> (0 < foo()) and (foo() < 2)
I'm foo
I'm foo
True

Bởi vì các yếu tố trung được đánh giá chỉ một lần, nó không phải lúc nào cũng an toàn để cấu trúc lại x < y < zđể (x < y) and (y < z). Mặc dù chuỗi hoạt động giống như andtrong đánh giá ngắn mạch, nhưng nó đánh giá tất cả các giá trị, bao gồm cả các giá trị trung gian, chỉ một lần.

Chains are especially useful for range checks, which confirm that a value falls within a given range. For example, in a daily invoice that includes the number hours worked, you might do the following:

>>>

>>> hours_worked = 5
>>> 1 <= hours_worked <= 25
True

If there are 0 hours worked, then there’s no reason to send the invoice. Accounting for Daylight Saving Time, the maximum number of hours in a day is 25. The above range check confirms that the number of hours worked in a day falls within the allowable range.

Mixing Operators and Chaining

Until now, all our examples involved ==!=, and the order comparisons. However, you can chain all of Python’s comparison operators. This can lead to surprising behavior:

>>>

>>> a = 0
>>> a is a < 1
True
>>> (a is a) < 1
False
>>> a is (a < 1)
False

Because a is a < 1 is a comparison chain, it evaluates to True. You can break the chain into its parts:

  • The expression a is a is True, as it would be for any value evaluated against itself.
  • The expression a < 1 is True since 0 is less than 1.

Since both parts are True, the chain evaluates to True.

However, people who are used to other operators in Python may assume that, like other expressions involving multiple operators such as 1 + 2 * 3, Python inserts parentheses into to the expression. However, neither way of inserting parenthesis will evaluate to True.

You can see why both evaluate to False if you break up the expressions. If you break up the first expression, you get the following:

>>>

>>> a = 0
>>> a is a
True
>>> True == 1
True
>>> (a is a) < 1
False

You can see above that a is a returns True, as it would for any value. This means that (a is a) < 1 is the same as True < 1. Booleans are numeric types, and True is equal to 1. So True < 1 is the same as 1 < 1. Since this is a strict inequality, and 1 == 1, it returns False.

The second expression works differently:

>>>

>>> a = 0
False
>>> a < 1
True
>>> 0 is True
:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
False

Since 0 is less than 1a < 1 returns True. Since 0 != True, then it can’t be the case that 0 is True.

Note: Don’t take the above SyntaxWarning lightly. Using is on numbers can be confusing. However, specifically for cases in which you know the numbers are not equal, you can know that is will also return False. While this example is correct, it’s not an example of good Python coding style.

The most important lesson to draw from this is that chaining comparisons with is usually isn’t a good idea. It confuses the reader and probably isn’t necessary.

Like is, the in operator and its opposite, not in, can often yield surprising results when chained:

>>>

>>> "b" in "aba" in "cabad" < "cabae"
True

Để giảm thiểu sự nhầm lẫn, ví dụ này xâu chuỗi các phép so sánh với các toán tử khác nhau và sử dụng invới các chuỗi để kiểm tra các chuỗi con. Một lần nữa, đây không phải là một ví dụ về mã được viết tốt! Tuy nhiên, điều quan trọng là có thể đọc ví dụ này và hiểu tại sao nó trả về True.

Cuối cùng, bạn có thể xâu chuỗi is notvới not in:

>>>

>>> greeting = "hello"
>>> quality = "good"
>>> end_greeting = "farewell"
>>> greeting is not quality not in end_greeting
True

Lưu ý rằng thứ tự của nothai toán tử không giống nhau! Các toán tử phủ định là is notvà not in. Điều này tương ứng với cách sử dụng thông thường trong tiếng Anh, nhưng rất dễ mắc lỗi khi sửa đổi mã.

Thử nghiệm Boolean trong Python

Cách sử dụng phổ biến nhất cho Python Boolean là trong một ifcâu lệnh . Câu lệnh này sẽ thực thi nếu giá trị là True:

>>>

>>> 1 == 1
True
>>> if 1 == 1:
...     print("yep")
...
yep
>>> 1 == 2
False
>>> if 1 == 2:
...     print("yep")
...

print()chỉ được gọi khi biểu thức đánh giá là True. Tuy nhiên, trong Python, bạn có thể đưa ra bất kỳ giá trị nào if. Các giá trị mà ifcoi Trueđược gọi là truthy , và các giá trị mà ifcoi Falseđược gọi là falsy .

ifquyết định giá trị nào là trung thực và giá trị nào là sai bằng cách gọi nội bộ bool(). Bạn đã gặp phải bool()kiểu Boolean trong Python. Khi được gọi, nó chuyển đổi các đối tượng thành Booleans.

None dưới dạng Giá trị Boolean

Đối tượng singleton Noneluôn là giả:

Điều này thường hữu ích trong các ifcâu lệnh kiểm tra một giá trị sentinel. Tuy nhiên, tốt hơn là bạn nên kiểm tra rõ ràng danh tính với is None. Đôi khi Nonecó thể hữu ích khi kết hợp với đánh giá ngắn mạch để có giá trị mặc định.

Ví dụ: bạn có thể sử dụng orđể thay thế Nonebằng một danh sách trống:

>>>

>>> def add_num_and_len(num, things=None):
...     return num + len(things or [])
...
>>> add_num_and_len(5, [1, 2, 3])
8
>>> add_num_and_len(6)
6

Trong ví dụ này, danh sách sẽ không được tạo nếu thingslà một danh sách không trống vì orsẽ ngắn mạch trước khi nó đánh giá [].

Các số dưới dạng giá trị Boolean

Đối với số, bool(x)tương đương với x != 0. Điều này có nghĩa là số nguyên giả duy nhất là 0:

>>>

>>> bool(3), bool(-5), bool(0)
(True, True, False)

Tất cả các số nguyên khác không đều là trung thực. Điều này cũng đúng với các số dấu phẩy động , bao gồm các số dấu phẩy động đặc biệt như vô cực và Không phải là số (NaN) :

>>>

>>> import math
>>> [bool(x) for x in [0, 1.2, 0.5, math.inf, math.nan]]
[False, True, True, True, True]

Vì vô cực và NaN không bằng nhau nên 0chúng là sự thật.

So sánh bình đẳng và bất bình đẳng trên các số dấu phẩy động là các phép toán tinh tế. Vì làm bool(x)tương đương với x != 0, điều này có thể dẫn đến kết quả đáng ngạc nhiên cho các số dấu phẩy động:

>>>

>>> bool(0.1 + 0.2 + (-0.2) + (-0.1))
True
>>> 0.1 + 0.2 + (-0.2) + (-0.1)
2.7755575615628914e-17

Các phép tính số dấu phẩy động có thể không chính xác. Do đó, kết quả của số bool()dấu phẩy động có thể gây ngạc nhiên.

Python có nhiều kiểu số hơn trong thư viện chuẩn và chúng tuân theo các quy tắc tương tự. Đối với các kiểu số không cài sẵn, bool(x)cũng tương đương với x != 0. Các fractionsmô-đun là trong thư viện chuẩn. Giống như các kiểu số khác, phân số sai duy nhất là 0/1:

>>>

>>> import fractions
>>> bool(fractions.Fraction("1/2")), bool(fractions.Fraction("0/1"))
(True, False)

Như với số nguyên và số dấu phẩy động, phân số chỉ sai khi chúng bằng 0.

Các decimalmô-đun cũng là trong thư viện chuẩn. Các số thập phân chỉ giả mạo tương tự khi chúng bằng 0:

>>>

>>> import decimal, math
>>> with decimal.localcontext(decimal.Context(prec=3)) as ctx:
...     bool(ctx.create_decimal(math.pi) - ctx.create_decimal(22)/7)
...
False
>>> with decimal.localcontext(decimal.Context(prec=4)) as ctx:
...     bool(ctx.create_decimal(math.pi) - ctx.create_decimal(22)/7)
...
True

Con số 22 / 7là một xấp xỉ của Pi đến hai chữ số thập phân. Thực tế này đã được Archimedes thảo luận vào thế kỷ thứ 3 trước Công nguyên . Khi sự khác biệt giữa 22 / 7và Pi được tính với độ chính xác này, kết quả là sai. Khi sự khác biệt được tính toán với độ chính xác cao hơn, sự khác biệt không bằng 0, và sự thật cũng vậy.

Chuỗi dưới dạng giá trị Boolean

Nói chung, các đối tượng có len()ý muốn là sai khi kết quả của len()là 0. Không quan trọng nếu chúng là danh sách, bộ giá trị, bộ, chuỗi hoặc chuỗi byte:

>>>

>>> bool([1]), bool([])
(True, False)
>>> bool((1,2)), bool(())
(True, False)
>>> bool({1,2,3}), bool(set())
(True, False)
>>> bool({1: 2}), bool({})
(True, False)
>>> bool("hello"), bool("")
(True, False)
>>> bool(b"xyz"), bool(b"")
(True, False)

Tất cả các đối tượng Python dựng sẵn có độ dài đều tuân theo quy tắc này. Sau đó, bạn sẽ thấy một số ngoại lệ đối với quy tắc này đối với các đối tượng không được tạo sẵn.

Các loại khác dưới dạng giá trị Boolean

Trừ khi các loại có một len()hoặc xác định cụ thể xem chúng là trung thực hay giả dối, chúng luôn luôn trung thực. Điều này đúng với các kiểu cài sẵn cũng như do người dùng xác định. Đặc biệt, các hàm luôn trung thực:

>>>

>>> def func():
...     pass
...
>>> bool(func)
True

Các phương pháp cũng luôn trung thực. Bạn có thể gặp phải điều này nếu thiếu dấu ngoặc đơn khi bạn gọi một hàm hoặc phương thức:

>>>

>>> import datetime
>>> def before_noon():
...     return datetime.datetime.now().hour < 12
...
>>> def greet():
...     if before_noon:
...             print("Good morning!")
...     else:
...             print("Good evening!")
...
>>> greet()
Good morning!
>>> datetime.datetime.now().hour
20

Điều này có thể xảy ra do dấu ngoặc đơn bị quên hoặc tài liệu gây hiểu lầm không đề cập đến việc bạn cần gọi hàm. Nếu bạn mong đợi một giá trị Boolean trong Python nhưng có một hàm trả về giá trị Boolean, thì nó sẽ luôn là trung thực.

Theo mặc định, các loại do người dùng xác định luôn trung thực:

>>>

>>> class Dummy:
...     pass
...
>>> bool(Dummy())
True

Tạo một lớp trống làm cho mọi đối tượng của lớp đó là trung thực. Tất cả các đối tượng là trung thực trừ khi các phương thức đặc biệt được xác định. Nếu bạn muốn tạo một số trường hợp giả mạo lớp của mình, bạn có thể xác định .__bool__():

>>>

>>> class BoolLike:
...     am_i_truthy = False
...     def __bool__(self):
...             return self.am_i_truthy
...
>>> x = BoolLike()
>>> bool(x)
False
>>> x.am_i_truthy = True
>>> bool(x)
True

Bạn cũng có thể sử dụng .__bool__()để làm cho một đối tượng không trung thực cũng không giả dối:

>>>

>>> class ExcludedMiddle:
...     def __bool__(self):
...             raise ValueError("neither")
...
>>> x = ExcludedMiddle()
>>> bool(x)
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 3, in __bool__
ValueError: neither

>>> if x:
...     print("x is truthy")
... else:
...     print("x is falsy")
...
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 3, in __bool__
ValueError: neither

Câu iflệnh cũng sử dụng .__bool__(). Nó làm như vậy để đánh giá xem đối tượng là thật hay giả, từ đó xác định nhánh nào sẽ thực thi.

Nếu bạn định nghĩa __len__phương thức trên một lớp, thì các thể hiện của nó có a len(). Trong trường hợp đó, giá trị Boolean của các thể hiện sẽ là sai chính xác khi độ dài của chúng là 0:

>>>

>>> class DummyContainer:
...     my_length = 0
...     def __len__(self):
...         return self.my_length
...
>>> x = DummyContainer()
>>> bool(x)
False
>>> x.my_length = 5
>>> bool(x)
True

Trong ví dụ này, len(x)sẽ trả về 0trước và 5sau đó. Tuy nhiên, điều ngược lại là không đúng. Việc xác định .__bool__()không cung cấp độ dài cho các trường hợp:

>>>

>>> class AlwaysTrue:
...     def __bool__(self):
...         return True
...
>>> class AlwaysFalse:
...     def __bool__(self):
...         return False
...
>>> bool(AlwaysTrue()), bool(AlwaysFalse())
(True, False)

>>> len(AlwaysTrue())
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'AlwaysTrue' has no len()

>>> len(AlwaysFalse())
Traceback (most recent call last):
  File "", line 1, in 
TypeError: object of type 'AlwaysFalse' has no len()

Định nghĩa .__bool__()không làm cho các cá thể của một trong hai lớp có a len(). Khi cả hai .__bool__()và .__len__()được xác định, .__bool__()ưu tiên:

>>>

>>> class BooleanContainer:
...     def __len__(self):
...         return 100
...     def __bool__(self):
...         return False
...
>>> x=BooleanContainer()
>>> len(x)
100
>>> bool(x)
False

Mặc dù xcó chiều dài 100, nó vẫn sai.

Ví dụ: Mảng NumPy

Ví dụ trên có vẻ giống như điều gì đó chỉ xảy ra khi bạn viết một lớp nhằm chứng minh các trường hợp cạnh trong Python. Tuy nhiên, có thể nhận được kết quả tương tự bằng cách sử dụng một trong những thư viện phổ biến nhất trên PyPI : NumPy .

Mảng , như số, là sai hoặc trung thực tùy thuộc vào cách chúng so sánh với 0:

>>>

>>> from numpy import array
>>> x = array([0])
>>> len(x)
1
>>> bool(x)
False

Mặc dù xcó độ dài là 1, nhưng nó vẫn sai vì giá trị của nó là 0.

Khi mảng có nhiều hơn một phần tử, một số phần tử có thể là sai và một số có thể là trung thực. Trong những trường hợp đó, NumPy sẽ đưa ra một ngoại lệ:

>>>

>>> from numpy import array
>>> import textwrap
>>> y=array([0, 1])
>>> try:
...     bool(y)
... except ValueError as exc:
...     print("\n".join(textwrap.wrap(str(exc))))
...
The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()

Ngoại lệ là quá dài dòng nên để dễ đọc, mã sử dụng xử lý văn bản để bao bọc các dòng.

Một trường hợp cạnh thú vị hơn liên quan đến các mảng trống. Bạn có thể tự hỏi liệu những thứ đó là giả dối như các trình tự khác hay là sự thật bởi vì chúng không bằng 0. Như bạn đã thấy ở trên, đó không phải là hai câu trả lời khả thi duy nhất. Các mảng cũng có thể từ chối có giá trị Boolean.

Thật thú vị, không có tùy chọn nào trong số này là hoàn toàn đúng:

>>>

>>> bool(array([]))
:1: DeprecationWarning: The truth value of an empty array is ambiguous.
Returning False, but in future this will result in an error.
Use `array.size > 0` to check that an array is not empty.
False

Mặc dù các mảng trống hiện đang là sai , nhưng việc dựa vào hành vi này là rất nguy hiểm. Trong một số phiên bản NumPy trong tương lai, điều này sẽ đưa ra một ngoại lệ.

Toán tử và Chức năng

Có một vài nơi khác trong Python nơi thử nghiệm Boolean diễn ra. Một trong số đó là trong toán tử Boolean.

Các nhà khai thác andorvà notchấp nhận bất kỳ giá trị mà hỗ trợ thử nghiệm Boolean. Trong trường hợp của not, nó sẽ luôn trả về giá trị Boolean:

>>>

>>> not 1
False
>>> not 0
True

Bảng sự thật cho notvẫn đúng, nhưng bây giờ nó có tính xác thực của đầu vào.

Trong trường hợp andvà or, ngoài việc đánh giá ngắn mạch, chúng cũng trả về giá trị mà chúng đã ngừng đánh giá:

>>>

>>> 1 and 2
2
>>> 0 and 1
0
>>> 1 or 2
1
>>> 0 or 2
2

Các bảng sự thật vẫn đúng, nhưng giờ đây chúng xác định độ tin cậy của các kết quả, điều này phụ thuộc vào độ tin cậy của các đầu vào. Điều này có thể hữu ích khi bạn muốn đặt giá trị mặc định.

Giả sử bạn có một hàm được gọi là summarize(), nếu văn bản quá dài, hãy lấy đầu và cuối và thêm dấu chấm lửng ( ...) ở giữa. Điều này có thể hữu ích trong một số báo cáo không thể phù hợp với toàn văn. Tuy nhiên, một số tập dữ liệu có các giá trị bị thiếu được đại diện bởi None.

Vì summarize()giả sử đầu vào là một chuỗi, nó sẽ không thành công trên None:

>>>

>>> def summarize(long_text):
...     if len(long_text) <= 4:
...         return long_text
...     return long_text[:2] +"..." + long_text[-2:]
...
>>> summarize("hello world")
'he...ld'
>>> summarize("hi")
'hi'
>>> summarize("")
''
>>> summarize(None)
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in summarize
TypeError: object of type 'NoneType' has no len()

>>> for a in ["hello world", "hi", "", None]:
...     print("-->", summarize(a or ""))
...
--> he...ld
--> hi
-->
-->

Ví dụ này tận dụng sự sai lệch của Nonevà thực tế là orkhông chỉ đoản mạch mà còn trả về giá trị cuối cùng được đánh giá. Mã để in báo cáo thêm or ""vào đối số summarize(). Việc bổ sung or ""này giúp bạn tránh được các lỗi chỉ với một thay đổi mã nhỏ.

Các chức năng được tích hợp sẵn all()và any()đánh giá độ trung thực cũng như đoản mạch, nhưng chúng không trả về giá trị cuối cùng được đánh giá. all()kiểm tra xem tất cả các đối số của nó có trung thực hay không:

>>>

>>> all([1, 2, 3])
True
>>> all([0, 1, 2])
False
>>> all(x / (x - 1) for x in [0, 1])
False

Trong dòng cuối cùng, all()không đánh giá x / (x - 1)cho 1. Kể từ khi 1 - 1là 0, điều này sẽ huy động được ZeroDivisionError.

any() kiểm tra xem bất kỳ đối số nào của nó là trung thực hay không:

>>>

>>> any([1, 0, 0])
True
>>> any([False, 0, 0.0])
False
>>> any(1 / x for x in [1, 0])
True

Trong dòng cuối cùng, any()không đánh giá 1 / xcho 0.

Phần kết luận

Python Boolean là một kiểu dữ liệu được sử dụng phổ biến với nhiều ứng dụng hữu ích. Bạn có thể sử dụng Booleans với những hoạt động thích notandorinis==, và !=để so sánh giá trị và kiểm tra các thành viên, danh tính, hoặc bình đẳng. Bạn cũng có thể sử dụng thử nghiệm Boolean với một ifcâu lệnh để kiểm soát luồng chương trình của bạn dựa trên tính trung thực của một biểu thức.

Trong hướng dẫn này, bạn đã học cách:

  • Thao tác các giá trị Boolean với các toán tử Boolean
  • Chuyển đổi Boolean sang các loại khác
  • Chuyển đổi các loại khác sang Python Booleans
  • Sử dụng Booleans để viết mã Python hiệu quả và dễ đọc

Bây giờ bạn biết cách đánh giá ngắn mạch hoạt động và nhận ra mối liên hệ giữa Booleans và ifcâu lệnh. Kiến thức này sẽ giúp bạn hiểu được mã hiện có và tránh những cạm bẫy phổ biến có thể dẫn đến lỗi trong chương trình của riêng bạn.


Các khóa học qua video:
Lập trình C Java SQL Server PHP HTML5-CSS3-JavaScript
« Prev: Python: Các kiểu dữ liệu cơ bản trong Python
» Next: Python: Bố cục PyQt: Tạo các ứng dụng GUI chuyên nghiệp