I have the following code inside a function:
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)
Adding elements to stored_blocks
works fine, but I cannot increase num_converted
in the second subfunction:
UnboundLocalError: local variable 'num_converted' referenced before assignment
I could use global
but global variables are ugly and I really don't need that variable to be global at all.
So I'm curious how I can write to a variable in the parent function's scope.
nonlocal num_converted
would probably do the job, but I need a solution that works with Python 2.x.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…