У меня есть следующий код внутри функции:
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.