gpt4 book ai didi

python - CPython 的 str.join() 是不是有点低效?

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:53 25 4
gpt4 key购买 nike

This answer及其注释提供了对 CPython 的 str.join() 内部工作原理的一些见解:

  1. 如果参数不是 listtuple,则会创建一个包含相同内容的新 list
  2. 参数被迭代一次,以求出它包含的字符串的长度。
  3. 为新字符串分配内存。
  4. 最后,对参数进行第二次迭代,并将字符串复制到新字符串的内存中。

这对我来说似乎有问题。对于初学者,为什么要拒​​绝除两种之外的所有序列类型?将任何序列迭代两次而不是复制它会不会更快?为什么要创建一个 list,尤其是当您不知道要创建它的可迭代对象的长度时?您不需要随机访问,只需重复迭代,使用 list 意味着您可能必须在其生成期间多次重新分配和复制。使用链表或 deque 不是更有意义吗?

谁能提供一些关于这些设计决策的见解?

最佳答案

For starters, why reject all sequence types but two? Wouldn't just iterating over any sequence twice instead of copying it be much faster?

join 的参数不必是一个序列。它可以是任何 iterable,并且一些 iterables 不能被迭代多次。例如,它可以是一个生成器表达式,迭代一次后就会耗尽。

关于你的第二个问题,我不太清楚,不过我猜想在内部使用列表和元组可以简化 C 级别的实现。我认为对您的问题更广泛的回答是,没有人真正打算对 str.join 进行所有可能的优化。我猜绝大多数用例都是在列表或元组上调用它。

关于python - CPython 的 str.join() 是不是有点低效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com