为什么sum的行为与加号(+)操作不同

2024-09-20 22:20:11 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么总和的行为不像加号运算符? 我如何在课堂上使用sum

class Item:
    def __init__(self, factor):
        self.factor = factor

    def __add__(self, other):
        return Item(self.factor + other.factor)


print((Item(2) + Item(4)).factor) # 6
print(sum([Item(2), Item(4)]).factor) # TypeError: unsupported operand type(s) for +: 'int' and 'Item'

itertools.reduce with operator.add也可以工作,但需要大量键入


Tags: selfaddreturninitdef运算符itemclass
2条回答

初始化sumstart参数为Item类型的对象,因为它的默认值是int类型的对象,如docs:sum(iterable, /, start=0)中所述,其中0int

print(sum([Item(2), Item(4)], start=Item(0)).factor)

这是因为sum返回一个“开始”值(默认值:0)加上一个可数

>>> help(sum)
Help on built-in function sum in module builtins:
    
sum(iterable, /, start=0)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers

这相当于0 + Item(2) + ...,因此TypeError!。可以将Item(0)作为默认值传递,而不是0

相关问题 更多 >

    热门问题