装饰器

先来一个简单的例子:

#!/usr/bin/env python
def log(func):    #接受被装饰函数
    def dec(*argv,**kwargs):   #接受被装饰函数的参数
        print("this is a add exaple!!")
        return func(*argv,**kwargs)  #接受被装饰函数的参数
    return dec


@log
def test(name,age):
    print("this is a test example!! %s   %s"  %  (name,age))

if __name__=="__main__":
    test("liujiangbu",27)


z装饰器带参数:

!/usr/bin/env python

encoding: utf-8

def start_info():
print ('电视剧开头曲.......')
print ('开始唱歌.......')
def end_info():
print ('电视剧结束曲.......')

def filter(start_info,end_info): #接收俩函数
def outer(main_fun): #接收装饰的函数
def app(argv,kwargs): #接收装饰的函数的参数
print('******************************')
start_info()
main_fun(
argv,**kwargs)#接收装饰的函数的参数
end_info()
print('******************************')
return app
return outer

先把函数传进去,然后在用里面的函数装饰

传函数的装饰器必须有三个def ,第一个是接受函数,第二个是装饰函数的,返回第三个函数对象

把需要装饰的函数重新定义,然后调用调用

1: filter(start_info,end_info):

2: @outer -> one_info = outer(one_info)

@filter(start_info,end_info) #这里传入俩个函数
def one_info(name,info):
print ('this is one')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

@filter(start_info,end_info)
def two_info(name,info):
print('this is two')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

@filter(start_info,end_info)
def three_info(name,info):
print('this is three')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

if name == "main":
print('三国演义三部曲开始。。。。。。。。')
print('第一部。。。。。。。。。。。。。。')
one_info('三国电视剧第一部', '三国大战')

print('第二部。。。。。。。。。。。。。。')
two_info('三国电视剧第二部', '三国英雄')

print('第三部。。。。。。。。。。。。。。')
three_info('三国电视剧第三部', '三国鼎力')

装饰器不带参数:

!/usr/bin/env python

encoding: utf-8

def start_info():
print ('电视剧开头曲.......')
print ('开始唱歌.......')
def end_info():
print ('电视剧结束曲.......')

def outer(main_fun): #接收装饰的函数
def app(argv,kwargs): #接收装饰的函数的参数
print('******************************')
start_info()
main_fun(
argv,**kwargs)#接收装饰的函数的参数
end_info()
print('******************************')
return app

1: @outer -> one_info = outer(one_info)

@outer
def one_info(name,info):
print ('this is one')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

@outer
def two_info(name,info):
print('this is two')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

@outer
def three_info(name,info):
print('this is three')
print('wolcome to tv %s .......' % (name))
print('wolcome to tv %s .......' % (info))

if name == "main":
print ('三国演义三部曲开始。。。。。。。。')
print ('第一部。。。。。。。。。。。。。。')
one_info('三国电视剧第一部','三国大战')

print('第二部。。。。。。。。。。。。。。')
two_info('三国电视剧第二部','三国英雄')

print('第三部。。。。。。。。。。。。。。')
three_info('三国电视剧第三部','三国鼎力')

http://www.cnblogs.com/cicaday/p/python-decorator.html
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python装饰器的高级用法(翻译) 原文地址https://www.codementor.io/python/t...
    城南道阅读 4,821评论 1 22
  • 装饰是为函数和类指定管理代码的一种方式.装饰器本身的形式是处理其他的可调用对象的可调用的对象。 函数装饰器在函数定...
    低吟浅唱1990阅读 235评论 0 0
  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 1,370评论 0 3
  • 元类与装饰器的关系 在class语句的末尾,类装饰器把类名重新绑定到一个函数的结果。 元类通过一条class语句的...
    低吟浅唱1990阅读 415评论 0 0
  • 古代文学课笔记 盘古开天辟地 女娲补天造人 炎黄夸父刑天 黄帝垂衣裳而治 后羿射日安民 鲧禹治水 先说人族起源。国...
    少衍阅读 338评论 0 2