为什么我没有得到更有用的“sum() 无法对字符串求和,请使用连接”消息,而是“+ 不支持的操作数类型”?

问题描述 投票:0回答:1

我现在正在学习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
与字符串一起使用,以及如何修复它,但为什么我会收到两条不同的消息?

python string sum tuples
1个回答
0
投票

根据

sum
的文档:

sum可迭代,/,开始=0)

从左到右对 startiterable 的项目求和并返回总数。 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]
© www.soinside.com 2019 - 2024. All rights reserved.