栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python两个修饰器的示例详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python两个修饰器的示例详解

示例:

def before(func):                       #定义修饰器

    def wrapper(*args, **kwargs):

        print('Before function called.')

        return func(*args, **kwargs)

    return wrapper

def after(func):                         #定义修饰器

    def wrapper(*args, **kwargs):

        result = func(*args, **kwargs)

        print('After function called.')

        return result

    return wrapper

@before

@after

def test():                              #同时使用两个修饰器改造函数

    print(3)

运行:test()

结果:

Before function called.
3
After function called.

结果分析:

首先了解装饰器的流程:

@before

@after

def test():                              #同时使用两个修饰器改造函数

    print(3)

这一步相当于test=before(after(test)),返回before的WRAP函数,但是不执行。

test()--------before(after(test))()  执行before的WRAP函数    结果是:Before function called,同时返回一个函数after(test)()

after(test)()-----执行after的WRAP函数,结果是:result = func(*args, **kwargs):输出3;print('After function called.')输出After function called,同时返回一个result,因为test没有return语句所以不返回结果:

这里有几点需要说明:

def aa():

    print(5)

    return "6"

bb=aa() ---输出 5,但是不返回return的结果

bb---输出“6”

返回上一个例子的,result = func(*args, **kwargs)就相当于result=test(),输出print(5)---5;return result由于test()没有return语句所以啥也不返回,我们知道默认是返回none的,现在我们把上面串起来

print(test())------print(before(after(test))())

结果是:

Before function called.
3
After function called.

none

这里显示出了NONE,因为用了print输出了函数的默认返回。

这算自己的理解,如有不妥请指出共同进步。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/341440.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号