This answer及其评论提供了对CPython str.join()
的内部工作的一些见解:
list
或tuple
,则会创建一个包含相同内容的新list
。这对我来说似乎有问题。首先,为什么拒绝所有序列类型,但两个?不只是迭代任何序列两次而不是复制它更快?为什么要制作一个list
,特别是如果你不知道你正在制作的迭代的长度?您不需要随机访问,只需重复迭代,并使用list
意味着您可能需要在生成期间多次重新分配和复制。使用链接列表或deque
?
任何人都可以对这些设计决策提供一些见解吗?
答案 0 :(得分:2)
首先,为什么要拒绝所有序列类型而不是两个?不只是迭代任何序列两次而不是复制它会更快吗?
join
的论点不一定是序列。它是任何 iterable ,并且一些迭代不能多次迭代。例如,它可以是一个生成器表达式,在迭代一次后会耗尽。
至于你的第二个问题,我不是特别知道,虽然我猜测在内部使用列表和元组简化了C级的实现。我认为对你的问题更广泛的回答是,没有人真的打算对str.join
进行一切可能的优化。我猜大多数用例无论如何都会在列表或元组上调用它。