Lorsque je lisais le code du moteur de modèle Jinja
pour Python, une fonction inconnue appelée locals ()
a été utilisée, alors je l'ai vérifiée, alors prenez-en note.
Extrait de Reference
Met à jour et renvoie le dictionnaire représentant la table de symboles locale courante. Les variables libres sont renvoyées lorsque vous appelez locals () dans un bloc fonction, mais pas dans un bloc de classe. Notez qu'au niveau du module, locals () et globals () sont le même dictionnaire.
Je l'ai interprété comme renvoyant les variables locales définies lors de l'exécution de locals ()
.
Commençons l'interpréteur et vérifions le comportement de locals ()
.
>>> 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'>
Étant donné que «a», qui est hors de portée, n'a pas été acquis et que les variables définies dans la méthode de «l'échantillon» l'ont été, l'interprétation de la lecture de la référence semble incohérente.
locals ()
dans jinja
jinja
fournit une méthode ʻoverlay` qui remplace les informations de configuration de l'instance.
Quand je lisais la méthode de ʻoverlay,
locals ()` était utilisé comme suit.
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,
# ...réduction...
bytecode_cache=missing,
):
# ...réduction...
args = dict(locals())
# ...réduction...
for key, value in iteritems(args):
if value is not missing:
setattr(rv, key, value)
Il existe de nombreux arguments pour ʻoverlay, mais il est implémenté dans un processus intelligent de sorte qu'il soit groupé en ʻargs
en utilisant` locals () ʻet seules les valeurs spécifiées par l'appelant sont mises à jour.
D'après ce qui précède, je pense que locals ()
convient au processus ou traitement suivant tel que jinja
qui ne récupère que la valeur spécifiée de l'appelant en combinant un grand nombre d'arguments en un dict
. J'ai fait.
Voici mon propre résumé.
--locals ()
peut obtenir les variables locales définies au moment de locals () ʻexecution with
dict --Peut être utilisé lorsque vous souhaitez traiter un grand nombre d'arguments dans un
dict`
C'est tout. Si vous faites une erreur dans le contenu écrit ou l'interprétation, ou si vous avez d'autres utilisations ou savoir-faire, veuillez commenter. : priez:
Recommended Posts