zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器:在不改变原函数和原函数执行状态下,为函数增加功能

    万能装饰器:

    def wrapper(func):
        def inner():
            """执行函数之前的功能"""
            ret = func()
            """执行函数之后的功能"""
            return ret
        return inner
    @wrapper  #func = wrapper(func)
    def func():
        pass
    func()

     eval: 读取文本内容的时候,都是字符串,可以用eval转换一下,本身什么类型,就读出什么类型

    开放封闭原则:

    1、 对扩展是开放的

    2、 对修改是封闭的

    函数的有用信息:

    def f1():
        '''
        本函数的功能:绘图功能,实时接收数据并绘图.
        :return: 绘图需要的数据,返回给前端某标签
        '''
        print(f1.__doc__)            #打印注释
        print(f1.__name__)         #打印函数名字
    f1()
    #输出:

          本函数的功能:绘图功能,实时接收数据并绘图.
          :return: 绘图需要的数据,返回给前端某标签

              f1

    有装饰器的情况下打印有用信息:

    rom functools import wraps
    def wrapper(func):
        @wraps(func)
        def inner(*args,**kwargs):
            '''执行函数前进行的操作'''
            ret = func(*args,**kwargs)
            '''执行函数后进行的操作'''
            return ret
        return inner
    
    @wrapper
    def f1():
        '''
        本函数的功能:绘图功能,实时接收数据并绘图.
        :return: 绘图需要的数据,返回给前端某标签
        '''
        print(f1.__doc__)
        print(f1.__name__)
    f1()

    *args 和**kwargs:

    def wrapper(func):
        def inner(*args,**kwargs):
            '''执行函数前'''
            ret = func(*args,**kwargs)
            '''执行函数后'''
            return ret
        return inner
    
    @wrapper
    def func(a,b,c,d):      #接收函数时,加个*聚合
        print(111)    
    func(1,2,3,4)
    
    # f1(*[1,2,3,4])        #执行函数时,加个*打散

    带参数的装饰器:

     可以当作装饰器的开关

    import time
    flag = True                             #flag = True  则装饰,flag = Flag  则不装饰,只执行原函数 
    def timmer(f):
        def wrapper(func):
            def inner(*args,**kwargs):
                if f:
                    start_time = time.time()
                    ret = func(*args,**kwargs)
                    end_time = time.time()
                    print(end_time - start_time)
                    return ret
                else:
                    ret = func(*args, **kwargs)
                    return ret
            return inner
        return wrapper
    @timmer(flag)
    def func():
        print(123)
    func()

    一个装饰器装饰多个函数:

    def wrapper1(func):
        def inner1(*args,**kwargs):
            print(1)
            ret=func(*args,**kwargs)
            print(2)
            return ret
        return inner1
    def wrapper2(func):
        def inner2(*args,**kwargs):
            print(3)
            ret=func(*args,**kwargs)
            print(4)
            return ret
        return inner2
    
    @wrapper1
    @wrapper2
    def func():
        print(5)
    func()
    #输出:1   3   5   4    2
  • 相关阅读:
    (转载)_信息安全入门指南
    经历--比赛绿盟_安全研究员
    Python正则表达式操作指南
    web 安全学习
    2014-9-10中午睡觉的一个梦
    渗透工具学习
    CVE 2013-3897
    STL 学习
    设置chrome 可以保存mht网页
    合并windows7系统下的两个IE8浏览器进程
  • 原文地址:https://www.cnblogs.com/pygg/p/8418773.html
Copyright © 2011-2022 走看看