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.
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.
local ()
in jinja
benutztAls 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.
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