装饰器实现原理
#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,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。
由于模块里可以定义函数,所以静态方法和类方法的用处并不是太多,除非你想要完全的面向对象编程。而属性也不是不可或缺的。