'''
@Descripttion:
@version:
@Author: 冯浩
@Date: 2019-10-21 15:19:54
@LastEditors: 冯浩
@LastEditTime: 2019-10-21 16:02:34
'''
#例子一
def deco1(func):# 装饰器
def inner():
print('装饰器内部函数')
return inner
#原始表达方式, 装饰器其实就是该方式的语法糖
def example0():
print('原始函数')
print(id(example0))
example0 = deco1(example0) #本行即为装饰器本质
print(id(example0))
print('*'*32)
example0() #执行替换后的本函数
#装饰器表达法,装饰器可以理解为函数调用的简化表达
@deco1
def example1():
print('原始函数')
print('-'*32)
example1() #执行装饰器表达后的本函数
'''
执行结果如下:
63866536
60649120
********************************
装饰器内部函数
--------------------------------
装饰器内部函数
'''
补充:example1()表是调用函数的执行结果,example1表示调用函数本身(函数并未执行)
'''
@Date: 2019-10-20 23:05:26
@LastEditors: 冯浩
@LastEditTime: 2019-10-21 23:58:33
'''
registry=[]
def register (func):#装饰函数
print('runnig register is %s'% func)
registry.append(func)
return func
@register
def f1():
print('执行f1')
@register
def f2():
print('执行f2')
def f3():
print('执行f3')
def main():
print('-'*32,'
开始执行')
print('已执行:', registry)
f1()
# f2()
f3()
if __name__ == "__main__":
main()
'''
执行结果如下:
runnig register is <function f1 at 0x00000000039FC1E0>
runnig register is <function f2 at 0x00000000039FC268>
--------------------------------
开始执行
已执行: [<function f1 at 0x00000000039FC1E0>, <function f2 at 0x00000000039FC268>]
执行f1
执行f3
结论,装饰函数在导入模块时立刻执行,而被装饰函数只在明确调用时运行
可以看到,f2未被调用,但是其装饰函数先行执行了.
'''