美文网首页
python3基础---详解装饰器

python3基础---详解装饰器

作者: HopCoder | 来源:发表于2017-09-12 13:28 被阅读0次

1、装饰器原理

def w1(func):
    def inner():
        print('---正在验证权限----')
        func()
    return inner
def f1():
    print('-----f1-----')

def f2():
    print('----f2-----')

#innerfunc = w1(f1)
#innerfunc()

f1 = w1(f1)
f1()      

2、装饰器语法

def w1(func):
    def inner():
        print('---正在验证权限----')
        func()
    return inner

@w1 #在func代表的函数身上添加@
def f1():
    print('-----f1-----')

def f2():
    print('----f2-----')

f1()

3、装饰器执行的时间

装饰器在Python解释器执行的时候,就会进行自动装饰,并不是在在执行的时候才进行装饰

4、两个装饰器

def w1(func):
    print('---正在装饰 1----')
    def inner():
        print('---正在验证权限 1----')
        func()
    return inner

def w2(func):
    print('---正在装饰 2----')
    def inner():
        print('---正在验证权限 2----')
        func()
    return inner

@w1 #f1 = w1(f1)
@w2 #f1 = w2(f1)
def f1():
    print('-----f1-----')

#在调用f1之前,已经进行了装饰
f1()

说明:
如果不调用f1,直接编译,打印结果是:

---正在装饰 2----
---正在装饰 1----

如果调用f1,打印结果是

---正在装饰 2----
---正在装饰 1----
---正在验证权限 1----
---正在验证权限 2----
-----f1-----

理解:

@w1 #f1 = w1(f1)
@w2 #f1 = w2(f1)
def f1():

当解释器程序执行这个的时候,先碰到@w1所以判断下面是否是def函数,发现下面是@w2,所以继续执行,当碰到def f1()的时候,找到要装饰的目标函数,所以先用w2对目标进行装饰,然后用w1对目标函数进行装饰

5、装饰器对有参和无参的函数进行装饰

1、有参

def func(funNume):
    def func_in(aa,bb):
        funNume(aa,bb)
    return  func_in

@func
def f1(a,b):
    print("------ppppp-----")
    
f1(11,12)

2、对有返回值的函数进行装饰

def func(funNume):
    def func_in(aa,bb):
        return funNume(aa,bb)

    return  func_in

@func
def f1(a,b):
    print("------ppppp-----")
    return ‘haha’
    
f1(11,12)

6 、通用装饰器

def func(funNume):
    def func_in(*args,**kargs):
        return funNume(*args,**kargs)
    return  func_in

@func
def f1(a,b):
    print("------f1-----")
    return 'haha'

@func
def f2():
    print("----f2-----")

@func
def f3(a):
    print("----f3-----")
#说明:*args,**kargs是不定参数

7、带参数的装饰器

def func_arg(arg = 'hello'):
    def func(funNume):
        def func_in(*args,**kargs):
            return funNume(*args,**kargs)
        return  func_in
    return func

#1.先执行func_arg('world')函数,这个函数return的结果是func这个函数的引用
#2.@func
#3.使用@func对f1进行装饰
@func_arg('world')
def f1(a,b):
    print("------f1-----")
    return 'haha'

相关文章

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

  • 学习记录

    Python基础中的高级专题装饰器详解:https://www.bilibili.com/video/av1275...

  • python 装饰器

    参考链接:详解Python的装饰器

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • 让你Python到很爽的加速递归函数的装饰器

    Python技巧——好用的一个装饰器 今天我们会讲到一个[装饰器] 注记:链接“装饰器”指Python3教程中的装...

  • PYTHON部分基础D4

    Decorator装饰器 装饰器自己可以有参数 内置函数 文件读写 Python3的继承机制 成员保护和访问限制 ...

  • 装饰器详解

    装饰器详解 简单实例教程 需要装饰的函数 装饰器的参数是方法名,就是被装饰的函数 被装饰的函数需要这样写 调用 结...

  • Python装饰器的另类用法

    原文出处: cicaday 之前有比较系统介绍过Python的装饰器(请查阅《详解Python装饰器》),本文算是...

  • Python3简明教程五

    这部分主要说明Python3的迭代器、生成器、装饰器等相关知识。 来源:实验楼Python3简明教程 1. 迭代器...

  • 装饰器详解

    装饰器基本写法: 高级一点的装饰器 带参数的装饰器和类装饰器属于进阶的内容。在理解这些装饰器之前,最好对函数的闭包...

网友评论

      本文标题:python3基础---详解装饰器

      本文链接:https://www.haomeiwen.com/subject/gadcsxtx.html