Was macht die Python- nonlocal
Anweisung (in Python 3.0 und höher)?
Es gibt keine Dokumentation auf der offiziellen Python-Website und help("nonlocal")
funktioniert auch nicht.
Was macht die Python- nonlocal
Anweisung (in Python 3.0 und höher)?
Es gibt keine Dokumentation auf der offiziellen Python-Website und help("nonlocal")
funktioniert auch nicht.
"There is no documentation for nonlocal".
Eigentlich können Siehelp(keyword_in_string)
für Dokumentationen in Python 3 und höherAntworten:
Vergleichen Sie dies, ohne zu verwenden
nonlocal
:Dazu verwenden
nonlocal
, woinner()
'sx
ist jetzt auchouter()
' sx
:quelle
Kurz gesagt, Sie können einer Variablen in einem äußeren (aber nicht globalen) Bereich Werte zuweisen. Siehe PEP 3104 für alle wichtigen Details.
quelle
Eine Google-Suche nach "python nonlocal" ergab den Vorschlag PEP 3104 , der die Syntax und die Argumentation hinter der Aussage vollständig beschreibt. Kurz gesagt, es funktioniert genauso wie die
global
Anweisung, außer dass es verwendet wird, um auf Variablen zu verweisen, die für die Funktion weder global noch lokal sind.Hier ist ein kurzes Beispiel dafür, was Sie damit machen können. Der Zählergenerator kann so umgeschrieben werden, dass er eher den Redewendungen von Sprachen mit Verschlüssen ähnelt.
Natürlich könnten Sie dies als Generator schreiben, wie:
Obwohl dies eine vollkommen idiomatische Python ist, scheint die erste Version für Anfänger etwas offensichtlicher zu sein. Die ordnungsgemäße Verwendung von Generatoren durch Aufrufen der zurückgegebenen Funktion ist ein häufiger Verwirrungspunkt. Die erste Version gibt explizit eine Funktion zurück.
quelle
nonlocal
Anweisung in Python veranschaulichen . Wenn Sie eine Folge von natürlichen Zahlen wollen, ist die Python-Sprache tatsächlichitertools.count()
@ooboo:
Es nimmt diejenige, die dem Bezugspunkt im Quellcode "am nächsten" liegt. Dies wird als "Lexical Scoping" bezeichnet und ist seit> 40 Jahren Standard.
Pythons Klassenmitglieder befinden sich wirklich in einem Wörterbuch namens
__dict__
und werden niemals durch lexikalisches Scoping erreicht.Wenn Sie nicht angeben ,
nonlocal
aber tunx = 7
, wird es eine neue lokale Variable „x“ erstellen. Wenn Sie angebennonlocal
, wird das "nächste" "x" gefunden und diesem zugewiesen. Wenn Sie angebennonlocal
und kein "x" vorhanden ist, wird eine Fehlermeldung angezeigt.Das Schlüsselwort kam
global
mir immer seltsam vor, da es alle anderen "x" mit Ausnahme des äußersten gerne ignoriert. Seltsam.quelle
Quelle: Python-Sprachreferenz
quelle
help()
Schlüsselwörter verwenden könnten (und jetzt ist mein Verstand überwältigt:help()
Ohne Argumente wird interaktiv ).Zitat aus der Python 3-Referenz :
Wie in der Referenz erwähnt, wird bei mehreren verschachtelten Funktionen nur die Variable in der nächsten umschließenden Funktion geändert:
Die "nächste" Variable kann mehrere Ebenen entfernt sein:
Es kann aber keine globale Variable sein:
quelle
quelle
Mein persönliches Verständnis der "nichtlokalen" Anweisung (und entschuldigen Sie, da ich neu in Python und Programmierung im Allgemeinen bin) ist, dass "nichtlokal" eine Möglichkeit ist, die globale Funktionalität in iterierten Funktionen und nicht im Hauptteil des Codes selbst zu verwenden . Eine globale Anweisung zwischen Funktionen, wenn Sie so wollen.
quelle
mit ‚nicht - lokalen‘ inneren Funktionen (dh, verschachtelte innere Funktionen) lesen & 'erhalten kann Schreib Erlaubnis für diese bestimmte Variable der äußeren Mutterfunktion . Und nicht lokal kann nur innerhalb innerer Funktionen verwendet werden, z.
quelle