【Python】any() 或者 or
2021-04-26 10:30
标签:升级版 ESS test str expr cal 使用 如何 lse 在我之前的文章中有any()和all()的对比:any()和all()对比其中介绍了 由于这个特性,决定了 现在有这样的一个场景:某学校要招聘老师,要满足一下任意一个要求: 现在有一批申请人: 如何从这样的数据判断申请人是否符合条件呢? 输出结果: 如果使用 显然最终输出结果是一样的。 到这里,是不是觉得 两者的区别总共有俩点: 接下来让我们详细的介绍一下 众所周知 而 这就意味着,如果对于一个可迭代的参数使用 除了这个区别,俩者还有一个更重要的区别,正常情况下当众多条件下出现一个 运行一下看一下输出结果: 从结果不难发现, 上面的例子就是使用生成器表达式(generator expression),当其中一个条件返回为 How to Use any() in Python 【Python】any() 或者 or 标签:升级版 ESS test str expr cal 使用 如何 lse 原文地址:https://www.cnblogs.com/leetao94/p/13253464.html前言
any()
函数的基本特性---可迭代对象中有任意一个不为False的时候,返回True,如果可迭代对象为空的话,返回Falseany()
可以用在判断语句中与 or
一较高下。那么俩者有区别吗?显然是有的,接下来就让我们详细的对比俩者。案例
applicants = [
{
"name":"张三",
"has_degree": False,
"has_experience":True,
"is_professional": False
},
{
"name":"李四",
"has_degree": True,
"has_experience":False,
"is_professional": False
},
{
"name":"王二",
"has_degree": False,
"has_experience":False,
"is_professional": False
}
]
or
for applicant in applicants:
if applicant.get("has_degree") or applicant.get("has_experience") or applicant.get("is_speical"):
print(f‘{applicant["name"]} 符合条件!‘)
张三 符合条件!
李四 符合条件!
any
any()
就需要参数是可迭代的(iterable),也就意味着我们需要将参数转化为list、tupple等。for applicant in applicants:
if any(applicant.get("has_degree"),applicant.get("has_experience"), applicant.get("is_speical")):
print(f‘{applicant["name"]} 符合条件!‘)
any()
像升级版的 or
? 那究竟是不是这样子呢?别着急忘下看。or 和 any 的区别
语法
or
是一个逻辑运算符,所以它需要两个参数:>>> True or False
True
any()
是一个函数,只需要一个可迭代的参数:>>>any([True,False])
True
any()
会显得更简单一旦,如果使用or
,则需要我们去遍历了:>>> import functools
>>> functools.reduce(lambda x, y: x or y, (True, False, False))
True
True
的时候,我们希望对余下的条件不做任何判断直接返回 True
(这种被称作 短路求值short-circuit evaluation 或者 延迟计算lazy evaluation),让我们看看 or
和 any()
是否这样呢?ef test_a():
print(‘A was called‘)
return True
def test_b():
print(‘B was called‘)
return False
print(‘===call_or===‘)
a_or_b = test_a() or test_b()
print(‘===call_any===‘)
a_any_b = any([test_a(),test_b()])
===call_or===
A was called
===call_any===
A was called
B was called
or
是按照预期返回的,而any()
则不是。那么有没有办法让Python调用函数的时候也遵循 延迟计算(lazy evaluation)呢?方法是有的---通过map()构造一个生成器或者使用生成器表达式:a_any_iterable_b = any((test() for test in [test_a,test_b]))
True
,则any()
就会直接返回True
,而不会继续校验余下的条件。返回值
any()
和or
俩者的返回值也大不相同。any()
在任何清理下都会返回一个布尔值(True、False):>>> any((1, 0))
True
or
则不是这样,它会发现它找到的第一个布尔值为True
的元素,即bool(value)
为True
,返回value
,否则返回最后一个元素:>>> 1 or 0
1
>>> None or 0
0
参考
上一篇:树状数组的基础知识
下一篇:python文件及目录操作