一个函数装饰器
2017-08-25 16:48
274 查看
Python的函数是对象
Python 函数可以被赋值def hello():–print(‘hello!’)
a = hello #注: 此处没有() ,是一个对象a() # 调用a() 结果与hello() 相同此时删除 hello,a() 依然保持原属性
函数可以定义在另一个函数里面
def say():
def hello():
return 'hello'
return hello
外层的say函数会把内层的 hello函数的执行结果输出
函数可以返回一个函数
可以将一个函数当作参数传递
书写一个装饰器
def oneDecorator(oneFunction):def oneWrapper():print ‘before’oneFunction()print ‘after’return oneWrapper
def sayHello(): print ‘hello’
run = oneDecorator(sayHello)run()
示例1
示例2
装饰器经典模式à累加装饰器
上例通过函数直接调用可写成
run = towDecorator(oneDecorator(sayHello))注:被装饰的函数不写括号,代表返回的是一个对象,然后通过对象()的方式运行run()
装饰器传递参数
只需要让包装函数传递参数即可
def oneDecoration(oneFunction): def wrapper(arg1, arg2): print(‘=’
* 50) oneFunction(arg1, arg2) print(‘=’
* 50) return wrapper
示例
使用装饰器装饰一个类中的方法
构建装饰器的时候,需要考虑self,所以在传参的时候,包装函数除了需要传递函数的参数,还要传递一个self参数
例:
def oneDecration(onefunction): def wrapper(self, args1, args2): print(‘=’* 50) oneFunction(self, args1, args2) print(‘=’ * 50) return wrapper
其它与上例无异,这里不再作演示
一个更为通用的装饰器
def oneDecration(onefunction): def wrapper(*args, **kwargs): print(‘=’ * 50) oneFunction(*args, **kwargs) print(‘=’ * 50) return wrapper@oneDecrationdef sayHello(name1, name2, name3): print(‘{}: hello, {}, {}’.format(name1,name2,name3))@oneDecrationdef sayHello1(): print(‘hello’)sayHello1()sayHello(‘Tom’,‘Jerry’, ‘Jim’)
装饰器一般格式
import functoolsdef 装饰器名(fun): @functools.wraps(fun) def wrapper(*args,
**kwargs): dosomething fun(*args, **kwargs) return wrapper
Python 函数可以被赋值def hello():–print(‘hello!’)
a = hello #注: 此处没有() ,是一个对象a() # 调用a() 结果与hello() 相同此时删除 hello,a() 依然保持原属性
函数可以定义在另一个函数里面
def say():
def hello():
return 'hello'
return hello
外层的say函数会把内层的 hello函数的执行结果输出
函数可以返回一个函数
可以将一个函数当作参数传递
书写一个装饰器
def oneDecorator(oneFunction):def oneWrapper():print ‘before’oneFunction()print ‘after’return oneWrapper
def sayHello(): print ‘hello’
run = oneDecorator(sayHello)run()
示例1
示例2
装饰器经典模式à累加装饰器
上例通过函数直接调用可写成
run = towDecorator(oneDecorator(sayHello))注:被装饰的函数不写括号,代表返回的是一个对象,然后通过对象()的方式运行run()
装饰器传递参数
只需要让包装函数传递参数即可
def oneDecoration(oneFunction): def wrapper(arg1, arg2): print(‘=’
* 50) oneFunction(arg1, arg2) print(‘=’
* 50) return wrapper
示例
使用装饰器装饰一个类中的方法
构建装饰器的时候,需要考虑self,所以在传参的时候,包装函数除了需要传递函数的参数,还要传递一个self参数
例:
def oneDecration(onefunction): def wrapper(self, args1, args2): print(‘=’* 50) oneFunction(self, args1, args2) print(‘=’ * 50) return wrapper
其它与上例无异,这里不再作演示
一个更为通用的装饰器
def oneDecration(onefunction): def wrapper(*args, **kwargs): print(‘=’ * 50) oneFunction(*args, **kwargs) print(‘=’ * 50) return wrapper@oneDecrationdef sayHello(name1, name2, name3): print(‘{}: hello, {}, {}’.format(name1,name2,name3))@oneDecrationdef sayHello1(): print(‘hello’)sayHello1()sayHello(‘Tom’,‘Jerry’, ‘Jim’)
装饰器一般格式
import functoolsdef 装饰器名(fun): @functools.wraps(fun) def wrapper(*args,
**kwargs): dosomething fun(*args, **kwargs) return wrapper
相关文章推荐
- python 对一个函数应用多个装饰器
- python装饰器实现原理?一个函数中怎么加入多个装饰器?怎么实现的?
- 带函数的装饰器、多个装饰器装饰一个函数
- 22_装饰器、带参数的装饰器、多个装饰器装饰一个函数
- Python练习笔记——编写一个装饰器,测算出一个函数的运行时间
- python----多个装饰器装饰一个函数
- python 9-1 如何使用函数装饰器,定义函数装饰器,用来生成一个原函数基础添加新功能的函数,替代原函数
- 如何用python的装饰器定义一个像C++一样的强类型函数
- python 对一个函数应用多个装饰器
- 一个简单的装饰器算出函数运行时间
- Python中利用函数装饰器实现备忘功能
- 如何在一个函数内修改一个全局变量
- es6中箭头函数学习的一个记录
- 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
- 无法把指针变量本身传递给一个函数的解决方法
- 判断ShellExecute函数是否执行完一个程序的方法
- SQL函数 将一个字段分隔成一个表的函数【搜藏】
- VC++ ShellExecute 执行、运行一个外部程序函数功能详解:
- asp下的一个检测链接是否正常的函数
- 写一个函数,参数为$n,生成一个数组,其元素为1~$n,各元素位置随机排列,不得重复