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