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
  • 相关阅读:
    Qt多文档实现屏幕空间(类似监控多画面)效果
    python 使用ctypes调用C/C++ dll
    C++回调函数理解使用
    Qt MDI子窗口图标设置问题
    CentOS 7安装Qt5.12.1过程
    linux遇到xxx is not in the sudoers file.This incident will be reported的问题
    3D建模的类型:哪种最适合您的需求?
    letter-shell | 一个功能强大的嵌入式shell(转)
    EasyLogger | 一款轻量级且高性能的日志库(转)
    Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译(转)
  • 原文地址:https://www.cnblogs.com/pygg/p/8418773.html
Copyright © 2011-2022 走看看