我对这样的代码感到非常困惑[不是我写的]:
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
Run Code Online (Sandbox Code Playgroud)
version必须是一个数字.当[func1(), func2()]是[1, None],应该返回1,当是[None, 2],应该返回图2,当[1, 2],应该返回1.
所以我认为any()在这段代码中使用是错误的,因为any()只需返回True或False.如果我用另一种方式重写这个逻辑,我找不到一个优雅的方式作为pythoner.
我想知道是否any()可以实现逻辑,如果没有,如何优雅地实现它?
Ana*_*mar 12
你可以or在这里使用.
version = func1() or func2()
Run Code Online (Sandbox Code Playgroud)
在尝试调用函数之前,请确保已定义函数.
这是有效的,因为or返回第一个类似True的值或最后一个值(如果没有值类似True).并且'None'在布尔上下文中被认为是假的.
@ AnandSKumar的答案是最佳的.但是,如果您感兴趣,只是为您提供一些信息:
举个例子:
>>> def foo():
... return 2
...
>>> def boo():
... return 3
...
>>> def doo():
... return 4
...
>>> f = [foo, boo, doo]
Run Code Online (Sandbox Code Playgroud)
>>> any(i() < 3 for i in f)
True
Run Code Online (Sandbox Code Playgroud)
最终在any中发生的是迭代方法j的数组,并指出每个项是否小于3,在这种情况下"any"将做什么返回匹配的"ANY"条件.所以即使你发现一个是假的,它仍然会返回True.
还有另一种类似的方法称为"全部",它将确保根据您检查的条件满足所有条件.这是一个例子:
>>> all(i() < 3 for i in f)
False
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,因为一个条件失败,它将返回False.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |