Python装饰器

作者:吴业亮
博客: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,接受一个函数作为参数,并返回另一个函数waperwaper函数在函数执行前后打印了消息。

然后,我们将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

你可能感兴趣的:(python,python,开发语言)