J'ai le code suivant à l'intérieur d'une fonction:
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)
Ajouter des éléments à l' stored_blocks
fonctionne bien, mais je ne peut pas augmenter num_converted
dans le deuxième sous-fonction:
UnboundLocalError: la variable locale 'num_converted' référencé avant affectation
Je pourrais utiliser global
, mais les variables globales sont moches et je n'ai vraiment pas besoin de cette variable globale.
Donc, je suis curieux de voir comment je peux écrire une variable dans la fonction parent portée.
nonlocal num_converted
serait probablement faire le travail, mais j'ai besoin d'une solution qui fonctionne avec Python 2.x.