Ich habe den folgenden Code in einer Funktion:
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)
Das Hinzufügen von Elementen stored_blocks
funktioniert einwandfrei, aber ich kann num_converted
die zweite Unterfunktion nicht erhöhen :
UnboundLocalError: Lokale Variable 'num_converted', auf die vor der Zuweisung verwiesen wird
Ich könnte verwenden, global
aber globale Variablen sind hässlich und ich brauche diese Variable wirklich nicht, um überhaupt global zu sein.
Ich bin also gespannt, wie ich in eine Variable im Bereich der übergeordneten Funktion schreiben kann.
nonlocal num_converted
würde wahrscheinlich den Job machen, aber ich brauche eine Lösung, die mit Python 2.x funktioniert.
def
ist dies nicht das einzige Schlüsselwort, das einen Namespace definiert: Es gibt auchclass
.