# -*- coding: UTF-8 -*- ###============ 装饰器的最简单用法 ============### # n = 'hello' # def outer(arg): # def inner(): # print(arg.upper()) # return inner # n = outer(n) # n() ###============ 装饰器的修饰 ============### def n(): print("徐大虫!") # 不改变原有函数的情况下增加新的功能 # 如下的 n()。 def outer(arg): def inner(): print("*" * 30) # 新增功能 arg() print("*" * 30) # 上下都可新增功能 return inner n = outer(n) # python 封装为 @ 。如下: n() ###============ Python装饰器 @ ============### # def outer(arg): # def inner(): # print("*" * 30) # arg() # print("*" * 30) # return inner # @outer #作用相当于 n = outer(n); 下面紧跟函数。 # def n(): # print("徐大虫!") # n() ###============ wraps 保留原来的函数名称及属性 ============### import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): '''decorator''' print('Calling decorated function...') return func(*args, **kwargs) return wrapper @my_decorator def example(): """Docstring""" print('Called example function') # print(example()) print(example.__name__, example.__doc__)