


Wie gehen verschachtelte Funktionen mit lokalen Variablen und Abschlüssen in Python um?
Lokale Variablen in verschachtelten Funktionen
Dieses komplizierte Beispiel betrifft verschachtelte Funktionen und Abschlüsse, die zu verwirrendem Verhalten führen können. Lassen Sie uns das Rätsel lösen.
Ausführung verschachtelter Funktionen
Verschachtelte Funktionen greifen bei ihrer Ausführung auf Variablen aus dem übergeordneten Bereich zu. In diesem Fall ist die pet_function eine verschachtelte Funktion innerhalb des get_petters-Generators. Bei der Ausführung wird nach Variablen im Bereich von get_petters gesucht.
Abschlusszellen und lokale Variablen
Die pet_function verfügt über eine freie Variable (Käfig). Bei der Kompilierung wird diese freie Variable durch eine Abschlusszelle dargestellt. Wenn pet_function ausgeführt wird, überprüft diese Abschlusszelle den Wert von Cage im umgebenden Bereich von get_petters.
Dynamische Suchvorgänge und Abschlüsse
Das problematische Verhalten tritt auf, wenn die Funs-Liste angezeigt wird entsteht. Zu diesem Zeitpunkt hat der Käfig in get_petters den Wert „cat“. Wenn jede Funktion in funs aufgerufen wird, sucht die Abschlusszelle in pet_function nach dem Wert von Cage zum Zeitpunkt dieses Funktionsaufrufs, nicht zum Zeitpunkt seiner Definition.
Zugriff auf verschiedene Tiere
Um dieses Problem zu beheben, muss pet_function für jedes Tier auf eine bestimmte Instanz des Käfigobjekts zugreifen. Dies kann durch Teilfunktionen, neue Funktionsumfänge oder Schlüsselwortparameter erreicht werden.
Teilfunktion
Eine Teilfunktion erstellt eine neue Funktion mit festen Parametern. Hier ist ein Beispiel mit functools.partial():
def pet_function(cage=None): print("Mary pets the " + cage.animal + ".") yield (animal, partial(gotimes, partial(pet_function, cage=cage)))
Neuer Funktionsumfang
Das Erstellen eines neuen Funktionsumfangs stellt sicher, dass die Käfigvariable innerhalb des neu definierten gebunden ist Funktion.
def scoped_cage(cage=None): def pet_function(): print("Mary pets the " + cage.animal + ".") return pet_function yield (animal, partial(gotimes, scoped_cage(cage)))
Schlüsselwortparameter
Bindung die Käfigvariable als Standardwert für einen Schlüsselwortparameter:
def pet_function(cage=cage): print("Mary pets the " + cage.animal + ".") yield (animal, partial(gotimes, pet_function))
Das obige ist der detaillierte Inhalt vonWie gehen verschachtelte Funktionen mit lokalen Variablen und Abschlüssen in Python um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Python ist eine interpretierte Sprache, enthält aber auch den Zusammenstellungsprozess. 1) Python -Code wird zuerst in Bytecode zusammengestellt. 2) Bytecode wird von Python Virtual Machine interpretiert und ausgeführt. 3) Dieser Hybridmechanismus macht Python sowohl flexibel als auch effizient, aber nicht so schnell wie eine vollständig kompilierte Sprache.

UseaforloopwheniteratoverasequenceOrforaPecificNumberoftimes; UseaWhileloopWencontiningUntilAconDitionisMet.ForloopsardealForknown -Sequencies, während whileloopSuituationen mithungeterminediterationen.

PythonloopscanleadtoErors-ähnliche Finanzeloops, ModificingListsDuringiteration, Off-by-Oneerrors, Zero-Indexingissues und Nestroxinefficiens.toavoidthese: 1) Verwenden Sie

ForloopSareadVantageousForknowniterations und Sequences, OfferingImplicity und Readability;

PythonusesahybridmodelofCompilation und Interpretation: 1) thepythonInterPreterCompilessourceCodeIntoplatform-unintenpendentBytecode.2) Thepythonvirtualmachine (PVM) ThenexexexexecthisByTeCode, BalancingeAnsewusewithperformance.

Pythonisbothinterpreted und kompiliert.1) ItscompiledToByteCodeForPortabilityAcrossplatform.2) thytecodeTheninterpreted, und das ErlaubnisfordyNamictyPingandRapidDevelopment zulässt, obwohl es sich

ForloopsaridealWenyouKnowtHenumberofofiterationssinadvance, während whileloopsarebetterForsituationswhereyouneedtoloopuntilaconditionismet.forloopsaremoreffictionAndable, geeigneter Verfaserungsverlust, whereaswiloopsofofermorcontrolanduseusefulfulf

Forloopsareusedwhenthenumberofiterationsisknowninadvance,whilewhileloopsareusedwhentheiterationsdependonacondition.1)Forloopsareidealforiteratingoversequenceslikelistsorarrays.2)Whileloopsaresuitableforscenarioswheretheloopcontinuesuntilaspecificcond


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Dreamweaver CS6
Visuelle Webentwicklungstools

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor
