Tengo el siguiente código dentro de una función:cierre Python: Escribir a variable en ámbito padre
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)
elementos Agregando a stored_blocks
funciona bien, pero no puede aumentar num_converted
en la segunda función parcial:
UnboundLocalError: local variable 'num_converted' referenced before assignment
Podría usar global
pero las variables globales son feas y realmente no necesito que esa variable sea global en absoluto.
Tengo curiosidad por saber cómo puedo escribir en una variable en el ámbito de la función principal. nonlocal num_converted
probablemente haga el trabajo, pero necesito una solución que funcione con Python 2.x.
Contrariamente a la creencia algo popular (a juzgar por este tipo de preguntas) 'def' no es la única palabra clave que define un espacio de nombres: también hay' clase'. –