首页 > 其他 > 详细

装饰器详解

时间:2020-09-04 17:00:27      阅读:55      评论:0      收藏:0      [点我收藏+]

1,什么是装饰器

所谓的装饰器,其实就是通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改。

说到装饰器的那就要提一下闭包这个概念了

装饰器本质---闭包

当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行就产生了闭包.闭包是一个环境,具体指的就是外部函数--高阶函数。说白了就是一个环境,能够读取其他函数内部的变量

闭包形成的条件

1,存在嵌套关系,即有内部函数,外部函数

2,内部函数引用外部变量

3,外部函数返回内部函数

2,简单的装饰器

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

# 定义一个函数
def PrintHello():
    print(Hello the world!)

PrintHello()
print(----------------------------------)
# 想要让这个函数多打印一句话,但是又不能改变这个函数,这个时候就需要定义一个装饰器
def Decorator(func):
    def inner():
        print(这是需要加的话)
        func()
    return inner

hello = Decorator(PrintHello)
hello()

结果:

技术分享图片

3,美化后的装饰器

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
‘‘‘
# 装饰器
def Decorator(func):
    def inner():
        print(这是需要加的话)
        func()
    return inner

# 定义一个函数
@Decorator #定义好装饰器后,只需要在被装饰的函数上写@装饰器名字就可以了
def PrintHello():
    print(Hello the world!)

PrintHello()

这里的@Decorator就好比 hello = Decorator(PrintHello)

4,带参数的装饰器

单个参数

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

# 装饰器
def Decorator(func):
    def inner(args):
        print(这是需要加的话)
        func(args)
    return inner

# 定义一个函数
@Decorator #定义好装饰器后,只需要在被装饰的函数上写@装饰器名字就可以了
def PrintHello(args):
    print(f{args}:Hello the world!)

PrintHello(Army)

技术分享图片

多个参数

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

# 装饰器
def Decorator(func):
    def inner(*args,**kwargs):
        print(这是需要加的话)
        func(*args,**kwargs)
    return inner

# 定义一个函数
@Decorator #定义好装饰器后,只需要在被装饰的函数上写@装饰器名字就可以了
def PrintHello(args):
    print(f{args}:Hello the world!)

@Decorator #定义好装饰器后,只需要在被装饰的函数上写@装饰器名字就可以了
def PrintHello2(args,args2):
    print(f{args}:Hello the world! {args2})

PrintHello(Army)
PrintHello2(Army,123)

技术分享图片

 

装饰器详解

原文:https://www.cnblogs.com/yunhgu/p/13614493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!