首页 > Python > 为什么是string.join(list)而不是list.join(string)?

为什么是string.join(list)而不是list.join(string)?

上一篇 下一篇

这一直让我感到困惑。似乎这样会更好:

["Hello", "world"].join("-")

比这个:

"-".join(["Hello", "world"])

有没有具体的原因?
分割线
网友回答:

这在字符串方法中讨论过…最后在 Python-Dev 实现中线程,并被 Guido 接受。该线程始于 1999 年 1 月,并包含在 6 年 2000 月发布的 Python 2.0 中(并支持 Unicode)。Python 2000.<>(支持的方法包括)于<>年<>月发布。str.joinstrjoin

  • 此线程中提出了四个选项:
    • str.join(seq)
    • seq.join(str)
    • seq.reduce(str)
    • join作为内置函数
  • Guido 不仅希望支持 s 和 s,还希望支持所有序列/可迭代对象。listtuple
  • seq.reduce(str)对于新人来说很难。
  • seq.join(str)引入了从序列到 str/unicode 的意外依赖关系。
  • join()作为独立的内置函数,它仅支持特定的数据类型。因此,使用内置命名空间并不好。如果要支持许多数据类型,则创建优化的实现将很困难:如果使用该方法实现,则它将是O(n²)。join()__add__
  • 不应省略分隔符字符串 ()。显式总比隐式好。sep

以下是一些其他想法(我自己和我朋友的想法):

  • Unicode支持即将到来,但这不是最终的。当时 UTF-8 最有可能取代 UCS-2/-4。若要计算 UTF-8 字符串的总缓冲区长度,该方法需要知道字符编码。
  • 当时,Python已经决定了一个通用的序列接口规则,用户可以在其中创建一个类似序列(可迭代)的类。但是 Python 直到 2.2 才支持扩展内置类型。当时很难提供基本类(在另一条评论中提到)。iterable

圭多的决定记录在历史邮件中,决定:str.join(seq)

有趣,但它看起来确实正确!巴里,去吧…
圭多·范·罗苏姆

分割线
网友回答:

这是因为任何可迭代对象都可以连接(例如,列表,元组,字典,集合),但其内容和“连接器”必须是字符串。

例如:

'_'.join(['welcome', 'to', 'stack', 'overflow'])
'_'.join(('welcome', 'to', 'stack', 'overflow'))
'welcome_to_stack_overflow'

使用字符串以外的内容将引发以下错误:

类型错误:序列项 0:预期的 str 实例,找到 int

分割线
网友回答:

因为该方法位于字符串类中,而不是列表类中。join()

请参阅 http://www.faqs.org/docs/diveintopython/odbchelper_join.html:

历史笔记。当我第一次学习
Python 时,我希望 join 是一个列表的方法
,它将
分隔符作为参数。很多人
都有同样的感觉,加入方法背后有一个
故事。在 Python 1.6 之前
,字符串没有所有这些
有用的方法。有一个
单独的字符串模块,其中包含
所有字符串函数;每个
函数都采用一个字符串作为其第一个
参数。这些函数被认为
足够重要,可以放在
字符串本身上,这对于下部、上部和
拆分等函数是有意义的
。但是许多核心的Python
程序员反对新的join
方法,认为它应该是列表
的方法,或者它
根本不应该移动,而只是保留
旧字符串模块的一部分(它
仍然有很多有用的东西)。
我只使用新的join方法,但你会看到代码以任何
一种方式编写,如果它真的困扰你,
你可以
改用旧的string.join函数

— Mark Pilgrim, Dive into Python

模板简介:该模板名称为【为什么是string.join(list)而不是list.join(string)?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 320次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-18
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信公众平台 微信素材 微信文章 html5 响应式 微信图片 自适应 单页式简历模板 企业网站 微信模板
您可能会喜欢的其他模板