码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2018-06-14 18:19:52      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:一个   开放   span   rap   装饰器   fun   UNC   IV   添加   

# 装饰器:
# 开闭原则(开放封闭原则):对添加功能开放,对修改代码封闭

#举个例子,给一个函数,在不修改原来代码的基础上,添加新功能。
#无参数无返回值
def func():
    print(捏泥人,吹口气)
#装饰器 - 如果天气干燥,需要加水
def wrapper(fn):
    def inner():
        print(加水)
        fn()
    return inner #返回inner这个函数地址
# fun = wrapper(func) #inner这个函数地址
# fun() #调用inner函数
#但是我们不能把功能名字改了,所以
func = wrapper(func) # 我们还用原来的名字替换
func()

#有参数无返回值
def func(name,name1):
    print(你好,name,name1)

def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        fn(*args,**kwargs) #打散
        print(我想和你做朋友,args)
    return inner
func = wrapper(func) #inner
func(Tom,Jenny)

# 有参数有返回值
def func(name,name1):
    print(你好,name,name1)
    return name

def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        name = fn(*args,**kwargs) #打散 接收原函数的返回值
        print(我想和你做朋友,args)
        return name
    return inner
func = wrapper(func) #inner
print(func(Tom,Jenny)) #返回值为name


def wrapper(fn):
    def inner(*args,**kwargs): # 聚合
        name = fn(*args,**kwargs) #打散 接收原函数的返回值
        print(我想和你做朋友,args)
        return name
    return inner
@wrapper # 语法糖 相当于 func = wrapper(func)
def func(name,name1):
    print(你好,name,name1)
    return name

#总结
def wrapper(fn):
    def inner(*args,**kwargs):
        目标函数之前要做的操作
        re = fn(*args,**kwargs) re为返回值
        目标函数之后要做的操作
        return re
    return inner
在要用装饰器的函数前加上 @wrapper(语法糖)

 

装饰器

标签:一个   开放   span   rap   装饰器   fun   UNC   IV   添加   

原文地址:https://www.cnblogs.com/liangying666/p/9183446.html

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