带函数参数的装饰器(复杂装饰器)的例子

带函数参数的装饰器的作用就是,不用写装饰器了,写函数就行了,写函数就相当于写装饰器了。在第15行,对Index()函数进行

装饰,此装饰器带有两个函数参数,那现在是根据python的内部语法机制传Index()函数的地址,还是传自己写的两个函数内存

地址呢?假如没有函数地址参数,则会对Index()函数进行重新制作,把Index()函数的地址作为Filter()函数的参数传给新

制作的Index()函数。现在,这一行(15)是这样执行的:

1.执行Filter(before_func,after_func),把Filter()函数读到内存,函数执行就会后返回值,不写return就默认返回None.现在写的是return outer(第13行),这一步跟装饰器没关系。

2.返回outer之后,从函数内存地址的意义上说,@Filter就变成了@outer.此时,@outer就是Index()的装饰器。outer()函数会把Index

()函数的地址传进来,main_func=Index.

3.新的Index=outer()的返回值wrapper, 新Index=wrapper,它里面有传进来的两个新函数before_func()和after_func()和旧的Index()函数。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def Login(request,kargs):
    print('此处添加新功能1,比如登陆权限检查功能。')
    return 33
def ErrorHandle(request,kargs):
    print('此处添加新功能2,比如登录报错功能。')
def Filter(before_func, after_func):
    def outer(main_func):
        def wrapper(request, kargs):
            before_result = before_func(request, kargs)
            main_result = main_func(request, kargs)
            after_result = after_func(request, kargs)
        return wrapper
    return outer

@Filter(Login, ErrorHandle)
def Index(request, kargs):
    print('此处是原来的未经装饰过的函数。')
    return 'home page'
Index('req', 'alex')
posted @   I'm_江河湖海  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示