我现在正在学习Python。 我创建了一个函数
def my_func(my_tuple):
return sum(my_tuple)
那我就做
print(my_func(("a", "b")))
我得到:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
但是当我直接打电话给
sum
时,我得到了这个:
print(sum("a", "b"))
^^^^^^^^^^^^^
TypeError: sum() can't sum strings [use ''.join(seq) instead]
我知道我不能将
sum
与字符串一起使用,以及如何修复它,但为什么我会收到两条不同的消息?
sum
的文档:
sum(可迭代,/,开始=0)
从左到右对 start 和 iterable 的项目求和并返回总数。 iterable的项通常是数字,start值不允许是字符串。
sum
用于添加数字,默认 start 值为 0,因此 sum(("a", "b"))
相当于:
0 + "a" + "b"
并且由于 Python 不支持将整数与字符串相加,因此您会得到上述的
TypeError
。
理论上,您应该能够通过将空字符串
""
指定为 sum(("a", "b"), start="")
的 start值来解决此问题,这样它就相当于
"" + "a" + "b"
。但出于效率原因,明确禁止将字符串指定为 start 值,而使用 ''.join
,因为 ''.join
会为所有要连接的字符串预先分配内存,而不是为每个连接操作创建一个新的字符串对象,这就是为什么调用 sum(("a", "b"), start="")
会产生:
TypeError: sum() can't sum strings [use ''.join(seq) instead]