如何使用python';有吗
我对这样的代码感到非常困惑[不是我写的]:如何使用python';有吗,python,any,Python,Any,我对这样的代码感到非常困惑[不是我写的]: version = any(func1(), func2()) # wrong, should be any([func1(), func2()]) def func1(): if something: return 1 else: return None def func2(): if something: return 2 else: return 3 ver
version = any(func1(), func2()) # wrong, should be any([func1(), func2()])
def func1():
if something:
return 1
else:
return None
def func2():
if something:
return 2
else:
return 3
version
必须是一个num。当[func1(),func2()]
是[1,无]
时,应返回1,当是[None,2]
时,应返回2,当[1,2]
时,应返回1
所以我认为在这段代码中使用any()
是错误的,因为any()
只返回True
或False
。如果我用另一种方式重新编排这个逻辑,我就找不到一个优雅的方式来做蟒蛇
我想知道
any()
是否可以实现逻辑,如果不能,如何优雅地实现它?您可以在这里简单地使用或
version = func1() or func2()
在尝试调用函数之前,请确保已定义这些函数
这是因为
或
返回第一个类真值或最后一个值(如果没有类真值)。“无”被认为是错误的,就像在布尔上下文中一样。@AnandSKumar的答案是最优的。但是,如果您感兴趣,只想给您提供一些关于以下方面的信息:
举个例子:
>>> def foo():
... return 2
...
>>> def boo():
... return 3
...
>>> def doo():
... return 4
...
>>> f = [foo, boo, doo]
>>> all(i() < 3 for i in f)
False
>>任意(i()<3表示f中的i)
真的
最终,在any中发生的是,迭代方法j的数组,并指示每个项是否小于3,在这种情况下,“any”将执行的操作是返回与之匹配的“any”条件。所以,即使你发现一个是假的,它仍然会返回真的
还有另一种类似的方法称为“all”,它将确保根据您正在检查的条件满足所有条件。以下是一个例子:
>>> def foo():
... return 2
...
>>> def boo():
... return 3
...
>>> def doo():
... return 4
...
>>> f = [foo, boo, doo]
>>> all(i() < 3 for i in f)
False
>>全部(i()<3表示f中的i)
假的
因此,正如您所看到的,由于一个条件失败,它将返回False。对于任意长度的情况(其中显式链接
或
没有意义),您可以创建一个版本的any
,当所有结果都不正确时,返回第一个truthy值或给定值:
# If on Py2, you'll want to do this to get shortcircuiting behavior
from future_builtins import filter
result = next(filter(None, iterable_to_check), False) # False can be replaced with a chosen default
filter
只生成“truthy”值,两个参数next
获取第一个“truthy”值,如果filter
未找到“truthy”值,则获取默认值
如果iterable\u to\u check
是非空的(而不仅仅是空的),您可以将chained或s的行为(falsy”结果是最后一个值,而不是像False
或None
这样的特定值)与以下内容精确匹配:
当所有元素都是“falsy”时,使用最后一个元素(“truthy”或“falsy”)
要明确的是,如果要测试的东西集是固定的和小的,那么根据Anand的回答,显式的或是更好的方法。你是在问使用any()
,或者如何简化这段代码吗?@NayukiMinase我想知道any()
是否可以实现逻辑,如果不能,如何优雅地实现它?