装饰器的应用-装饰器带参数和不带参数

 1 #!/usr/bin/env python
 2 #encoding: utf-8
 3 def start_info():
 4     print (‘电视剧开头曲.......‘)
 5     print (‘开始唱歌.......‘)
 6 def end_info():
 7     print (‘电视剧结束曲.......‘)
 8
 9 def filter(start_info,end_info): #接收俩函数
10     def outer(main_fun): #接收装饰的函数
11         def app(*argv,**kwargs): #接收装饰的函数的参数
12             print(‘******************************‘)
13             start_info()
14             main_fun(*argv,**kwargs)#接收装饰的函数的参数
15             end_info()
16             print(‘******************************‘)
17         return app
18     return outer
19 #先把函数传进去,然后在用里面的函数装饰
20 #传函数的装饰器必须有三个def ,第一个是接受函数,第二个是装饰函数的,返回第三个函数对象
21 # 把需要装饰的函数重新定义,然后调用调用
22 #1: filter(start_info,end_info):
23 #2: @outer ->  one_info = outer(one_info)
24 @filter(start_info,end_info) #这里传入俩个函数
25 def one_info(name,info):
26     print (‘this is one‘)
27     print(‘wolcome to tv %s .......‘ % (name))
28     print(‘wolcome to tv %s .......‘ % (info))
29
30 @filter(start_info,end_info)
31 def two_info(name,info):
32     print(‘this is two‘)
33     print(‘wolcome to tv %s .......‘ % (name))
34     print(‘wolcome to tv %s .......‘ % (info))
35
36 @filter(start_info,end_info)
37 def three_info(name,info):
38     print(‘this is three‘)
39     print(‘wolcome to tv %s .......‘ % (name))
40     print(‘wolcome to tv %s .......‘ % (info))
41
42 if __name__ == "__main__":
43     print(‘三国演义三部曲开始。。。。。。。。‘)
44     print(‘第一部。。。。。。。。。。。。。。‘)
45     one_info(‘三国电视剧第一部‘, ‘三国大战‘)
46
47     print(‘第二部。。。。。。。。。。。。。。‘)
48     two_info(‘三国电视剧第二部‘, ‘三国英雄‘)
49
50     print(‘第三部。。。。。。。。。。。。。。‘)
51     three_info(‘三国电视剧第三部‘, ‘三国鼎力‘)
 1 #!/usr/bin/env python
 2 #encoding: utf-8
 3 def start_info():
 4     print (‘电视剧开头曲.......‘)
 5     print (‘开始唱歌.......‘)
 6 def end_info():
 7     print (‘电视剧结束曲.......‘)
 8
 9 def outer(main_fun): #接收装饰的函数
10     def app(*argv,**kwargs): #接收装饰的函数的参数
11         print(‘******************************‘)
12         start_info()
13         main_fun(*argv,**kwargs)#接收装饰的函数的参数
14         end_info()
15         print(‘******************************‘)
16     return app
17
18 #1: @outer ->  one_info = outer(one_info)
19 @outer
20 def one_info(name,info):
21     print (‘this is one‘)
22     print(‘wolcome to tv %s .......‘ % (name))
23     print(‘wolcome to tv %s .......‘ % (info))
24
25 @outer
26 def two_info(name,info):
27     print(‘this is two‘)
28     print(‘wolcome to tv %s .......‘ % (name))
29     print(‘wolcome to tv %s .......‘ % (info))
30
31 @outer
32 def three_info(name,info):
33     print(‘this is three‘)
34     print(‘wolcome to tv %s .......‘ % (name))
35     print(‘wolcome to tv %s .......‘ % (info))
36
37 if __name__ == "__main__":
38     print (‘三国演义三部曲开始。。。。。。。。‘)
39     print (‘第一部。。。。。。。。。。。。。。‘)
40     one_info(‘三国电视剧第一部‘,‘三国大战‘)
41
42     print(‘第二部。。。。。。。。。。。。。。‘)
43     two_info(‘三国电视剧第二部‘,‘三国英雄‘)
44
45     print(‘第三部。。。。。。。。。。。。。。‘)
46     three_info(‘三国电视剧第三部‘,‘三国鼎力‘)
时间: 2024-10-11 03:22:07

装饰器的应用-装饰器带参数和不带参数的相关文章

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599 对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名: 对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象. #!/usr/bin/env python # coding=gbk """ __title

python基础--定义装饰器(内置装饰器)

装饰器的定义: 装饰器本质上就是一个python函数,它可以让其它函数在不需要做任何代码改动的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景中,比如-- >插入日志.性能测试.事务处理.缓存.权限校验等场景.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同的代码并且可以重复使用. 装饰器的作用: 就是为已经存在的函数或者对象添加额外的功能 装饰器的写法: (无参装饰器) def wrapper(func): def inn

自己编写一个装饰器中的装饰器函数

看了"大道曙光"的<探究functools模块wraps装饰器的用途>的文章.基本上弄清了wraps的工作原理,为了检验一下自己理解的程度,于是动手写一个类似的 wraps函数,请大家指教. #!/usr/bin/env python # -*- coding: utf-8 -*- #filename : mywrapper.py #date: 2017-06-02 ''' wrapper function by my code.''' import functools i

学习python的第十五天(函数的装饰器,两层装饰器和三层装饰器)

06.01自我总结 一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是不能减少他的程序内容,他的原来程序不变只能增不能减少,然后返回装饰好的子函数,再全局定义一个变量名与要装饰的函数名相同名字,并且将装饰后的函数调用赋予改变量. 1.简单的例子(无参函数) 如 #有个函数f1 def f1(): print('nick machachong') #

函数装饰器和类装饰器实现单例类

单例类,指的是这个类只能创建一个实例,创建完成后,其他类实例都无法再创建.今天我们来看一下,使用函数装饰器和类装饰器怎么实现这种特殊一点的类. 函数装饰器实现 装饰器算是类里面比较难的内容之一,但是实际上它的思想并不复杂.简单点说,就是在你原来内容的基础上,在外面给你加点东西,实现类似装饰的效果.但是它是怎么实现的呢?一般来说,都是通过拦截函数调用来实现的,比如:用装饰器装饰函数的时候,它拦截函数调用,装饰类的时候,它拦截类实例的创建调用,即拦截类初始化__init__函数.知道这个原理以后,我

无参装饰器为被装饰函数添加统计时间的功能

#需求 定义无参装饰器为被装饰函数添加统计时间的功能 1 import time #导入时间模块 2 3 def timer(func): 4 def wapper(): 5 start = time.time() 6 func() 7 stop = time.time() 8 index_spend_time = stop - start 9 print(index_spend_time) 10 return wapper 11 @timer 12 def index(): 13 time.s

定义有参装饰器为被装饰函数添加认证功能,定义有参装饰器为被装饰函数添加认证功能,三次验证失败锁定用户

#需求:定义有参装饰器为被装饰函数添加认证功能,用户信息的来源可以是文件也可以是ldap # 三次验证失败锁定用户 1 def menu(): 2 #用户交互界面 3 user_name = input("请输入在用户名:") 4 password = input("请输入密码:") 5 return user_name,password #以元组形式返回值 6 ''' 7 alex1 1111 8 alex2 2222 9 egon3 3333 10 ''' 11

python 之装饰器(用装饰器给现有函数增加新功能)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 @author: toby """ #知识点:装饰器 ''' #一.小粒子: #要求1.假如产品经历要求在每个函数之上执行之前都添加一个验证的功能,当然这里只是模拟而已,别当真哈! #已写好的现有函数如下,有1000个函数 def func1():     print 'fun

C#4.0语法糖之第三篇: 参数默认值和命名参数 对象初始化器与集合初始化器

今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完善以及自我提高,给各位园友们带来更好,更高效的文章. 废话就说到这里,下面正式进入我们的今天的C#4.0语法糖,今天给大家分享一下参数默认值.命名参数.对象初始化器和集合初始化器. 参数默认值和命名参数:方法的可选参数是.net 4.0最新提出的新的功能,对应简单的重载可以使用可选参数和命名参数混合

流之阅读器和书写器(过滤器阅读器和过滤器书写器)

InputStreamReader和OutputStreamWriter类就是相当于输入和输出流之上的装饰器,把面向字节的接口改为面向字符的接口.完成之后,就可以在它们之上使用面向字符的过滤器阅读器或过滤器书写器.与过滤器流一样,有很多子类可以完成特定的过滤工作,包括: BufferedReader BufferedWriter LineNumberReader PushbackReader PrintWriter BufferedReader和BufferedWriter类是基于字符的,对应于