Python 3.5(装饰器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3.5(装饰器)相关的知识,希望对你有一定的参考价值。

装饰器

简单总结

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

 

 

简单装饰器的实现

def login(func):#等同于login(vv),ff=name
    def inner(x):
        print("装饰器的简单实现")
        func(x)  #此时ff等于vv
    return inner
@login #等同于login(vv)
def vv(name):
    print("实现装饰器:%s"%name)

#vv => login(vv) => inner  执行login函数,并将 @login 下面的 函数 作为vv函数的参数,即:@login 等价于 login(vv)
vv(ss) #inner(‘ss‘)

装饰器带参数的函数 (摘自:http://www.cnblogs.com/Eva-J/articles/7194277.html#_label2)

def timer(func):
    def inner(a):
        start = time.time()
        func(a)
        print(time.time() - start)
    return inner

@timer
def func1(a):
    print(a)

func1(1)

装饰器——带参数的装饰器

装饰器带参数的多个函数

import time
def timer(func):
    def inner(*args,**kwargs):
        start = time.time()
        re = func(*args,**kwargs)
        print(time.time() - start)
        return re
    return inner

@timer   #==> func1 = timer(func1)
def func1(a,b):
    print(in func1)

@timer   #==> func2 = timer(func2)
def func2(a):
    print(in func2 and get a:%s%(a))
    return fun2 over

func1(aaaaaa,bbbbbb)
print(func2(aaaaaa))

可以装饰具有处理n个参数的函数的装饰器 

def w1(func):
    def inner(*args,**kwargs):
        # 验证1
        # 验证2
        # 验证3
        return func(*args,**kwargs)
    return inner
 
@w1
def f1(arg1,arg2,arg3):
    print f1

 

一个函数可以被多个装饰器装饰吗?

def w1(func):
    def inner(*args,**kwargs):
        # 验证1
        # 验证2
        # 验证3
        return func(*args,**kwargs)
    return inner
 
def w2(func):
    def inner(*args,**kwargs):
        # 验证1
        # 验证2
        # 验证3
        return func(*args,**kwargs)
    return inner
 
 
@w1
@w2
def f1(arg1,arg2,arg3):
    print f1

 


以上是关于Python 3.5(装饰器)的主要内容,如果未能解决你的问题,请参考以下文章

python 3.5学习笔记(第四章)

Python 3.5(装饰器)

Python面向对象学习之八,装饰器

[TimLinux] Python 装饰器

python装饰器

python装饰器关键代码