py装饰器DEMO

本文详细介绍了Python装饰器的四种类型:普通装饰器、带参数的装饰器、类装饰器以及带参数的装饰器,通过实例展示了它们的使用方式和功能,帮助读者深入理解Python装饰器的概念及其应用。
部署运行你感兴趣的模型镜像
# 装饰器

# 1、 普通装饰器
# 定义闭包
def func_out(func):
    def func_in():
        print(f'调用函数使用开始!')
        print(f'在调用前先修饰')
        func()
        print(f'在调用后修饰函数')

    return func_in

@func_out
def test ():
    print(f'测试函数')

test()

''' 返回结果:
    调用函数使用开始!
    在调用前先修饰
    测试函数
    在调用后修饰函数
'''

 带参数的修饰器


# 2、带参数的函数使用修饰器
def func_out(func):
    def func_in (*args, **kwargs):
         print(f'调用函数使用开始')
         print(f'元组参数打印:{args},字典参数打印:{kwargs}')
         res = func(*args, **kwargs)
         print(f'在调用后修饰函数')
         return res
    return func_in
@func_out
def test(a, b, c):
    print(f'带参数调用')


test(11, 2, 3)
''' 返回结果:
    调用函数使用开始
    元组参数打印:(11, 2, 3),字典参数打印:{}
    带参数调用
    在调用后修饰函数
'''

 类修饰器

# 3、类修饰符
class Test():
    __attr = '我是一个测试类'

    def __init__(self, func):
        self.__func = func

    # 当类修饰符的函数被调用时 (func_test())  就会执行__call__方法
    def __call__(self, *args, **kwargs):
        print(f'类装饰器被使用了 现在调用的函数名称是{self.__func}' )
        self.__func()
        print(f'调用结束')

@Test
def func_test():
    print(f'你好我尝试调用')

func_test()
''' 返回结果:
    类装饰器被使用了 现在调用的函数名称是<function func_test at 0x00000000003A6160> __main__
    你好我尝试调用
    调用结束
'''

 带参数的装饰器

# 4、带参数的装饰器
def func_flag (flag):
    def func_out(func):
        def func_in(*args, **kwargs):
            print(f'调用函数使用开始')
            if (flag == '+'):
                print(f' run + ')
            else :
                print(f' run ...')
            res = func()
            print(f"在调用后修饰函数")
            return res

        return func_in

    return  func_out

@func_flag('-')
def demo():
    print('带参数的装饰器')

demo()

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值