Как в Python 2 писать в переменную в родительской области?

У меня есть следующий код внутри функция:

stored_blocks = {}
def replace_blocks(m):
    block = m.group(0)
    block_hash = sha1(block)
    stored_blocks[block_hash] = block
    return '{{{%s}}}' % block_hash

num_converted = 0
def convert_variables(m):
    name = m.group(1)
    num_converted += 1
    return '<%%= %s %%>' % name

fixed = MATCH_DECLARE_NEW.sub('', template)
fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed)
fixed = MATCH_FORMAT.sub(convert_variables, fixed)

Добавление элементов в stored_blocks работает нормально, но я не могу увеличить num_converted во второй подфункции:

UnboundLocalError: локальная переменная num_converted, на которую ссылается перед присваиванием

Я мог бы использовать global , но глобальные переменные уродливы, и мне действительно не нужно, чтобы эта переменная была глобальной.

Так что мне любопытно, как я могу писать в переменную в родительской функции сфера. nonlocal num_converted , вероятно, сработает, но мне нужно решение, работающее с Python 2.x.

77
задан Maxpm 13 April 2019 в 05:03
поделиться