我正在尝试编写一个将for循环中的值求和的函数。
我尝试过:
def get_total_items(self):
return totalnum = totalnum + item['quantity'] for item in self.cart.values()
我遇到语法错误,但是我不确定为什么这对我来说是正确的。
答案 0 :(得分:3)
正确的方法是使用生成器表达式the sum
function。生成器表达式与您尝试的循环类似,但受括号限制(当它是唯一参数时,可以与调用括号相同,例如sum
):
def get_total_items(self):
return sum(item['quantity'] for item in self.cart.values())
请注意,totalnum
从未分配(您不能作为return
的一部分进行分配),但不一定要分配;直接返回sum
中的值,而根本不将其存储在命名变量中。
如果totalnum
是必须更新的某些现有全局变量,则需要将其分成三行,其中的一个要声明totalnum
全局变量(因此由于以下原因它不会成为局部变量)被分配),将其递增totalnum
,将其递增return
:
def get_total_items(self):
global totalnum
totalnum += sum(item['quantity'] for item in self.cart.values())
return totalnum
答案 1 :(得分:2)
根据[Python 3]: The return statement:
return_stmt :: =“返回” [expression_list]
totalnum = totalnum + item['quantity'] for item in self.cart.values()
不是表达式而是语句,因此 SynraxError 。
一种方法是使用[Python 3]: sum(iterable[, start]):
def get_total_items(self):
return sum(item["quantity"] for item in self.cart.values())
“旧样式”方法:
def get_total_items(self):
totalnum = 0
for item in self.cart.values():
totalnum += item["quantity"]
return totalnum
答案 2 :(得分:2)
使用现有的sum()
函数。
sum(item['quantity'] for item in self.cart.values())
或者,如果您需要一个起始值:
sum((item['quantity'] for item in self.cart.values()), 1000.0) #start summing with 1000.0
如果您绝对必须自己实施:
def get_total_items(self):
totalnum = 0
for item in self.cart.values():
totalnum += item['quantity']
return totalnum
答案 3 :(得分:-1)
您为什么不这样做:
def get_total_items(self):
for item in self.cart.values():
totalnum += item['quantity']
return totalnum