Utilisation des locaux Python ()

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.

Qu'est-ce que «locaux ()»?

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.

Où utiliser 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.

Résumé

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 undict`

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

Utilisation des locaux Python ()
[Python] Utilisation correcte de la carte
Exemple d'utilisation de pickle Python
Utilisation basique de la f-string Python
[Python] Utilisation correcte de la jointure
[python] Utilisation correcte de l'instruction if
Les bases de Python ①
Bases de python ①
Copie de python
Introduction de Python
Utilisation d'opérateurs non logiques de ou en python
[Python] Opération d'énumération
Liste des modules python
Unification de l'environnement Python
Copie des préférences python
Principes de base du grattage Python
Résumé de l'utilisation de pyenv
Utilisation basique de flask-classy
Utilisation de base de Jinja2
le zen de Python
notes d'utilisation du décorateur python
Utilisation de base de SQL Alchemy
Installation de Python 3.3 rc1
# 4 [python] Bases des fonctions
Connaissance de base de Python
Anecdotes sobres de python3
Résumé des arguments Python
Bases de python: sortie
Installation de matplotlib (Python 3.3.2)
Application de Python 3 vars
[Python] Type de classe et utilisation du module datetime
Divers traitements de Python
[Introduction à Python] Utilisation de base des expressions lambda
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
[Introduction à Python] Utilisation basique de la bibliothèque matplotlib
Utilisation super basique de pytest
Vers la retraite de Python2
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
Python - Démarrage rapide de la journalisation
Recommandation de la bibliothèque binpacking de python
Utilisation de base de l'interface graphique PySimple
[python] Valeur de l'objet fonction (?)
Remarques sur l'utilisation du test unittest standard Python
python * args, ** kwargs Notes d'utilisation
Mise à jour automatique du module Python
Python - Vérifiez le type de valeurs
[Python] L'origine du nom de la fonction python
Analyse statique des programmes Python
À propos de divers encodages de Python 3
Jugement d'équivalence d'objet en Python
Résumé d'utilisation pratique de Flask
Introduction d'activités appliquant Python
python> Gestion des tableaux 2D
Installer plusieurs versions de Python
Mise à niveau de python Anaconda
Manipulation de python sur mac
python: principes de base de l'utilisation de scikit-learn ①