[py]py装饰器原理

算是py语言的个特性功能吧. 其他js还没接触到有没有这个功能

py装饰器

主要亮点: 在不修改现有函数的功能要求下,丰富现有函数功能.

背景:

  • 底层函数已经写好
  • 上层接口开发组调用底层函数
  • 上层开发人员希望底层多输出一句话

底层函数

  • 特别多
  • 要求给每个函数增加多输出一句话
  • 而且这个需求不稳定,后期可能删
  • 如果一个个改动函数,工作量大,不容易维护
def f1():
    print("f1 func")

def f2():
    print("f2 func")

def f3():
    print("f3 func")

def f4():
    print("f4 func")

def f5():
    print("f5 func")
...
特别多

通过装饰器来改

  • 实现了功能,但不知道原理
#!/usr/bin/env python
# coding=utf-8



def outer(func):
    def inner():
        print("hello")
        print("hello")
        r= func()
        print("end....")
        return r
    return inner


@outer
def f1():
    print("f1 fun")
f1()
print("-"*40)
@outer
def f2():
    print("f2 fun")
f2()

前期想办法解决

def printhello():
    print("hell world")

def f1():
    printhello()
    print("f1 func")
...

使用装饰器

@outer
  • 1,执行outer函数,并且将其下面的函数名,当作参数f1(outer)
  • 2,将outer的返回值重新给f1=outer的返回值
  • 新f1函数=inner
#!/usr/bin/env python
# coding=utf-8



def outer(func):
    # func = 原来的f1函数
    # return lambda: 123
    def inner():
        print("hello")
        print("hello")
        r= func()  # 执行原f1
        print("end....")
        return r  # 还是原f1的返回值
    return inner


@outer
def f1():
    print("f1 fun")
f1()
print("-"*40)
@outer
def f2():
    print("f2 fun")
f2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值