zoukankan      html  css  js  c++  java
  • Python标准库--functools模块

    functools模块:管理函数的工具

    partial对象:包装原函数,提供默认值

    import functools
    # 原函数
    def myfunc(a, b=2):
        """Docstring for myfunc()."""
        print(' called myfunc with:', a, b)
        return
    # 输出函数
    def show_details(name, f, is_partial=False):
        print(name)
        print(f)
        if not is_partial:
            print(f.__name__)
        if is_partial:
            print(f.func)
            print(f.args)
            print(f.keywords)
        return
    
    # show_details('myfunc', myfunc)
    # myfunc('a', 3)
    
    p1 = functools.partial(myfunc, b=4)        # 包装后的函数
    show_details('partial with named', p1, True)
    p1('passing a')        # 调用包装后的函数
    p1('override b', b=5)

    复制原函数的属性到partial对象

    functools.update_wrapper(p1, myfunc)      # 注释掉这一行,运行报错
    print(p1.__name__)
    print(p1.__doc__)

    包装实例对象的函数

    class MyClass(object):
        def method(self, a, b=2):
            """Docstring for method()."""
            print(' called method with:', a, b)
            return
    
    o = MyClass()
    
    p1 = functools.partial(o.method, b=4)
    show_details('partial with named', p1, True)
    
    functools.update_wrapper(p1, o.method)
    print(p1.__name__)
    print(p1.__doc__)

    @functools.wraps 装饰器

    def simple_decorator(f):
        @functools.wraps(f)
        def decorated(a='decorated', b=1):
            print(a, b)
            f(a, b=b)
            return
    
        return decorated
    
    wrapped = simple_decorator(myfunc)
    print(wrapped.__name__)
    print(wrapped.__doc__)

    @functools.total_ordering

      为类添加富比较方法,类必须提供__eq__和另一个富比较方法

    @functools.cmp_to_key(cmp_obj)

  • 相关阅读:
    SpringMVC 使用JSR-303进行校验 @Valid
    Hibernate Tools生成注释
    大型网站架构演变和知识体系(转载)
    eclipse从数据库逆向生成Hibernate实体类
    性能测试公众号,欢迎你的加入~
    mysql使用druid监控配置
    (转)面试为什么需要了解JVM
    (转)什么是缓存击穿?
    Mysql推荐使用规范(转)
    java应用监控工具
  • 原文地址:https://www.cnblogs.com/wj5633/p/7043956.html
Copyright © 2011-2022 走看看