您的位置:首页 > 编程语言 > Python开发

Python学习23:函数装饰器的使用(方法重用)

2014-07-29 17:08 766 查看

装饰器实现原理

#FileName : dec.py

#Python装饰器(原型):使用工具函数的重用
import time

#定义一个测试的函数
def func():
print('Have a good day!')

#再次定义一个测试的函数
def func2():
#创建一个列表,作为测试使用,使用1到100范围,增速为2,并且能够被3整除的数值,构建列表
testLs = [data for data in range(1,100,2) if not data % 3]
for i in testLs:
print(i,end = ' ')
print()

#定义工具函数,用于测试函数运行的时间
def call_func(fu):
#在工具函数内部定义嵌入式函数用作返回值
def next_func():
start = time.clock()
print('start : ',start)
fu()
end = time.clock()
print('end : ',end)
return next_func

#将工具函数的返回值赋值给测试函数func,测试func运行的时间
func = call_func(func)
#调用func函数,当前的func函数已经改变
func()




普通装饰器

#使用函数装饰器@..........................
print('使用函数装饰器@-------------------')
@call_func
def func3():     #func3 = call_func(func3)
print('使用Python函数装饰器:------------')
print('以上的效果等同于 func3 = call_func(func3)')
#调用函数func3
func3()
print()




多重装饰器

#定义另外一个工具函数,用于多重函数装饰器操作
def tool_func(func):
def next_func():
print('多重函数修饰器--------------')
func()
print('多重函数修饰器------------over')
return next_func

#使用多重函数装饰器@..........................
@tool_func
@call_func
def func4():
#实现步骤:func4 = call_func(func4)==>func4 = tool_func(func4)
print('函数装饰器就是函数,可以实现功能重用')
#调用func4
func4()




带参数的装饰器

#带参数的函数装饰器:---------------
print('带参数的函数装饰器------------')
#定义另外一个工具函数
def var_func(var_str):
print('zhjzhjzhjzhjzh')
def next_func(func):
print('带参数的装饰器--------------',var_str)
def thd_func():
func()
print('带参数的装饰器--------------')
return thd_func
print("jiejiejiejiejiejiei")
return next_func

@var_func('Hello Python world')
def test_func():  #等价于 test_func = [var_func('Hello Python world')](test_func)
print('http://csdn.com.cn/jeizhj')
test_func()




内置装饰器

内置的装饰器内置的装饰器有三个,分别是staticmethod、classmethod和property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。

由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多,除非你想要完全的面向对象编程。而属性也不是不可或缺的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: