为什么对Shirt类实例的price属性用sum()报错,用+运算符却正常?
问题原因说明
两种写法的语法逻辑存在本质差异:
+运算符的执行逻辑
你直接用shirt_one.price + shirt_two.price时,是对两个整数类型的属性值执行原生整数加法运算,完全符合Python的运算符规则,因此可以正常得到结果。sum()函数的参数规则
Python内置sum()函数的标准语法是:
sum(iterable, start=0)
- 第一个参数
iterable要求必须是可迭代对象(列表、元组、集合等可遍历的结构),函数会遍历这个结构里的所有元素累加 - 第二个可选参数
start是求和的起始值,默认是0
你之前写的sum(shirt_one.price, shirt_two.price)等于给第一个参数传入了整数25(非可迭代对象),第二个参数传入了起始值10,sum()尝试遍历第一个参数时发现是不可遍历的整数类型,因此直接抛出TypeError: 'int' object is not iterable报错。
正确的sum()写法
如果要用sum()计算总价格,只需要把多个价格放到可迭代对象中作为第一个参数即可:
total = sum([shirt_one.price, shirt_two.price]) print(total)
运行后可以得到和+运算符一致的结果35。
内容的提问来源于stack exchange,提问作者Nakshatra Garg
相关产品推荐
相关产品推荐

