Доступ к локальной функции-переменной
Этот код
def reportRealDiagnostics():
ranks = 0
class Rank:
def __init__(self):
global ranks
ranks += 1
rank = Rank()
reportRealDiagnostics()
производит
NameError: global name 'ranks' is not defined
Я уверен, что это все, что вам нужно, чтобы ответить на вопрос.
2 ответа
Решение
Когда вы используете 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
ключевое слово в Python 2.x
Вы должны использовать переменную как нелокальную:
nonlocal ranks