这是在String方法中讨论的......最后在Python-Dev achive中的线程,并被Guido接受。该线程始于1999年6月,并str.join包含在2000年9月发布的Python 1.6中(并支持Unicode)。Python 2.0(str包括支持的方法join)于2000年10月发布。
这个帖子中提出了四个选项:
str.join(seq)
seq.join(str)
seq.reduce(str)
join 作为内置功能
Guido不仅支持lists,tuples,还支持所有序列/迭代。
seq.reduce(str) 新来者很难。
seq.join(str) 引入了从序列到str / unicode的意外依赖。
join()作为内置函数,仅支持特定数据类型。因此使用内置命名空间并不好。如果join()支持许多数据类型,那么创建优化的实现将很困难,如果使用该__add__方法实现,那么它是O(n²)。
sep不应省略分隔符字符串()。显式优于隐式。
此主题中没有其他原因。
这里有一些额外的想法(我自己和我的朋友):
Unicode支持即将到来,但它不是最终的。那时UTF-8最有可能取代UCS2 / 4。要计算UTF-8字符串的总缓冲区长度,需要知道字符编码规则。
那时,Python已经决定了一个公共序列接口规则,用户可以创建一个类似序列(可迭代)的类。但是Python不支持在2.2之前扩展内置类型。那时很难提供基本的可迭代类(在另一条评论中提到)。
Guido的决定记录在历史邮件中,决定str.join(seq):
有趣,但看起来确实对!巴里,去吧... -
Guido van Rossum