Python all()函数

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

Python all()函数是内置函数之一。
它以iterable作为参数,如果iterable的所有元素为true或者为空,则返回True。

Python all()函数

Python all()函数是一种实用程序方法,是以下函数的快捷方式。

def all(iterable):
  for element in iterable:
      if not element:
          return False
  return True

我们来看一些python all()函数的示例。

带有布尔值的Python all()示例

# iterable has all True
list_bools = [True, True, True]

print(all(list_bools))

# iterable all elements are not True
list_bools = [True, True, False]

print(all(list_bools))

输出:

True
False

带有空可迭代的Python all()

# iterable is empty
list_bools = []

print(all(list_bools))

输出:

True

Python all()与字符串列表

# iterable elements are True string
list_strs = ['True', 'True']

print(all(list_strs))

# iterable all elements are true string with different case
list_strs = ['True', 'true']

print(all(list_strs))

# iterable all elements are not true string
list_strs = ['abc', 'true']

print(all(list_strs))

# iterable all elements are empty string
list_strs = ['', 'true']

print(all(list_strs))

输出:

True
True
True
False

当我们想要一个对象布尔值时,python在对象中寻找__bool__函数。

如果未定义__bool__函数,则如果定义了len()函数。
如果len()输出为非零,则对象布尔值被视为True。

如果一个类都没有定义__len __()或者__bool __()函数,则其所有实例均被视为True。

Python 3使用__bool__函数来检查对象的布尔值,如果您使用的是Python 2.x,则必须实现__nonzero__函数。

带有自定义对象的Python all()

让我们使用自定义类测试上述说明。
我们将创建一个自定义Person类,并在列表中使用其对象,然后在其上调用all()函数。

class Person:
  name = ""

  def __init__(self, n):
      self.name = n

list_objs = [Person("hyman"), Person("Lisa")]
print(all(list_objs))

list_objs = [Person("A"), Person("David")]
print(all(list_objs))

输出:

True
True

由于我们的对象未定义__len __()和__bool __()函数,因此其布尔值为True。

让我们继续为Person类定义__len __()函数,如下所示。

def __len__(self):
      print('len function called')
      return len(self.name)

现在,早期代码片段的输出将是:

len function called
len function called
True
len function called
len function called
True

注意,当all()与Person对象列表一起使用时,将为每个对象调用len()函数。

现在,为Person类定义__bool__函数,看看上面的代码会发生什么。

def __bool__(self):
      print('bool function called')
      if len(self.name) > 3:
          return True
      else:
          return False

输出:

bool function called
bool function called
True
bool function called
False

从输出中可以清楚地看到,如果定义了__bool__函数,那么它将用于获取python对象的布尔值。
请注意,第二个list all()函数的输出为False,因为'A'的长度小于3。