python笔记 - day4-之装饰器
需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") def f1(): outer() #分别调用函数 print("F1") def f2(): outer() #分别调用函数 print("F2") def f100(): outer() #分别调用函数 print("F100") f1() f2() f100() 使用装饰器,增加log: def outer(func): def inner(): print("log") return func() return inner @outer def f1(): print("F1") @outer def f2(): print("F2") @outer def f100(): print("F100") f1() f2() 并增加after: def outer(func): def inner(): print(‘log‘) ret = func() print("after") return ret return inner @outer def f1(): print("F1") @outer def f2(): print("F2") @outer def f100(): print("F100") f1() f2()
装饰器流程剖析:
声明: 【函数的整体是可以被其他函数当做参数所调用,传递的】 def f1(): print(‘123‘) def f2(xxx): xxx() f2(f1) 结果:123 流程剖析,例一: def outer(func): print(123,func) @outer def f1(): print(‘F1‘) Readme: 1.执行程序后,会把123,重新赋值给f1,并且把老的,加载到内存的f1“print(‘F1‘)”,当做参数,当做参数,传给func; 2.print(123,func),func,就是老的f1,通过传给func打印出来; 流程剖析,例二: def outer(func): def inner(): print(‘before‘) #赋值给下面的f1 func() #调用执行老的f1 print(‘after‘) return inner #把结果返回给下面f1,并赋值给下面的f1;(注意:这里加括号,就是执行函数;不加括号,就是把inner函数体所有内容返回给f1,并重新赋值给f1) @outer def f1(): print(‘F1‘) f1() Readme: * 定义了两个函数,没有调用函数,不会执行; 功能一: 加上@outer,(@ + 函数名)后实现的效果: 自动执行outer函数,并且将其下面的函数名f1当作参数传递; 功能二: 将outer函数的返回值,重新赋值给f1; 装饰器,返回值:
def outer(func): def inner(): print(‘before‘) r = func() print(‘after‘) return r return inner @outerdef f1(): print(‘F1‘) return "砍你" ret = f1()print("返回值:",ret)
装饰器,参数:
def outer(func): def inner(a): print(‘before‘) r = func(a) print(‘after‘) return r return inner @outerdef f1(arg): print(arg) return "砍你" ret = f1(‘fafafa‘)print(ret) 装饰器,接收多个参数:
def outer(func): def inner(*args,**kwargs): print(‘before‘) r = func(*args,**kwargs) print(‘after‘) return r return inner @outerdef f1(arg): print(arg) return "砍你" ret = f1(‘fafafa‘)print("返回值:",ret) @outerdef f2(arg1,arg2): print("F2") f2(‘bbbbb‘,‘ccccc‘)
时间: 2024-10-12 19:21:39