[Python] Qu'est-ce que @? (À propos des décorateurs)

Je travaille sur un tutoriel sur la pyramide, mais il y a beaucoup de choses que je ne sais pas.

Pour le moment, une source avec un @ est sortie. Quand j'utilise Java, je pense que c'est une annotation. Ce n'est pas le cas, et quand j'ai recherché, c'était un décorateur.

Les décorateurs sont utilisés pour envelopper les objets. [Modèle de conception](http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3% 82% BF% E3% 83% BC% E3% 83% B3_% 28% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2% 29) C'est vrai.

Il semble donc que le décorateur soit fourni en tant que fonction en Python. J'ai écrit une source simple en utilisant un décorateur.


#Décorateur (avant la fonction pour décorer"before",derrière"after"Pour sortir)
def deco_test(func):
    def wrapper(arg):
        print("before")
        func(arg)
        print("after")
    return wrapper


#Fonctions utilisant des décorateurs@Appelez le décorateur en utilisant.
@deco_test
def hello(arg):
    print("Hello, " + arg)

hello("world!")

Le résultat de l'exécution est le suivant. before Hello, world! after

À propos, la fonction bonjour utilisant le décorateur peut être remplacée par la fonction ci-dessous.

def hello(arg):
    print("Hello, " + arg)
hello = deco_test(hello)

Je n'étais pas sûr au début, mais après avoir essayé diverses choses, Python a fortement appris que les fonctions sont aussi des objets. La fonction est un argument. Donc, si vous ajoutez () à la variable qui stocke la fonction et l'exécutez.

Il semble que vous puissiez écrire des programmes de manière très flexible, Il est typé dynamiquement, et si vous ne le nommez pas correctement, Il semble qu'un code très difficile à comprendre sera complété.

À propos, le code qui est sorti dans le didacticiel sur la pyramide est le suivant

@view_config(route_name='home', renderer='templates/mytemplate.pt')
def my_view(request):
    try:
        one = DBSession.query(MyModel).filter(MyModel.name == 'one').first()
    except DBAPIError:
        return Response(conn_err_msg, content_type='text/plain', status_int=500)
    return {'one': one, 'project': 'tutorial'}

J'étais un peu inquiet car cette view_config était le nom de la classe, La partie @ est une création d'instance et un argument est passé à init. La fonction de décoration my_view est encapsulée dans l'appel d'instance call.

Je pense que c'est ce que cela signifie, mais la vérification revient.

Recommended Posts

[Python] Qu'est-ce que @? (À propos des décorateurs)
[python] Quelle est la clé triée?
Qu'est-ce que python
À quoi sert le trait de soulignement Python (_)?
Qu'est-ce que Python
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
[Python] Qu'est-ce que Pipeline ...
[Python] Qu'est-ce que virtualenv
Un programmeur Java a étudié Python. (À propos des décorateurs)
Qu'est-ce que wheezy dans l'image Docker Python?
À propos de la différence entre "==" et "is" en python
Quelle est la fonction d'activation?
À propos du module Python venv
À propos de la fonction enumerate (python)
[Python] Python et sécurité-① Qu'est-ce que Python?
[Python] * args ** Qu'est-ce que kwrgs?
A quoi sert l'interface ...
À propos des fonctionnalités de Python
Qu'est-ce que la fonction de rappel?
Cours de base Python (1 Qu'est-ce que Python)
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Remarque Python: à propos de la comparaison en utilisant is
Ce qui était surprenant dans les classes Python
Python pour la déclaration ~ Qu'est-ce qui est itérable ~
Qu'est-ce que le système X Window?
Quelle est la version TLS par défaut du module de requêtes python?
Python> Qu'est-ce qu'une tranche étendue?
À propos de la liste de base des bases de Python
[Introduction à Python] Qu'est-ce que Python, le langage de programmation le plus puissant actuellement?
Que faire lorsque le type de valeur est ambigu en Python?
[Python] Qu'est-ce que la série pandas et DataFrame?
Qu'est-ce que NaN? NaN Zoya (Python) (394 jours de retard)
[Python Kivy] À propos de la modification du thème de conception
Quel type de langage de programmation est Python?
Qu'est-ce que clivoa, un framework pour le traitement ETL?
[Unix] Qu'est-ce que le processus zombie / processus orphelin?
Quelle est la cause de l'erreur suivante?
Où est écrit le processus d'instanciation python?
Apprenez le modèle de conception "Décorateur" avec Python
[Python] Résumez les éléments rudimentaires du multithreading
Qu'est-ce qu'un chien? Volume d'installation Python
[python] [meta] Le type de python est-il un type?
Qu'en est-il de 2017 autour du langage Crystal? (Illusion)
[Apprentissage automatique] Qu'est-ce que la norme LP?
À propos du 02 février 2020 * Ceci est un article Python.
Qu'est-ce que l'espace de noms
À propos des tranches Python
À propos de la notation d'inclusion de python
Remarque: décorateur Python
Qu'est-ce que copy.copy ()
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
Quel est le fichier XX à la racine d'un projet Python populaire?
À propos du test
[Introduction à Python] Quelle est la différence entre une liste et un taple?
Qu'est-ce que dotenv?
À propos de Python tqdm.