Does all() return False right after finding a False in a sequence?
Try to run this code:

def return_true():
    print('I have just been printed')
    return True

print(all((False, return_true())))

正如你所看到的,I have just been printed是打印出来的,尽管之前有假.

另一个例子:

def return_false():
    print('I have just been printed')
    return False

print(any((True, return_false())))

在这种情况下,I have just been printed在这个代码中被打印出来,即使之前是真的.

推荐答案

是的,all()any()都像你描述的那样短路.如果任何项目为false-y,all()将提前返回,如果任何项目为truthy,any()将提前返回.

您看到打印输出的原因是,在调用allany之前调用了return_true()return_false().他们一定是.毕竟,在调用函数之前,必须先计算函数的参数.

这是:

print(all((False, return_true())))

相当于:

x = return_true()
print(all((False, x)))

i、 e.return_true()是无条件判断的.

为了获得所需的短路行为,需要对sequence itself进行惰性判断.实现这一点的一个简单方法是使一个iterable,不是我们想要测试的值,而是things we can call,以获得这些值;然后使用生成器表达式创建一个延迟调用它们的序列.See also

在这里,这可能看起来像:

print(all(
    x()
    for x in (lambda: False, return_true)
))

print(any(
    x()
    for x in (lambda: True, return_false)
))

Python相关问答推荐

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

DataFrame groupby函数从列返回数组而不是值

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

如何从具有不同len的列表字典中创建摘要表?

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

Python虚拟环境的轻量级使用

对所有子图应用相同的轴格式

如何从pandas的rame类继承并使用filepath实例化

Python+线程\TrocessPoolExecutor

需要帮助重新调整python fill_between与数据点

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

python panda ExcelWriter切换动态公式到数组公式

基于多个数组的多个条件将值添加到numpy数组

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

计算机找不到已安装的库'

如何反转一个框架中列的值?

按列表分组到新列中

为什么这个正则表达式没有捕获最后一次输入?

Python键盘模块不会立即检测到按键