首页 > 开发 > Python > 正文

Python all()函数

2023-04-24 19:21:37
字体:
来源:转载
供稿:网友

Python all()函数是Python的内置函数之一。

Python all()函数的作用是判断给定的可迭代对象的所有元素是否都为真(或者可迭代对象是否为空),如果是则all()函数返回True,否则返回False

在前面的文章中关于Python中bool值进行介绍过:在Python中,任何值为0的数字类型、空的字符串、空的列表、空的元组、空的集合等都为False,值为None或False的对象也是False,其它情况都为True.

该函数与any()函数具有相似性,读者可以了解一下any()函数的使用方法。

但该函数对于空的可迭代对象将返回True

all()函数的语法格式

all(iterable)

参数

iterable:用于判断所有元素是否都为真的可迭代对象。

返回值

该函数的返回值是逻辑值TrueFalse.

如果可迭代对象中的所有元素为真或可迭代对象为空则返回True,否则返回False

该函数等价于下面的函数定义:

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

Python all()函数

all()函数使用示例

1、可迭代对象为空的情况

lst = []  #空列表
print(all(lst))
t = ()  #空元组
print(all(t))
d = {}  #空字典
print(all(d))
s = set()  #空集合
print(all(s))
st = ''  #空字符串
print(all(st))

输出结果:

True
True
True
True
True

从上面输出结果可以看出,all()函数对于空的可迭代对象返回True.

2、all()函数使用示例2

lst1 = [0, 1, 2, 3]
print(all(lst1))
lst2 = [1,2,3,4]
print(all(lst2))
lst3 = ['','b','i','y','e','5','u']
print(all(lst3))
print(all(lst3[1:]))   #排除第一个元素
lst4 = ["Python","R","SPSS",None]
print(all(lst4))
print(all(lst4[:-1]))  #排除最后一个元素

输出结果:

False
True
False
True
False
True

从上面的输出结果可以看出,对于包含空字符串0None的可迭代对象,all()函数返回False,否则返回True.

3、复合的迭代对象

lst5 = [[],1,2,3]
lst6 = [(),1,2,3]
lst7 = [[1,2,None],1,2]
lst8 =[[],[]]
print(f"{all(lst5)},{all(lst6)},{all(lst7)},{all(lst8)}")

输出结果:

False,False,True,False

从上面的例子可以看出,列表中有空的列表,元组的,all()函数返回False,可迭代对象中的子列表中的元素不全是False,且可迭代对象的其它元素不为False时,all()函数返回True.

4、all()函数用于用户自定义对象

在讲解bool()函数的用法时说过,在Python3.x中,用户自定义对象中如果定义了__bool__()函数,则对象的真假由__bool__()函数决定,如果没定义__bool__()函数,则如果对象中定义了__len__()函数,则对象的真假由__len__()函数决定。对于长度非0的对象返回True,否则返回False.

如果自定义对象中既没有定义__boo__()函数,也没有定义__len__()函数,all()函数返回True.

(1)定义了__bool__()和__len__()函数

class Student:
    name = ""
    def __init__(self, name):
        self.name = name

    def __bool__(self):
        print(self.name,"调用__bool__()")
        return bool(self.name)

    def __len__(self):
        print("调用__len__()")
        return len(self.name)

lst_objs1 = [Student("Wang"),Student("Li")]
print(all(lst_objs1))
lst_objs2 = [Student(""),Student("Liu")]
print(all(lst_objs2))

输出结果:

Wang 调用__bool__()
Li 调用__bool__()
True
调用__bool__()
False

从输出结果中,我们可以得到两个信息:一是在自定义对象中在既定义了__bool__()函数又定义了__len__()函数时,程序使用__bool__()函数决定对象的真假;二是注意到在lst_objs2中只输出了一个“ 调用__bool__()”内容,说明当all()函数在确定了某一个元素已经是False时,不再判断下面的元素。

(2)只定义__len__()函数

class Teacher:
    name = ""
    def __init__(self, name):
        self.name = name

    def __len__(self):
        print(f"{self.name}调用__len__()")
        return len(self.name)

lst_objs1 = [Teacher("Wang"),Teacher("Li")]
print(all(lst_objs1))
lst_objs2 = [Teacher(""),Teacher("Liu")]
print(all(lst_objs2))

输出结果:

Wang调用__len__()
Li调用__len__()
True
调用__len__()
False

(3)未定义__len__()和__bool__()函数

class Department:
    name = ""
    def __init__(self, name):
        self.name = name

lst_objs1 = [Department("M"),Department("C")]
print(all(lst_objs1))
lst_objs2 = [Department(""),Department("A")]
print(all(lst_objs2))

输出结果:

True
True

从上面的输出结果可以看出,对于用户自定义对象,若没有定义__bool__()函数,也没有定义__len__()函数的情况下,all()函数一律返回True.

总结

all()函数是判断可迭代对象中的元素中是否都为真值,若可迭代对象中不含0值,空值,False值,None值时,则返回True,否则返回False。空的可迭代对象被认为是真值。未定义__bool__()和__len__()函数时,all()函数也返回True.

上一篇:Python id()函数

下一篇:Python any()函数

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表