在Python中赋值之前可能会引用局部变量

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

我正在浏览一些实现决策树学习器的代码。这是代码:

def calculate_entropy(self, tags):

    tags_counter = Counter()

    if len(tags) > 0:
        for tag in tags:
            tags_counter[tag] += 1
            classes_probs = [float(tags_counter[tag]) / len(tags) for tag in tags_counter]

        entropy = 0
        for prob in classes_probs:
            if prob == 0:
                return 0
            entropy -= prob * math.log(prob, 2)

        return entropy

    else:
        return 0

我的问题是:

  1. 对于classes_probs我得到一个局部变量可能会在赋值消息之前被引用,我无法理解为什么。
  2. 放置到类probs的右侧代码有什么作用?我还没有看到类似的东西。
python
1个回答
0
投票

(1)警告是因为classes_probs可能在那时未定义。如果tags为空,则第一个循环不会执行。您可以通过在第一个循环之前指定一个空列表来“修复”此问题。

(2)这被称为list comprehension。使用该搜索术语并根据您喜欢的写作水平和示例查找教程。

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