如何理解python中的以下空if语句?

如何理解python中的以下空if语句?,python,Python,我从一本书中阅读了下面的Python代码,应该很容易理解。我只是想知道,下面的空if语句的目的是什么: if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0 labelCounts[currentLabel] += 1 完整代码为: from math import log def calcShannonEnt(dataSet): numEntries = len(dataSet) la

我从一本书中阅读了下面的Python代码,应该很容易理解。我只是想知道,下面的空if语句的目的是什么:

if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
完整代码为:

from math import log
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
        labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob * log(prob,2)
    return shannonEnt
这是一个错误。它可能有严重的凹痕,应该是:

if currentLabel not in labelCounts.keys():
    labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
在Python中,如果,则不能有“empty”
。不过,你可以这样做:

if something:
    pass

实际上什么也不做。

看起来您需要缩进,您的代码应该生成密钥如果它不存在,那么它会在该密钥上增加一个计数器,+=不应该缩进以说明已经存在的密钥和新创建的密钥:

if currentLabel not in labelCounts.keys():
  labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
另一种说法是:

if currentLabel not in labelCounts.keys():
  labelCounts[currentLabel] = 1
else:
  labelCounts[currentLabel] += 1

第二行很可能是缩进的,如下所示:

if currentLabel not in labelCounts.keys():
    labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1

如果dict
labelCounts
不包含值为
currentLabel

的键(如果该键在书中的显示方式正好如此),则可以这样做以避免抛出错误,这是一个语法错误,你应该读另一本书。python中没有空的
,如果
,这是一个语法错误。你确定缩进是正确的吗?似乎应该缩进
labelCounts[currentLabel]=0
。如果书中的内容与此完全相同,我敢打赌这是一个打字错误。如果你给这本书命名,我们可以查找出版商的勘误表,从而得到更好的答案。而且,作为额外的奖励,我们可以避免向其他任何人推荐它。:)@查理·达菲——我想更进一步:如果没有这本书的名字,这个问题及其答案绝对没有任何价值。实际上,它基本上是“这里应该有一个明显的错误吗?”,“不,应该纠正。”
if currentLabel not in labelCounts.keys():
    labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1