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)

  • 相关阅读:
    创建大顶堆
    大顶堆的实现
    二叉树的前序,中序,后序,层序实现
    链表实现多项式相加
    225. Implement Stack using Queues
    232. Implement Queue using Stacks
    JavaScript 实现队列操作
    Vue 路由守卫
    回文数 & {}[]() 符号判断

  • 原文地址:https://www.cnblogs.com/wj5633/p/7043956.html
Copyright © 2011-2022 走看看