Python bool()

时间:2020-02-23 14:42:28  来源:igfitidea点击:

Python bool()函数返回对象的布尔值。
bool类只有两个实例– True和False。
该程序无法扩展。

Python bool()

Python bool()函数使用标准的真值测试规则将指定的参数对象转换为布尔值。

用于返回布尔值的一些规则是:

  • 如果未实现__bool __()函数和__len __()函数,则任何对象布尔值都被视为true。

  • 如果对象没有定义__bool __()函数,而是定义了__len __()函数,则使用__len __()函数获取对象的布尔值。
    如果__len __()返回0,则bool()函数将返回False,否则返回True。

  • 对于NoneFalse常量,布尔值将为False。

  • 对于零值数字(例如0、0.0、0j,Decimal(0)和Fraction(0,1)),布尔值将为False。

  • 对于空序列(元组,字典)和集合(例如",(),[],{}等),布尔值将为False。

Python bool()示例

让我们看一些带有bool实例和None的bool()简单示例。

x = True
b = bool(x)

print(type(x))  # <class 'bool'>
print(type(b))  # <class 'bool'>
print(b)  # True

x = False
b = bool(x)
print(b)  # False

x = None
b = bool(x)

print(type(x))  # <class 'NoneType'>
print(type(b))  # <class 'bool'>
print(b)  # False

带有字符串的Python bool()

# string examples
x = 'True'
b = bool(x)

print(type(x))  # <class 'str'>
print(type(b))  # <class 'bool'>
print(b)  # True

x = 'False'
b = bool(x)
print(b)  # True because len() is used

x = ''
print(bool(x))  # False, len() returns 0

带有数字的Python bool()

from fractions import Fraction
from decimal import Decimal

print(bool(10))  # True
print(bool(10.55))  # True
print(bool(0xF))  # True
print(bool(10 - 4j))  # True

print(bool(0))  # False
print(bool(0.0))  # False
print(bool(0j))  # False
print(bool(Decimal(0)))  # False
print(bool(Fraction(0, 2)))  # False

带有集合和序列的Python bool()函数

tuple1 = ()
dict1 = {}
list1 = []
print(bool(tuple1))  # False
print(bool(dict1))  # False
print(bool(list1))  # False

带有自定义对象的Python bool()函数

让我们看看自定义对象会发生什么。
我不会为该对象定义__bool __()__len __()函数。

class Data:
  id = 0

  def __init__(self, i):
      self.id = i

d = Data(0)
print(bool(d))
d = Data(10)
print(bool(d))

输出:

True
True

由于未定义__bool __()__len __()函数,因此对象布尔值将返回True。

让我们向Data类添加__len __()函数。

# returns 0 for id <= 0, else id
  def __len__(self):
      print('len function called')
      if self.id > 0:
          return self.id
      else:
          return 0

输出:

len function called
False
len function called
True

很明显__len __()函数是通过bool()调用的。
当返回0时,bool()函数将返回False。
当返回正整数时,则bool()函数将返回True。

现在,我们向Data类添加__bool __()函数:

# returns True for id > 0 else False
  def __bool__(self):
      print('bool function called')
      return self.id > 0

现在上面的代码片段输出将是:

bool function called
False
bool function called
True

从输出中可以清楚地看到,如果同时为对象定义了__bool __()__len __()函数,则可以使用__bool __()函数来获取对象的布尔值。