为什么join()不自动将参数转换为字符串?什么时候不希望它们是字符串?
我们有一个列表:
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
在Python编程中,使用正确的数据类型是很重要的。像print
这样的内置函数会自动进行类型转换(前提是这个类支持__str__
方法),所以你应该在这里进行处理:
让print
来完成这个工作:
print(*myList, sep = " and ")
以上是针对Python 3的,如果你还在使用Python 2,那么请使用:
from __future__ import print_function
3
当你试图执行像 x = 4 + "8"
这样的代码时,会遇到一个问题,那就是这个表达的意思不太明确。我们不知道 x
应该是 "48"
(把 4
转换成字符串)还是 12
(把 "8"
转换成数字)。这两种结果都没有办法说得通。
为了避免这种混淆,Python 要求你必须明确地转换其中一个操作数:
>>> x = str(4) + "8"
>>> y = 4 + int("8")
>>> print x
48
>>> print y
12
14
来自Python之禅的内容:
明确比隐含要好。
还有一句:
错误不应该被默默忽略。
如果在转换成字符串时不明确地进行操作,可能会隐藏一些错误。我希望能清楚地知道,是否在某个地方突然出现了不同类型的数据,而这些数据本来应该是字符串。
如果你想明确地将数据转换为字符串,可以使用map()
这个方法,举个例子:
''.join(map(str, myList))