注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
Python内置序列函数系列所有文章都以几个术语为基础:可迭代对象(iterable)、迭代器(iterator)、序列(sequence)、生成器(generator)等。若对此不太理解,可移步Python随笔4前面部分查看。
今天讨论一组有意思的函数:all与any函数。
1.all函数
all函数的具体语法是:
all(iterable)——参数iterable(可迭代对象)的所有元素之中,没有1个是False,则返回True;若有至少1个是False,则返回False。
这是什么意思呢?两层意思:第一,当可迭代对象中所有元素都为True的话,all(iterable)函数返回True;第二,若可迭代对象本身是空的,比如一个空的list,也就是没有任何元素的时候,依然返回True,因为没有任何元素,依然表示所有元素中没有1个是False。
all(iterable)函数等价于:
def all(iterable):
for element in iterable:
if not element:
return False
return True
2.any函数
any函数的具体语法是:
any(iterable)——参数iterable(可迭代对象)的所有元素之中,只要有1个是True,则返回True;否则返回False。
这个跟上面all函数是一样的道理,依然两层意思:第一,当可迭代对象中所有元素里至少有1个是True的话,any(iterable)函数返回True;第二,若可迭代对象本身是空的,比如一个空的list,也就是没有任何元素的时候,那么返回False,因为没有任何元素,就表示所有元素中没有1个是True。
any(iterable)函数等价于:
def any(iterable):
for element in iterable:
if element:
return True
return False
这两个函数的例子如下:
l1 = ['a', 3, (2, 3), {'a': 1}] # 里面所有元素全为真值。
l2 = [1, 2, 0, 'a'] # 里面元素有真值,也有假值。
l3 = [0, {}, set(), {}] # 里面所有元素全为假值。
all(l1)
Out[30]: True
all(l2)
Out[31]: False
all(l3)
Out[32]: False
any(l1)
Out[33]: True
any(l2)
Out[34]: True
any(l3)
Out[35]: False
l4 = [] # l4是一个空的列表(可迭代对象)。
all(l4)
Out[37]: True
any(l4)
Out[38]: False
3.小结
all函数和any函数实际上是基本逻辑“与”、“或”在可迭代对象(如序列)层面上的体现与应用。注意并理解当可迭代对象本身是空(比如列表为空)时的特殊情况。