python:将列表转换为字符串的语义

本问题已经有最佳答案,请猛点这里访问。

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

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

返回字符串

1
"1, 2, 3"

我理解这是一种情况,但我不理解它背后的设计决策——在列表上执行join操作在语义上肯定更有效,比如:

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

如果有人能解释一下这个设计决定,并解释一下,我将不胜感激。

编辑:看起来Javascript在列表中有join方法;如果有人有特定语言遵循约定的例子,也可以用该特定语言对选择进行评论/回答。


对于python,有一些反对它的参数。首先,如果它是一个接受任意迭代的string方法,那么您只需要在string对象上支持join方法,并且它可以自动处理任何可迭代的东西。否则,定制的可迭代对象还需要支持join方法,等等。

考虑:

1
2
3
4
5
6
",".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种不同的类型都由一个方法非常简单地支持(我只讨论了内置类型)。

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