


Wie wirken sich Abschlüsse auf den lokalen Variablenzugriff in verschachtelten Python-Funktionen aus?
Lokale Variablen in verschachtelten Funktionen: Eine Geschichte von Schließung und Suche
In Python können lokale Variablen, die in verschachtelten Funktionen definiert sind, mit der Umgebung interagieren Umfang. Um diese Interaktion zu verstehen, schauen wir uns einen Codeausschnitt an, der das Verhalten hervorhebt.
from functools import partial class Cage(object): def __init__(self, animal): self.animal = animal def gotimes(do_the_petting): do_the_petting() def get_petters(): for animal in ['cow', 'dog', 'cat']: cage = Cage(animal) def pet_function(): print "Mary pets the " + cage.animal + "." yield (animal, partial(gotimes, pet_function)) funs = list(get_petters()) for name, f in funs: print name + ":", f()
Mehrdeutige Zuweisung
Das Ausführen dieses Codes führt zu einem unerwarteten Ergebnis: „Mary streichelt.“ Für alle drei Tiere („Kuh“, „Hund“ und „Katze“) wird „die Katze“ gedruckt. Dies liegt daran, dass der lokale Variablenkäfig innerhalb der verschachtelten Funktion pet_function als Abschlusszelle erfasst wird.
Abschlusszelle
Wenn die verschachtelte Funktion erstellt wird, verweist sie auf die lokale Variablen im übergeordneten Bereich. In diesem Fall ist Cage die einzige freie Variable in pet_function und an eine Abschlusszelle gebunden. Diese Zelle ermöglicht der Funktion den Zugriff auf die Variable des äußeren Bereichs, auch nachdem die übergeordnete Funktion zurückkehrt.
Bereichsauflösung
Das Problem tritt jedoch auf, wenn die verschachtelte Funktion ausgeführt wird. Der Wert des Käfigs wird zum Zeitpunkt der Ausführung im umgebenden Bereich nachgeschlagen, nicht in der Definition. In unserem Fall wurde der Käfigvariablen im umgebenden Bereich zum Zeitpunkt des Aufrufs der Funktionen bereits „cat“ als endgültiger Wert zugewiesen.
Problemumgehungen
Um diese Mehrdeutigkeit aufzulösen, müssen wir den Abschluss aufheben und verhindern, dass die verschachtelte Funktion direkt auf den umgebenden Bereich zugreift. Hier sind einige Problemumgehungen:
- Teilfunktion:Erstellen Sie eine Teilfunktion und binden Sie das gewünschte Argument als Schlüsselwortparameter.
- Neuer Funktionsumfang : Erstellen Sie eine neue verschachtelte Funktion, die das gewünschte Argument in ihrem eigenen Bereich erfasst.
- Bindungsstandard Wert: Binden Sie die Variable als Standardparameterwert an die verschachtelte Funktion.
Durch die Verwendung dieser Problemumgehungen können wir sicherstellen, dass die verschachtelte Funktion Zugriff auf die richtigen lokalen Variablen hat und Unklarheiten vermeiden unser Code.
Das obige ist der detaillierte Inhalt vonWie wirken sich Abschlüsse auf den lokalen Variablenzugriff in verschachtelten Python-Funktionen aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Fastapi ...

Verwenden Sie Python im Linux -Terminal ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Verständnis der Anti-Crawling-Strategie von Investing.com Viele Menschen versuchen oft, Nachrichten von Investing.com (https://cn.investing.com/news/latest-news) zu kriechen ...
