Verwendung von Python-Einheimischen ()

Als ich den Code der Template-Engine "Jinja" für Python las, wurde eine unbekannte Funktion namens "local ()" verwendet, also habe ich sie überprüft und notiert.

Was ist "Einheimische ()"?

Auszug aus Referenz

Aktualisiert und gibt das Wörterbuch zurück, das die aktuelle lokale Symboltabelle darstellt. Freie Variablen werden zurückgegeben, wenn Sie local () in einem Funktionsblock aufrufen, jedoch nicht in einem Klassenblock. Beachten Sie, dass auf Modulebene local () und globals () dasselbe Wörterbuch sind.

Ich habe es so interpretiert, dass es die lokalen Variablen zurückgibt, die definiert wurden, als local () ausgeführt wurde.

Lassen Sie uns den Interpreter starten und das Verhalten von local () überprüfen.

>>> a = 1
>>> def sample(b="2", c=True):
...     d = 4
...     l = locals()
...     print(l)
...     print(type(l))
... 
>>> sample()
{'b': '2', 'c': True, 'd': 4}
<class 'dict'>

Da das außerhalb des Geltungsbereichs liegende "a" nicht erfasst wurde und die in der "Stichproben" -Methode definierte Variable erfasst wurde, scheint die Interpretation, die die Referenz liest, inkonsistent zu sein.

Wo man local () in jinja benutzt

Als ich die Methode der Überlagerung las, wurde "local ()" wie folgt verwendet.

jinja/src/jinja2/environment.py


# https://github.com/pallets/jinja/blob/737a4cd41d09878e7e6c584a2062f5853dc30150/src/jinja2/environment.py#L385-L428
    def overlay(
        self,
        block_start_string=missing,
        # ...Kürzung...
        bytecode_cache=missing,
    ):
        # ...Kürzung...
        args = dict(locals())
        # ...Kürzung...
        for key, value in iteritems(args):
            if value is not missing:
                setattr(rv, key, value)

Es gibt viele Argumente für "Overlay", aber es wird in einem intelligenten Prozess implementiert, so dass es mit "local ()" zu "args" kombiniert wird und nur die vom Aufrufer angegebenen Werte aktualisiert werden.

Aus dem oben Gesagten denke ich, dass local () für den nächsten Prozess oder die nächste Verarbeitung wie jinja geeignet ist, bei der nur der vom Aufrufer angegebene Wert abgerufen wird, indem eine große Anzahl von Argumenten zu einem dict kombiniert wird. Ich tat.

Zusammenfassung

Unten ist meine eigene Zusammenfassung.

--locals () kann die lokalen Variablen abrufen, die durch die Zeit von local () Ausführung mit dict definiert sind

Das ist es. Wenn Sie einen Fehler im schriftlichen Inhalt oder in der Interpretation machen oder wenn Sie andere Verwendungszwecke oder Fledermaus-Know-how haben, kommentieren Sie dies bitte. : bete:

Recommended Posts

Verwendung von Python-Einheimischen ()
[Python] Richtige Verwendung der Karte
Beispiel für die Verwendung von Python Pickle
Grundlegende Verwendung von Python-F-String
[Python] Richtige Verwendung von Join
[Python] Richtige Verwendung der if-Anweisung
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Einführung von Python
Nicht logische Operatorverwendung von oder in Python
[Python] Operation der Aufzählung
Liste der Python-Module
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
Zusammenfassung der Verwendung von pyenv
Grundlegende Verwendung von Flask-Classy
Grundlegende Verwendung von Jinja2
der Zen von Python
Verwendungshinweise für Python Decorator
Grundlegende Verwendung von SQL Alchemy
Installieren von Python 3.3 rc1
# 4 [Python] Grundlagen der Funktionen
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Zusammenfassung der Python-Argumente
Grundlagen von Python: Ausgabe
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
[Python] Klassentyp und Verwendung des datetime-Moduls
Verschiedene Verarbeitung von Python
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Super grundlegende Verwendung von Pytest
Auf dem Weg zum Ruhestand von Python2
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Python - Schneller Start der Protokollierung
Empfehlung der binpacking Bibliothek von Python
Grundlegende Verwendung der PySimple-Benutzeroberfläche
[Python] Wert des Funktionsobjekts (?)
Hinweise zur Verwendung des Python-Standards unittest
python * args, ** kwargs Verwendungshinweise
Automatisches Update des Python-Moduls
Python --Überprüfen Sie den Wertetyp
[Python] Der Ursprung des Namens der Python-Funktion
Statische Analyse von Python-Programmen
Über verschiedene Codierungen von Python 3
Objektäquivalenzbeurteilung in Python
Bequeme Nutzungsübersicht von Flask
Einführung in Aktivitäten mit Python
Python> Umgang mit 2D-Arrays
Installieren Sie mehrere Versionen von Python
Upgrade von Python Anaconda
Umgang mit Python auf Mac
Python: Grundlagen der Verwendung von Scikit-Learn ①