本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-07(10)

2020-08(50)

Python自学成才之路 使用函数作为装饰器

发布于2020-07-29 22:18     阅读(507)     评论(0)     点赞(11)     收藏(3)



前面都是用类作为装饰器(传送门),主要是用类作为装饰器理解起来更容易。其实函数也可以用来做装饰器,因为函数本身就是可调用的,而且函数作为装饰器用得更多。同样函数作为装饰器可分为装饰器带有参数和不带参数。

第一种:不带参数的装饰器

不带参数的装饰器需要以函数作为参数,最后返回一个函数,如下所示:

def my_decorate(func):
    def wrapper(*args, **kwargs):
        func(*args, **kwargs)
    return wrapper


@my_decorate
def my_function(arg1):
    print('this is nmy_function : %s' %arg1)

my_function('hello')

输出:
this is nmy_function : hello

这个过程等价于
1.将my_function作为参数传入my_decorate函数中,返回wrapper函数
2.给wrapper传入参数并执行

wrapper = my_decorate(my_function)
wrapper('hello')



第二种:装饰器带参数

先看案例:

def my_decorate(params):
    print(params)
    def out_wrapper(func):
        def inner_wrapper(*args, **kwargs):
            func(*args, **kwargs)
        return inner_wrapper
    return out_wrapper


@my_decorate('hello my_decorate')
def my_function(arg1):
    print('this is nmy_function : %s' %arg1)

my_function('hello')

输出:
hello my_decorate
this is nmy_function : hello

其实很好理解,就是使用一个函数包住装饰器函数,这里可以理解为使用my_decorate包住装饰器函数out_wrapper,所以my_decorate(‘hello my_decorate’) 返回的是out_wrapper,最后out_wrapper作为my_function的装饰器。

这个过程等价于
1.传递参数给my_decorate函数并,返回out_wrapper函数
2.传递my_function给out_wrapper函数并执行,返回inner_wrapper函数
3.传递参数给inner_wrapper函数并执行


out_wrapper = my_decorate('hello my_decorate')
inner_wrapper = out_wrapper(my_function)
inner_wrapper('hello my_decorate')




本人是做大数据开发的,在微信上开了个个人号,会经常在上面分享一些学习心得,原创文章都会首发到公众号上,感兴趣的盆友可以关注下哦!
在这里插入图片描述
备注:微信公众号搜索‘大数据入坑指南’

原文链接:https://blog.csdn.net/u012062455/article/details/107648225






所属网站分类: 技术文章 > 博客

作者:丸子

链接:https://www.pythonheidong.com/blog/article/466962/3cf6c5ca531f6cb60a62/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

11 0
收藏该文
已收藏

评论内容:(最多支持255个字符)