博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰器总结
阅读量:6336 次
发布时间:2019-06-22

本文共 1782 字,大约阅读时间需要 5 分钟。

# 装饰器的进阶

# functools.wraps
# 带参数的装饰器
# 多个装饰器装饰同一个函数
# 周末的作业
# 文件操作
# 字符串处理
# 输入输出
# 流程控制

# 装饰器

# 开发原则 : 开放封闭原则
# 装饰器的作用 :在不改变原函数的调用方式的情况下,在函数的前后添加功能
# 装饰器的本质 : 闭包函数

 

---------------------------------------------

第一种,最简单的装饰器:

def wrapper(func):    def inner(*args,**args):        print('在函数运行直线执行')        ret = func(*args,**args)      print('在函数运行之后执行')      return ret   return inner
@wrapperdef jack():    print('打印原函数')jack()

  

 第二种,带开关的装饰器

flag = Truedef all(flag):    def wa(func):        def inner(*args,**kwargs):            if flag:    #当flag=True 执行装饰器                print('******打印装饰器之前*******')                ret = func(*args,**kwargs)                return ret            else:  #当flag=Flase 不执行装饰器,直接返回被装饰函数                ret = func()                return ret        return inner    return wa@all(flag)def aa():    print('第一个函数')aa()@all(flag)def bb():    print('第二个函数')bb()

  

 两个装饰器函数同时装饰一个函数的结果

def wa1(func):    def inner1(*args,**kwargs):        print('前111111')        ret = func(*args,**kwargs)        print('后111111')        return ret    return inner1def wa2(func):    def inner2(*args,**kwargs):        print('前222222')        ret = func(*args,**kwargs)        print('后222222')        return ret    return inner2

运行结果如下:

前111111前222222执行原函数后222222后111111

  

装饰器之functools

from functools import wrapsdef wrapper(func):  #func = holiday    @wraps(func)    def inner(*args,**kwargs):        print('在被装饰的函数执行之前做的事')        ret = func(*args,**kwargs)        print('在被装饰的函数执行之后做的事')        return ret    return inner@wrapper   #holiday = wrapper(holiday)def holiday(day):    '''这是一个放假通知'''    print('全体放假%s天'%day)    return '好开心'print(holiday.__name__)print(holiday.__doc__)ret = holiday(3)   #innerprint(ret)

  

 

转载于:https://www.cnblogs.com/lhqlhq/p/10134672.html

你可能感兴趣的文章
专业程序员必知的技巧
查看>>
javascript 基础
查看>>
我的友情链接
查看>>
从Check Point 官网使用Google Chrome 下载补丁需要特别注意的地方
查看>>
我的友情链接
查看>>
vim 纵向编辑
查看>>
Vsftp精解之安装配置及原理(一)
查看>>
我的友情链接
查看>>
思科路由与交换系列--------NA系列
查看>>
FragmentPagerAdapter不能更新fragment的问题
查看>>
Zepto源码分析(1)——类型判断函数
查看>>
阿里AoneFlow分支管理模式-个人理解
查看>>
ajax demo
查看>>
Exchange2013之HTTP重定向
查看>>
方形,你还能坚持几年
查看>>
ajax: jquery post request
查看>>
LAMP环境下搭建discuz论坛
查看>>
运行程序时提示:Could not resize...No space left on device
查看>>
01前段一条龙-git仓库的建立
查看>>
我的程序员之路(一)
查看>>