作者:吴业亮
博客:wuyeliang.blog.csdn.net
1、概述
在Python中,装饰器是一种用于修改函数或类行为的函数或类。它们可以在不修改原始函数或类定义的情况下,给它们添加额外的功能。装饰器以@符号开始,紧跟着装饰器函数或类的名称。
2、举例说明
1)、例如原代码为:
#!/bin/python3
# -*- coding: utf-8 -*-
# vi: set autoindent ts=4 expandtab :
#原代码
def fn_print():
print("这才是原代码主程序")
fn_print()
代码执行结果为:
这才是原代码主程序
2)、使用装饰器之后
#!/bin/python3
# -*- coding: utf-8 -*-
# vi: set autoindent ts=4 expandtab :
#定义装饰器
def decorator_fn(func):
def waper():
print("这个是代码执行前")
func()
print("代码执行后")
return waper
#引用装饰器
fn_print = decorator_fn(fn_print)
#原代码
def fn_print():
print("这才是原代码主程序")
fn_print()
在修改后的代码中,我们首先定义了装饰器函数decorator_fn
,接受一个函数作为参数,并返回另一个函数waper
。waper
函数在函数执行前后打印了消息。
然后,我们将fn_print
函数重新赋值为decorator_fn(hello)
。这样,当我们调用fn_print
函数时,实际上调用的是经过装饰器修饰后的waper
函数。
因此,运行修改后的代码后,输出结果与之前相比,在函数执行前后都会打印附加的消息。
执行结果为:
wuyeliang@Mac-mini python3-study % /usr/local/bin/python3 /Users/wuyeliang/wyl-data/code/python3-study/example-script/decorator.py
这个是代码执行前
这才是原代码主程序
代码执行后
3)、进一步简化
#!/bin/python3
# -*- coding: utf-8 -*-
# vi: set autoindent ts=4 expandtab :
"""在Python中,装饰器是一种用于修改函数或类行为的函数或类。它们可以在不修改原始函数或类定义的情况下,给它们添加额外的功能。装饰器以@符号开始,紧跟着装饰器函数或类的名称。
"""
#定义装饰器
def decorator_fn(func):
def waper():
print("这个是代码执行前")
func()
print("代码执行后")
return waper
#引用装饰器
@decorator_fn
#原代码
def fn_print():
print("这才是原代码主程序")
fn_print()
将fn_print = decorator_fn(fn_print)简化为@decorator_fn