sum() Python 中的函数

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

我对以下语法感到困惑:

def getClassiness(self):
        classiness_points = {
            "tophat": 2,
            "bowtie": 4,
            "monocle": 5
        }

        classiness = sum(classiness_points.get(item, 0) for item in self.items)
        return classiness

我理解以下一个,但两个都是正确的。

def getClassiness(self):
        classiness_points = {
            "tophat": 2,
            "bowtie": 4,
            "monocle": 5
        }
        classiness = 0
        for item in self.items:
            classiness += classiness_points.get(item, 0)
        return classiness

我想我不明白的是生成器表达式是如何工作的。我知道 sum() 将一个可迭代对象作为其参数并返回元素的总和。我会想到:

 classiness = sum(classiness_points.get(item, 0) for item in self.items)
        return classiness

这样更好,

 classiness = sum( for item in self.items: classiness_points.get(item, 0))
        return classiness

因为我习惯把表达式放在for循环之后 它必须只是语法。

python dictionary for-loop sum iteration
1个回答
0
投票

假设这个输入:

classiness_points = {'tophat': 2, 'bowtie': 4, 'monocle': 5}
items = ['tophat', 'monocle', 'shirt']

生成器所做的几乎与列表理解相同:

[classiness_points.get(item, 0) for item in items]
# [2, 5, 0]

除了它只在请求时生成项目,

sum
通过迭代生成器的项目来完成。

sum(classiness_points.get(item, 0) for item in items)
# 7

所以,这或多或少等同于:

sum([classiness_points.get(item, 0) for item in items])

除了一种情况,python 会预先生成一个列表以传递给

sum
。在另一个
sum
中,它自己迭代生成器的元素。

© www.soinside.com 2019 - 2024. All rights reserved.