| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- # -*- 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__)
|