为什么join()不会自动将其参数转换为字符串?你什么时候不想让它们成为弦乐?

时间:2014-03-03 16:59:38

标签: python string-concatenation

我们有一个清单:

myList = [1, "two"]

想要打印出来,通常我会使用类似的东西:

"{0} and {1}".format(*myList)

但你也可以这样做:

" and ".join(myList)

但不幸的是:

>>> " and ".join(myList)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found

为什么不自动将收到的列表自动转换为字符串?

你什么时候不需要它将它们转换成字符串?是否有一些我丢失的小边缘情况?

3 个答案:

答案 0 :(得分:9)

来自Zen of Python

  

明确比隐含更好。

  

错误绝不应该以无声方式传递。

隐式转换为字符串可以轻松地隐藏错误,我真的想知道我是否突然在某个地方设置了不同类型的字符串。

如果要显式转换为字符串,可以使用map()执行此操作,例如:

''.join(map(str, myList))

答案 1 :(得分:2)

尝试执行x = 4 + "8"之类的操作时遇到的问题是预期含义不明确。 x应包含"48"(隐式转换4str)还是12(隐式转换"8"int)?我们无法证明这两种结果的合理性。

为了避免这种混淆,Python需要显式转换其中一个操作数:

>>> x = str(4) + "8"
>>> y = 4 + int("8")
>>> print x
48
>>> print y
12

答案 2 :(得分:0)

使用正确的类型是Python编程的一部分。像print这样的常规内置功能会进行转换(如果类支持__str__),那么您应该这样做:

print完成工作:

print(*myList, sep = " and ")

这适用于Python 3,如果你还在Python 2上,那么使用:

from __future__ import print_function