码迷,mamicode.com
首页 > 编程语言 > 详细

python装饰器

时间:2018-12-14 21:06:08      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:return   目标   返回值   函数   nbsp   python装饰器   开发   div   def   

一.开闭原则

  对功能拓展的开放

    对代码修改的封闭           可以更好的维护和开发

二.装饰器

  1.个人理解:装饰器就是把原来需要修改的函数修改好,重新给赋值(赋值成原来的名字).名字一样功能增加,但是只能在之前或者之后加功能

   2.意义:

    在不破坏原有函数和原有函数调用的基础上,给函数添加新功能(python里的动态代理)

   3.通用装饰器的写法:

def warrper(fn):      # 调用目标函数
    def inner(*args,**kwargs):          # 在inner里加功能  接收到的是元组
        """在调用函数之前加入功能"""
        ret = fn(*args,**kwargs)     # ret 是接收目标函数的返回值   打散传给形参
        """在调用函数之后加入功能"""
        return ret     # 返回调用的目标函数返回值 保证函数正常结束
    return inner

@warrper       # 语法糖,等价于 target_fn = warrper(target_fn) 
def target_fn():
    pass

三.带参的装饰器

  1.带参的装饰器就是给装饰器加个开关,参数就是开关.

   2.带参装饰器写法:

def warrper_out(flag):    # 装饰器本身的参数
    def warrper(fn):     #目标函数
        def inner(*args,**kwargs):
            if flag == True:
                print("问问行情")
                ret = fn(*args,**kwargs)
                print("骗人")
                return ret
            else:
                ret = fn(*args, **kwargs)
                return ret
        return inner
    return warrper

@warrper_out(True)     # 语法糖   @装饰器
def yue():
    print("走 约")

yue()

四.多个装饰器修饰同一个函数

  多个装饰器修饰同一个函数取就近  一层一层

# def warpper0(fn):
#     def inner(*args,**kwargs):
#         print("111")
#         ret = fn(*args,**kwargs)
#         print("222")
#         return ret
#     return inner
#
# def warpper1(fn):
#     def inner(*args,**kwargs):
#         print("333")
#         ret = fn(*args,**kwargs)
#         print("444")
#         return ret
#     return inner
#
# def warpper2(fn):
#     def inner(*args,**kwargs):
#         print("555")
#         ret = fn(*args,**kwargs)
#         print("666")
#         return ret
#     return inner
#
#
#
# @warpper0     # 折返
# @warpper1
# @warpper2
# def func():
#     print("我是func")
#
# func()   # 0 1 2 func 2 1 0     先用2装饰 再用1 再用0  

  

 

python装饰器

标签:return   目标   返回值   函数   nbsp   python装饰器   开发   div   def   

原文地址:https://www.cnblogs.com/q767498226/p/10121381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!