装饰器

xiaoxiao2021-02-28  90

简介

装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作。避免了在内部进行修改。

简例

首先新建装饰器文件functool.py,写入装饰函数和定义的函数:

#注意@表示调用了装饰器 def wrapper(func): def result(): print("log:")#表示在函数前面定义要做的内容 func() return result @wrapper def f1(): print("foo1") @wrapper def f2(): print("foo2") @wrapper def f100(): print("foo100")

然后,新建文件,导入上面工具:

import func_tool func_tool.f1() func_tool.f2() func_tool.f100()

效果:

内部函数无返回值型

def wrapper(func): def result(): print("log:") ret = func() print("after") #return ret return result @wrapper def f1(): print("foo1")

执行:

import func_tool ret = func_tool.f1() print("返回值:",ret)

将返回None

内部函数有返回值型

def wrapper(func): def result(): print("log:") ret = func() print("after") return ret return result @wrapper def f1(): print("foo1") return 1

执行结果:

需参数输入型

def wrapper(func): def result(): print("log:") ret = func() print("after") return ret return result @wrapper def f1(arg): print(arg) return 1

执行:

import func_tool ret = func_tool.f1("I'm arg") print("返回值:",ret)

报错: 解决方法: 修改装饰器:

def wrapper(func): def result(a): print("log:") ret = func(a) print("after") return ret return result @wrapper def f1(arg): print(arg) return 1

多元参数函数型

遇到不同的函数输入,利用装饰器进行自适应的协调。

def wrapper(func): def result(*args,**kwargs): print("------begin----------") ret = func(*args,**kwargs) print("-------end----------") return ret return result @wrapper def f1(arg): print(arg) return 1 @wrapper def f2(arg1,arg2): print("{}+{}={}".format(arg1,arg2,(arg1+arg2)))

执行:

import func_tool ret = func_tool.f1("I'm arg") print("f1返回值:",ret) ret = func_tool.f2(2,3) print("f2返回值:",ret)

结果:

转载请注明原文地址: https://www.6miu.com/read-85843.html

最新回复(0)