• python_装饰器


    def func(arg):
        def inner():
            print('before')
            v = arg()
            print('after')
            return v
        return inner
    # 第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
    # 第二步:将func的返回值重新赋值给下面的函数名。index = func(index)
    @func
    def index():
        print('123')
        return '666'
    
    print(index())

    目的:在不改变原函数的基础上,再函数执行前后自定义功能。

    编写装饰器:

    # 装饰器的编写
    def x(func):
        def y():
            ret =func()
            return ret
        return y
    # 装饰器的应用
    @x
    def index():
        pass
    # 装饰器的应用
    @x
    def manage():
        pass
    
    # 执行函数,自动触发装饰器
    v = index()
    print(v)

    应用场景:想要为函数扩展功能时,可以选择用装饰器。

    装饰器编写格式:

    def 外层函数(参数)
        def 内层函数(*args,**kwargs):
            return 参数(*args,**kwargs)
        return 内层函数

    装饰器应用的格式:

    @外层函数
    def index():
        pass
    
    index()

    为什么要加*args和**kwargs?

      接收原函数传递的值。

    带参数的装饰器!

    # 第一步:执行v1 = uuu(9)
    # 第二步:ret = v1(index)
    # 第三步:index = ret
    @uuu(9)
    def index():
        pass

    实例:装饰器执行N次

    # 带参数的装饰器
    def x(counter):
        def wrapper(func):
            def inner(*args,**kwargs):
                print('调用函数之前')
                v = []
                # 函数执行N次
                for i in range(counter):
                    data = func(*args,**kwargs) # 执行原函数并获取返回值
                    v.append(data)
                print('调用函数之后')
                return v
            return inner
        return wrapper
    
    # 第一步:执行v1 = uuu(9)
    # 第二步:ret = v1(index)
    # 第三步:index = ret
    @x(9)
    def index():
        return 1
    
    result = index()
    print(result)
  • 相关阅读:
    FreeCodeCamp:Chunky Monkey
    FreeCodeCamp:Slasher Flick
    FreeCodeCamp:Truncate a string
    FreeCodecamp:Repeat a string repeat a string
    FreeCodeCamp:Confirm the Ending
    FreeCodeCamp:Return Largest Numbers in Arrays
    FreeCodeCamp:Title Case a Sentence
    git和GItHub的区别
    dedecms简介
    html 7大知识点
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/11512700.html
Copyright © 2020-2023  润新知