码迷,mamicode.com
首页 > 编程语言 > 详细

Python 3.5(装饰器)

时间:2017-12-02 23:14:23      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:装饰器   http   *args   验证   功能   rgs   pre   简单   def   

装饰器

简单总结

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

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

 

 

简单装饰器的实现

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(装饰器)

标签:装饰器   http   *args   验证   功能   rgs   pre   简单   def   

原文地址:http://www.cnblogs.com/p0yz/p/7955705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!