Python:理解迭代器和join()

2024-09-29 01:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

^{cd1>}函数接受一个iterable作为参数。然而,我想知道为什么:

text = 'asdfqwer'

此项:

^{pr2}$

明显快于:

^{pr3}$

长字符串(即^{cd2>})也会出现这种情况。

看着两个执行长字符串的内存占用,我认为它们都在内存中创建一个和唯一的一个字符列表,然后将它们连接到字符串中。所以我想,也许区别在于^{{cd1>}如何从生成器中创建此列表,以及当Python解释器看到^{{cd4>}时如何执行相同的操作。但是,我还是在猜测,所以我希望有人证实/否认我的猜测。


Tags: 函数内存字符串text列表参数情况iterable
1条回答
网友
1楼 · 发布于 2024-09-29 01:37:15

join方法读取其输入两次;一次是确定要为结果字符串对象分配多少内存,然后再次执行实际的联接。传递一个列表比传递一个生成器对象要快得多,它需要生成一个副本,这样它就可以迭代两次。在

列表理解不仅仅是一个包装在列表中的生成器对象,因此在外部构造列表比使用join从生成器对象创建它要快。生成器对象针对内存效率而不是速度进行了优化。在

当然,一个字符串已经是一个iterable对象,所以您只需编写''.join(text)。(同样,这还不如从字符串显式创建列表那样快。)

相关问题 更多 >