就字义上来说,装饰器的功能就是把一个函数装饰成一个新的函数,当原先的函数被运行时,同时运行新旧两个函数。
def mission_1(): print ‘mission_1‘ def mission_2(): print ‘mission_2‘ def mission_3(): print ‘mission_3‘ mission_1() mission_2() mission_3()
几个最简单的函数,当函数mission_1()至mission_3被运行时,显示mission_1至mission3。现在要求不改动当前函数运行方法和不改动函数内容,增加一个mission_a的函数时,装饰器就有他的用武之地了。
def add_mission(arg): #2、只以mission_1为例,此时参数arg = mission_1 def mission_a(): #5、当运行mission_1()函数时,执行此函数,因为add_mission函数执行后,mission_a以返回值形式赋值给了mission_1 print ‘mission_a‘ arg() #6、等价于运行了真正的mission_1()函数 return mission_a #3、将mission_a返回值赋给mission_1,如果运行mission_1()函数,相当于运行mission_a()函数 @add_mission #1、当py被运行,首先会在这里以mission_1为参数执行add_mission()函数 #相当于后面被注释的mission_1 = add_mission(mission_1) def mission_1(): #7、真正的mission_1函数 print ‘mission_1‘ #8、最后才会运行此任务 @add_mission def mission_2(): print ‘mission_2‘ @add_mission def mission_3(): print ‘mission_3‘ #mission_1 = add_mission(mission_1) mission_1() #4、此处被运行时并非运行真正的mission_1(),因为此时mission_1己被重新赋值为mission_a,相当于mission_1=mission_a #mission_2 = add_mission(mission_2) mission_2() #mission_3 = add_mission(mission_4) mission_3()
注释部份的数字是以mission_1为例,说明程序运行的流程。
也就是说,在这个例子中,装饰器的功能就是,相当于把mission_1()函数装饰为mission_a()函数,同时把mission_1()函数以参数形式装饰为arg()函数。
时间: 2024-10-06 16:23:45