zoukankan      html  css  js  c++  java
  • python 修改的函数装饰器

    把好的代码记录下来 方便以后学习

     修改的函数参数装饰器

    from functools import wraps
    import time
    import logging
    def warn(timeout):
        #timeout=[timeout]  python 2.x
        def decorator(func):
            def wrapper(*args,**kargs):
                start = time.time()
                res = func(*args,**kargs)
                used = time.time()-start
                #if(used > timeout[0]):  python 2.x
                if(used > timeout):
                    msg = '"%s":"%s" > %s' % (func.__name__,used,timeout)
                    logging.warn(msg)
                return res
            def setTimeOut(k):
                nonlocal timeout
                timeout = k
                #timeout[0] = k    python 2.x
            wrapper.setTimeOut = setTimeOut
            return wrapper
        return decorator
    
    from random import randint
    @warn(1.5)
    def test():
        print('in test')
        while randint(0,1):
            time.sleep(0.5)
    
    for _ in range(30):
        test()
    test.setTimeOut(1)
    for _ in range(30):
        test()

     检测带参数类型的函数装饰器

    from inspect import signature
    def typeassert(*ty_args,**ty_kargs):
        def decorator(func):
            sig = signature(func)
            btypes = sig.bind_partial(*ty_args,**ty_kargs).arguments
            def wrapper(*args,**kargs):
                for name,obj in sig.bind_partial(*args,**kargs).arguments.items():
                    if name  in btypes:
                        if not isinstance(obj,btypes[name]):
                            raise TypeError("%s must be %s" % (name,btypes))
                return func(*args,**kargs)
            return wrapper
        return decorator
    
    @typeassert(int,str,list)
    def f(a,b,c):
        print(a,b,c)
    
    f(1,'abc',[1,2,3])
    f(1,2,[1,2,3])
  • 相关阅读:
    Standford 关于机器学习相关课程的网址
    EM算法
    如何禁止scrollView 的子控件自动滑到 底部或者中间部分
    进制表示
    MultiView空间例子
    TreeView控件例子
    FormView分页显示数据的例子
    DataList嵌套绑定例子
    在GridView中实现全选反选的例子
    ListBox控件例子
  • 原文地址:https://www.cnblogs.com/zz-952/p/10004335.html
Copyright © 2011-2022 走看看