Maison >développement back-end >Tutoriel Python >Une explication approfondie des décorateurs python
Cet article concerne principalement l'apprentissage des informations pertinentes sur les décorateurs Python d'une manière simple et facile à comprendre. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à
J'ai déjà entendu parler des décorateurs. mais juste j'en connais un peu, et je ne sais pas comment l'appeler. Je veux juste optimiser le projet en cours, alors j'ai pensé à utiliser des décorateurs, alors j'ai étudié les décorateurs en profondeur
. Jetons d'abord un coup d'œil au code :
import time # 将函数作为参数传入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': foo(" Hello ") # 表示执行foo函数....
Mon doute est que ce qui est renvoyé est évidemment un nom de fonction. Logiquement parlant, ce qui est renvoyé est une adresse de fonction. ! Y a-t-il quelque chose qui ne va pas dans ma compréhension ? Ensuite, j'ai vérifié les informations sur Internet, et c'était à nouveau la fermeture.... Mais personnellement, je ne l'aime pas. Ensuite, je l'ai analysé moi-même et j'ai résumé un programme. Après l'avoir lu, vous en connaîtrez la raison
. Programme :
# coding=utf-8 # 带参数的函数 返回一个函数地址就行.... def funX(x): def funY(): return x return funY # 不带参数的函数.... def funX1(): print("调用函数funX1") def funY1(): print("调用函数funY1") return funY1 if __name__ == '__main__': # print(funX(5)()) # 调用有参数的嵌套函数... print(funX1()()) # 调用无参数的嵌套函数...
Cela ne ressemble-t-il pas à notre décoratrice ? C'est notre décorateur ! Par conséquent, nous pouvons le comprendre selon le programme ci-dessus, ce qui signifie qu'il détermine d'abord le nombre de paramètres puis les transmet séparément. Ensuite, nous réécrivons le code :
# coding=utf-8 import time # 将函数作为参数传入到此方法.... def timeif(func): def wrapper(arg): print("in wrapper() %s" % (arg)) start = time.clock() func(arg) end = time.clock() print("used: %s %s" % (end-start, arg)) return wrapper # @timeif def foo(arg): print("in foo() %s" % (arg)) if __name__ == '__main__': timeif(foo)(' Hello')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!