zoukankan      html  css  js  c++  java
  • python基础十一之装饰器进阶

      函数的双下划线方法

    def hahahha():
        """测试函数"""
        print('zxc')
    print(hahahha.__name__)   # 打印函数的名字
    print(hahahha.__doc__)   # 打印函数中的注释

      wraps

      被装饰函数的名字在使用装饰器后名字对应的内存地址会发生变化,通过__name__打印的名字将不再是函数自身的名字,为了解决这个问题,就要用wraps

    from functools import wraps
    def func(fun):
        @wraps(fun)   # 使被装饰的函数的名字不发生变化
        def inner(*args, **kwargs):
            print('前面功能')
            ret = fun(*args, **kwargs)
            print('后面功能')
            return ret
        return inner
    @func
    def out():
        print('zxc')
    print(out.__name__)

        

      带参数的装饰器

    # 带参数的装饰器
    import time
    # FLAG = True
    FLAG = False
    
    
    def timmer_out(flag):
        def timmer(func):
            def inner(*args, **kwargs):
                if flag:
                    start = time.time()
                    ret = func(*args, **kwargs)
                    end = time.time()
                    print(end-start)
                    return ret
                else:
                    ret = func(*args, **kwargs)
                    return ret
            return inner
        return timmer
    
    # timmer_out(FLAG) 相当于timmer 所以@timmer_out(FLAG)就相当于@timmer
    
    
    @timmer_out(FLAG)
    def test():
        time.sleep(1)
        print('zxc')
    
    
    @timmer_out(FLAG)
    def test1():
        time.sleep(1)
        print('zxf')
    
    test()
    test1()
    View Code

      

      多个装饰器装饰一个函数

    # 多个装饰器装饰一个函数
    
    
    def wrapper1(f):
        def innner():
            print('wrapper1装饰的func之前')
            f()
            print('wrapper1装饰的func之后')
        return innner
    
    
    def wrapper2(f):
        def innner():
            print('wrapper2装饰的func之前')
            f()
            print('wrapper2装饰的func之后')
        return innner
    
    
    @wrapper2
    @wrapper1
    def func():
        print('func')
    func()
  • 相关阅读:
    python网络编程之 创建一个socketserverTCP服务器
    python网络编程 之udp通信
    python网络连接之tcp通信
    python socket编程 ,tcp,udp服务端客户端创建
    python网络编程(一)
    python3.5连接mysql
    mysql使用2 Mysql可视化工具Navicat for MySQL
    mysql使用
    mysql的初次使用,设置密码
    python 常用技巧 — 杂
  • 原文地址:https://www.cnblogs.com/zxc-Weblog/p/8145359.html
Copyright © 2011-2022 走看看