python any语句_python干货分享:如何使用any(),any()和or,我们又如何选择?

作为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对每个参数执行真值测试,计算表达式是真是假。例如,非零整数值被认为是真的,而零被认为是假的:

>>> 1 or 0

1

在本例中,或将非零值1求值为真值,即使它不是布尔类型。或者返回1,不需要评估0的真实性。

如果执行此代码,您将看到Susan和Sam将接受面试邀请:

#shell

$ python recruit_developer.py

Scheduled interview with Susan Jones

Scheduled interview with Sam Hughes

方法中选择安排与Susan和Sam进行面试的原因是Susan已经知道Python和Sam具有学位。请注意,每个候选人仅需满足一个条件。

另一种方法是使用any()

any()在Python中使用时,必须将职位要求作为可迭代的参数传递:

在每个示例中,any()循环遍历另一个Python迭代器,测试每个元素的真值,直到找到真值或检查每个元素。

注意:最后一个示例使用Python的内置map()函数,该函数返回一个迭代器,其中的每个元素都是将字符串中的下一个字符传递给的结果str.isdigit()。这是any()用于更复杂的检查的有用方法。

您可能想知道any()是否仅仅是or的修饰版本。下面,您将了解它们之间的差异。

or和之间any()在Python中有两个主要区别:

a.语法

b.返回值

首先,您将了解语法如何影响每个函数的可用性和可靠性。其次,您将学习每个方法返回的值的类型。了解这些差异将帮助您确定哪种函数适合何种情况下使用。

语法:

or是一个运算符,因此它需要两个参数,每个参数一边一个:

>>> True or False

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) for applicant in applicants))

本例使用生成器表达式生成布尔值,指示候选人是否满足面试条件。一旦申请者满足条件,any()将返回True,而不检查其余的候选人。但请记住,这些类型的解决方案也有自己的问题,可能不适合每种情况。

最重要的是要记住any()和or之间的语法差异会影响它们的可用性。

语法并不是影响这些方法可用性的唯一区别。接下来我们看看它们的另一个区别:返回值

Python any()和or返回不同类型的值。any()返回一个布尔值,它指示是否在迭代器中找到了真实值:

>>> any((1, 0))

True #都是数字

在本例中,any()找到真值(整数1),因此返回布尔值True。

那么or呢?返回找到的第一个真值,但它不一定是布尔值。如果没有真值,那么or会返回最后一个值:

>>> 1 or 0 #1是否为0

1 #它是1

>>> None or 0

在第一个示例中,or 返回值为1(这是真的),并返回它而不求值为0。

在第二个例子中,None是虚值,所以or返回值为0,这也是虚值。但由于没有更多的参数可供选择,or返回最后一个值0。

结论:

好了!您已经了解了在Python中如何使用any(),以及any()和or之间的区别。随着对这两个函数的深入理解,您已经具备了在项目实际开发者中如何选择,什么时候用什么函数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值