zoukankan      html  css  js  c++  java
  • python functools.wraps functools.partial实例解析

    一:python functools.wraps 实例

    1. 未使用wraps的实例

    #!/usr/bin/env python
    # coding:utf-8
    def logged(func): def with_logging(*args, **kwargs): '''i am wraps's doc''' print func.__name__ + " was called" return func(*args, **kwargs) return with_logging @logged def f(x): """i am original doc""" return x + x * x print f.__name__ # 期望的是原本的名字f,结果换成了装饰器里的新函数的名字with_logging print f.__doc__ # 期望的是原本的注释,加了个装饰器成了新加装饰器里的注释了

    2. 使用了wraps的实例

    from functools import wraps
    
    
    def logged(func):
        @wraps(func)
        def with_logging(*args, **kwargs):
            '''i am wraps's doc'''
            print func.__name__ + " was called"
            return func(*args, **kwargs)
    
        return with_logging
    
    
    @logged
    def f(x):
        """i am original doc"""
        return x + x * x
    
    
    print f.__name__  # prints 'f'
    print f.__doc__  # prints 'i am original doc'

    二:python functools.partial 实例解读

    #!/usr/bin/env python
    # coding:utf-8
    
    from functools import partial
    
    # 函数在执行时,要带上所有必要的参数进行调用。但是,有时参数可以在函数被调用之前提前获知。这种情况下,
    # 一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。
    def add(a, b):
        return a+b
    add(4, 3)    # 普通执行函数的方式
    plus = partial(add, 10)    # 预先输入一部分参数10,
    plus(2)    # 再输入剩下的参数,超出少于都会报错;
    plus = partial(add, 10, 2)    # 预先输入所有参数
    plus()    # 不能再有入参了
    
    
    def add2(a, b, c=2):    # 有默认值的函数
        return a + b + c
    plus3 = partial(add2, 1)
    plus3(1, 2)
    partial(add2, 101)(1)
    
    
    def add3(*argv, **kwargs):    # 不限制入参
        return reduce(lambda x,y:x+y, argv)
    plus4 = partial(add3, 1, 2)
    plus4()
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    复合类型的声明——是int *p还是int* p
    指针
    引用
    变量声明和变量定义
    C++内置类型如何存放于计算机内存中
    C++的几种字符类型
    第四章 表达式
    ++i && i++
  • 原文地址:https://www.cnblogs.com/aaron-agu/p/7763048.html
Copyright © 2011-2022 走看看