我们有一个清单:
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
为什么不自动将收到的列表自动转换为字符串?
你什么时候不需要它将它们转换成字符串?是否有一些我丢失的小边缘情况?
答案 0 :(得分:9)
明确比隐含更好。
和
错误绝不应该以无声方式传递。
隐式转换为字符串可以轻松地隐藏错误,我真的想知道我是否突然在某个地方设置了不同类型的字符串。
如果要显式转换为字符串,可以使用map()
执行此操作,例如:
''.join(map(str, myList))
答案 1 :(得分:2)
尝试执行x = 4 + "8"
之类的操作时遇到的问题是预期含义不明确。 x
应包含"48"
(隐式转换4
至str
)还是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