In Python 2, wie kann ich schreiben auf Variablen im übergeordneten Bereich?

Ich habe den folgenden code innerhalb 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)

Hinzufügen von Elementen zu stored_blocks funktioniert gut, aber ich kann nicht zu einer Erhöhung num_converted in der zweiten Teilfunktion:

UnboundLocalError: lokale variable 'num_converted' referenced before assignment

Könnte ich global aber Globale Variablen sind hässlich und ich weiß wirklich nicht brauchen, dass variable global an alle.

So, ich bin gespannt, wie ich schreiben kann, um eine variable in der übergeordneten Funktion scope.
nonlocal num_converted würde wahrscheinlich den job zu erledigen, aber ich brauche eine Lösung, die funktioniert mit Python 2.x.

  • Im Gegensatz zu etwas landläufigen Meinung (Beurteilung durch diese Art der Fragen) def ist nicht das einzige Schlüsselwort, definiert eine namespace: es gibt auch class.
InformationsquelleAutor ThiefMaster | 2011-01-31
Schreibe einen Kommentar