当前位置:首页>python>Python any&all方法,read&readline&readlines方法,以及is和==的对比

Python any&all方法,read&readline&readlines方法,以及is和==的对比

  • 2026-10-11 07:03:23
Python any&all方法,read&readline&readlines方法,以及is和==的对比

目录

any()和all()方法的区别Python读取文件的read, readline, readlines方法的使用Python中is和==比较符的区别是什么?

any()和all()方法的区别

any():可迭代对象中有1个元素为真就返回True,全假或空的迭代对象就返回False。

找到第一个真值就停止迭代,全部遍历都没有真值则返回False

all():可迭代对象中所有元素都为真就返回True,有一个假值就返回False。

找到第一个假值就停止迭代,全部遍历都没有假值则返回True

any()和all()都具备短路特性。

# 遍历元素,碰到第一个真值则返回True,全部遍历都没有真值则返回False
In [35]: any([])    # 没有任何一个为真
Out[35]: False

#
 遍历元素,碰到第一个假值则返回False,全部遍历都没有假值则返回True
In [36]: all([])    # 没有任何一个为假,空真
Out[36]: True

#
 ************************************* #
# 首先检查__bool__,为True或False
# 其次检查__len__是否为0,为0则为假值
# ************************************* #

False、None、数字0、空字符串""、空列表[]、空字典{}、空元组()、空集合set()都是假值,

Python读取文件的read, readline, readlines方法的使用

  • read()

直接一次性读取文件中所有的字符串内容,如果文件是10G,则会占用10G内存来读取文件。

即文件指针从头到尾仅移动1次,把全部内容读取成完整字符串并返回,针对较大文件会占用比较大的内存空间。

  • readline()

文件指针每次仅移动一行,返回该行的字符串内容,可多次调用逐行读取,返回的字符串末尾会有换行符\n。

读取到文件末尾的时候会返回空字符串,可使用if not line来判断是否为空断言已读完文件,搭配while循环使用。

在处理大文件并进行逐行读取时,应使用readline()方法,

避免一次性将所有内容载入内存,提高程序性能和稳定性。

  • readlines()

文件指针从头到尾仅移动1次,把每行内容切割并放进列表中返回,返回的每行字符串末尾会有换行符\n。

for line in f可直接迭代文件对象,不会一次性将所有行的内容加载到列表中,适合处理大文件场景。

Python中is和==比较符的区别是什么?

  • is

is比较变量的内存地址是不是同一个对象,底层调用id()进行对比。

适用于所有对象,常用于不可变类型(即int, str, tuple),还有None。

  • ==

==比较变量的值,底层调用__eq__进行对比。

针对None的比较,一定要用is,若比较对象重写了__eq__方法,则可能会出现不符合预期的结果。

可变类型:值变,id不变(list, dict, set, 自定义的实例对象)。

不可变类型:值变,id变(int,float,bool,str,tuple,bytes,frozenset)。

Python会对部分字符串进行缓存优化(短字符串),指向同一个对象,因此对于短字符串使用is比较时会返回True。

In [10]: a = 'hello'
In [11]: id(a)
Out[11]: 2693636530864
In [12]: b = 'hello'
In [13]: id(b)
Out[13]: 2693636530864

In [15]: id(b)
Out[15]: 2693654118000
In [16]: b = 'hello world'
In [17]: id(b)
Out[17]: 2693654049392
In [18]: a = 'hello world'
In [19]: id(a)
Out[19]: 2693636111600
In [20]: a is b
Out[20]: False
In [21]: a == b
Out[21]: True

Python会对小整数(即-5到256)进行缓存优化,指向同一个对象,那么大于256的整数则不会被缓存,会创建新的对象。

In [23]: a = 100
In [24]: b = 100
In [25]: a is b
Out[25]: True

#
 超过256时,会创建新的对象
In [28]: a = 257
In [29]: b = 257
In [30]: a is b
Out[30]: False
In [31]: a == b
Out[31]: True

最新文章

随机文章