J'ai déjà entendu parler des décorateurs, mais je n'ai fait qu'effleurer la surface et je ne savais pas comment les appeler. Je voulais juste optimiser mon projet actuel, alors j'ai pensé à utiliser des décorateurs, alors je les ai étudiés 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 @timeifdef foo(arg): print("in foo() %s" % (arg))if __name__ == '__main__': foo(" Hello ") # 表示执行foo函数....
Mon doute est que le retour est évidemment un nom de la fonction, ce qui est logique. En d’autres termes, 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 funY1if __name__ == '__main__': # print(funX(5)()) # 调用有参数的嵌套函数... print(funX1()()) # 调用无参数的嵌套函数...
Est-ce que cela ne ressemble pas à notre décorateur ? 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-8import 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# @timeifdef 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!