访问函数局部变量

时间:2013-11-09 15:01:37

标签: python function undefined local-variables

此代码

def reportRealDiagnostics():

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

reportRealDiagnostics()

产生

NameError: global name 'ranks' is not defined

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

2 个答案:

答案 0 :(得分: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()

还有其他一些选择:nonlocal keyword in Python 2.x

答案 1 :(得分:0)

您应该将变量用作非本地:

nonlocal ranks