作为Python程序员,您将经常处理布尔值和条件语句,有时非常复杂。在这种情况下,我们就可以使用any()。
any()函数用于判断给定的可迭代参数iterable是否全部为False,则返回False,如果有一个为True,则返回True。
元素除了是0、空、FALSE外都算TRUE。
今天,我们将学习:
(1)如何使用any()
(2)如何决定使用any()还是or
让我们一起学习吧!
一、在Python中如何使用any()?
假如现在人事部在招聘,要您编写一个程序,根据条件来判断候选人是否能来面试。
条件是要符合以下任一条件:
a.了解Python
b.具有五年或以上的开发经验
c.有一个学位
代码示例如下:
在上面的示例中,如果候选人符合您的三个条件中的任何一个,就安排面试。
技术细节:
Python的any()和or不限于计算布尔表达式。相反,Python对每个参数执行真值测试,计算表达式是真是假。例如,非零整数值被认为是真的,而零被认为是假的:
1or0
1
在本例中,或将非零值1求值为真值,即使它不是布尔类型。或者返回1,不需要评估0的真实性。
如果执行此代码,您将看到Susan和Sam将接受面试邀请:
#shell
pythonrecruit_developer.py
ScheduledinterviewwithSusanJones
ScheduledinterviewwithSamHughes
方法中选择安排与Susan和Sam进行面试的原因是Susan已经知道Python和Sam具有学位。请注意,每个候选人仅需满足一个条件。
另一种方法是使用any()
any()在Python中使用时,必须将职位要求作为可迭代的参数传递:
在每个示例中,any()循环遍历另一个Python迭代器,测试每个元素的真值,直到找到真值或检查每个元素。
注意:最后一个示例使用Python的内置map()函数,该函数返回一个迭代器,其中的每个元素都是将字符串中的下一个字符传递给的结果str.isdigit()。这是any()用于更复杂的检查的有用方法。
您可能想知道any()是否仅仅是or的修饰版本。下面,您将了解它们之间的差异。
or和之间any()在Python中有两个主要区别:
a.语法
b.返回值
首先,您将了解语法如何影响每个函数的可用性和可靠性。其次,您将学习每个方法返回的值的类型。了解这些差异将帮助您确定哪种函数适合何种情况下使用。
语法:
or是一个运算符,因此它需要两个参数,每个参数一边一个:
TrueorFalse
True
any()呢?它是个带有参数的函数,循环访问里面的参数以评估真实性:
语法上的这种差异非常明显,因为它会影响每个方法的可用性和可读性。例如,如果您有一个迭代对象,则可以将迭代对象直接传递给any()。如果用or的方式实现相同的效果,您需要使用循环或类似这样的函数reduce():
在上面的示例中,使用reduce()将iterable作为参数传递给or。可以更有效地完成操作any,可以直接将Iterables作为参数。
为了更说明问题,代码如下:
在is_local()执行时间比较长时,而knows_python()已经返回True。这称为惰性计算估或短路求值。
默认情况下,or延迟计算,而any不会。
在上面的示例中,该程序甚至不需要确定Susan是否是本地用户,因为它已经确认她知道Python。这样足以安排一次面试。在这种情况下,延迟调用函数or将是最有效的方法。
为什么不使用它any()呢?您已经在上面学到了any()将Iterable作为参数,Python会根据Iterable类型计算条件。因此,如果您使用列表,Python将在创建列表期间执行knows_Python()和is_local(),然后调用any():
should_interview=any([knows_python(applicant),is_local(applicant)])
在这里,Python将为每个候选人调用is_local(),即使是那些了解Python的人。因为is_local()需要很长时间才能执行,而且有时是不必要的,所以这是逻辑的低效实现。
当您使用可迭代对象时,有多种方法可以使Python惰性地调用函数,例如使用map()构建迭代器或使用生成器表达式:
any((meets_criteria(applicant)forapplicantinapplicants))
本例使用生成器表达式生成布尔值,指示候选人是否满足面试条件。一旦申请者满足条件,any()将返回True,而不检查其余的候选人。但请记住,这些类型的解决方案也有自己的问题,可能不适合每种情况。
最重要的是要记住any()和or之间的语法差异会影响它们的可用性。
语法并不是影响这些方法可用性的唯一区别。接下来我们看看它们的另一个区别:返回值
Pythonany()和or返回不同类型的值。any()返回一个布尔值,它指示是否在迭代器中找到了真实值:
any((1,0))
True#都是数字
在本例中,any()找到真值(整数1),因此返回布尔值True。
那么or呢?返回找到的第一个真值,但它不一定是布尔值。如果没有真值,那么or会返回最后一个值:
1or0#1是否为0
1#它是1
Noneor0
在第一个示例中,or返回值为1(这是真的),并返回它而不求值为0。
在第二个例子中,None是虚值,所以or返回值为0,这也是虚值。但由于没有更多的参数可供选择,or返回最后一个值0。
结论:
好了!您已经了解了在Python中如何使用any(),以及any()和or之间的区别。随着对这两个函数的深入理解,您已经具备了在项目实际开发者中如何选择,什么时候用什么函数了。