1

这段代码

def reportRealDiagnostics():

        ranks = 0
        class Rank: 
            def __init__(self):
                global ranks
                ranks += 1
        rank = Rank()

reportRealDiagnostics()

生产

NameError: global name 'ranks' is not defined

我确信这就是您回答问题所需要的全部内容。

4

2 回答 2

3

当您使用global ranks它时,它会ranks在全局范围内而不是在封闭范围内查找,因此您会收到该错误。ranks您定义的 是封闭范围的一部分。

在 Python3 中,这已解决,您可以ranks使用nonlocal关键字进行修改:

def reportRealDiagnostics():
        ranks = 0
        class Rank: 
            def __init__(self):
                nonlocal ranks
                ranks += 1
        rank = Rank()

reportRealDiagnostics()

在 Python2 中,您可以将其定义为函数属性:

def reportRealDiagnostics():
        class Rank: 
            def __init__(self):
                reportRealDiagnostics.ranks += 1
        rank = Rank()
reportRealDiagnostics.ranks = 0
reportRealDiagnostics()

还有一些其他选择:nonlocalPython 2.x 中的关键字

于 2013-11-09T15:08:01.667 回答
0

You should use variable as nonlocal:

nonlocal ranks
于 2013-11-09T15:05:42.767 回答