布尔

布尔值 属于 Python

70 个练习

关于 布尔值

Python 用bool类型来表示 true 和 false 这两种值,它是int的子类。这个类型里只有两个布尔值:True和False。这些值可以赋值给变量,也可以和布尔运算符(and、or、not)组合使用:

>>> true_variable = True and True
>>> false_variable = True and False

>>> true_variable = False or True
>>> false_variable = False or False

>>> true_variable = not False
>>> false_variable = not True

布尔运算符使用_短路求值_,也就是说,只有当需要时,才会对运算符右侧的表达式求值。

每个运算符的优先级都不同,not的求值先于and和or。可以用括号让表达式中的某一部分先于其他部分求值:

>>> not True and True
False

>>> not (True and False)
True

所有boolean operators的优先级都低于 Python 的comparison operators,比如==、>、<、is和is not。

类型强制转换与真值性

bool函数(bool())可以把任何对象转换成布尔值。默认情况下,所有对象都会返回True,除非被定义为返回False。

有几个built-ins按定义始终被视为False:

  • 常量None和False
  • 任何_数值类型_的零值(int、float、complex、decimal或fraction)
  • 空的_序列_和_集合_(str、list、set、tuple、dict、range(0))
>>> bool(None)
False

>>> bool(1)
True

>>> bool(0)
False

>>> bool([1,2,3])
True

>>> bool([])
False

>>> bool({"Pig" : 1, "Cow": 3})
True

>>> bool({})
False

当对象用于_布尔上下文_时,会通过bool()透明地求值为_真值_或_假值_:

>>> a = "is this true?"
>>> b = []

# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
...  print("True")

# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
...   print("False")

如果类重写并实现了__bool__()方法和/或__len__()方法,就可以定义它们在真值场景下如何求值。

布尔值在底层是如何工作的

bool类型被实现为_int_的_子类型_。这意味着True与1数值相等,False与0数值相等。用_相等运算符_比较它们时,就能观察到这一点:

>>> 1 == True
True

>>> 0 == False
True

不过,bools与ints仍然不同,用_身份运算符_is比较它们时就能看出来:

>>> 1 is True
False

>>> 0 is False
False

注意:在 python >= 3.8 中,在is的_左侧_使用字面量(比如1、''、[]或{})会触发警告。

用相等运算符把布尔变量与True或False比较,被认为是一种Python 反模式。而应该使用身份运算符is:


>>> flag = True

# Not "Pythonic"
>>> if flag == True:
...    print("This works, but it's not considered Pythonic.")

# A better way
>>> if flag:
...    print("Pythonistas prefer this pattern as more Pythonic.")
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 布尔值

练习已锁定

再解锁 2 个练习即可练习 布尔值