У мене є такий код всередині функції:
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.
def
, не єдине ключове слово, яке визначає простір імен: існує такожclass
.