6

许多编程语言,包括 Python,都支持这样的操作:

", ".join(["1","2","3"])

返回字符串

"1, 2, 3"

我知道是这种情况,但我不明白它背后的设计决策——当然,join在列表上执行操作在语义上会更有效,如下所示:

["1","2","3"].join(", ")

如果有人可以解释设计决定并对此有所了解,我将不胜感激。

编辑:看起来 Javascript 的join方法在列表中;如果有人有遵循特定语言约定的示例,请随时评论/回答该特定语言的选择。

4

1 回答 1

3

对于 python,有一些反对它的论据。首先,如果它是一个接受任意可迭代的字符串方法,那么您只需要join在字符串对象上支持该方法,它就会自动适用于任何可迭代的对象。否则,自定义可迭代对象也需要支持join方法等。

考虑:

", ".join(["1","2","3"])
", ".join(("1","2","3"))
", ".join(str(x) for x in xrange(1,4))
", ".join({'1':None,'2':None,'3':None})
", ".join({'1','2','3'})  #set literal syntax -- python2.7+
", ".join("123")

6 种不同的类型都由一个方法非常简单地支持(我只触及了内置类型)。

join其次,如果列表中的所有内容都是类型,则只能列出列表basestring。在列表上提供一个方法似乎很愚蠢,如果您在内容错误的列表上使用它会引发异常——至少,这里的 API 似乎有点棘手(对我来说)。当然,您可能会争辩说,list.remove如果使用错误的参数调用它会引发异常。这是真的——但通常你只删除一个项目。它的运行水平低于join应有的水平。当然,这个论点比我提出的第一个论点要弱,所以如果你不喜欢它,就回到论点 1 上。

于 2013-04-30T13:44:12.510 回答