装饰器partial、update_wrapper、wraps作用以及如何使用
2017-11-15 12:30
513 查看
装饰器partial、update_wrapper、wraps作用以及如何使用
在讲解partial、update_wrapper、以及wraps之前需要了解下装饰器:装饰器在实现的时候,被修饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生比变化)。因此,为了不影响,python使用wraps来消除这样的副作用,因此,在我们写装饰器的时候,最好在实现之前加上wraps,它能保留原有函数的属性1. partial
有什么用?partial又叫偏函数。函数在执行的时候需要带上必要的参数,有些参数是执行之前就是可知的,这种情况下,一个函数有一个或者多个函数预先就能用上,以便函数能够更少的参数进行调用。
如何使用?
首先先定义一个函数
def add(x, y): return x + y
然后再利用partial对定义一个新的函数
add1 = partial(add, y=3) # 这里创建了一个新的函数
最后再调用add1
print add1(4) # 7 print add(x=4, y=9) # 13
2. update_wrapper
有什么用?update_wrapper这个函数的主要功能是负责copy原函数的一些属性,如moudle、name、doc、等,如果不加update_wrapper,那么被装饰器修饰的函数就会丢失其上面的一些属性信息
如何使用?
首先定义一个函数
def wrapper(f): def wrapper_function(*args, **kwargs): """这个是修饰函数""" return f(*args, **kwargs) update_wrapper(wrapper_function, f) # << 添加了这条语句 return wrapper_function
利用装饰器定义一个新的函数
@wrapper def wrapped(): """这个是被修饰的函数""" pass
最后输出被装饰器修饰的函数的信息
print(wrapped.__doc__) # 输出`这个是被修饰的函数` print(wrapped.__name__) # 输出`wrapped`
__doc__和
__name__属性已经是wrapped函数中的,当然,update_wrapper函数也对
__module__和
__dict__等属性进行了更改和更新
3. wraps
有什么作用?被装饰器修饰后的函数会编程另外一个函数,为了不受影响,利用wraps来消除这样的副作用,使它能够保持原函数的属性。
如何使用?
首先先定义一个函数
def wrapper(f): @wraps(f) def wrapper_function(*args, **kwargs): """这个是修饰函数""" return f(*args, **kwargs) return wrapper_function
利用装饰器定义一个新的函数
@wrapper def wrapped(): """这个是被修饰的函数 """ pass
最后输出被装饰器修饰的函数的信息
print(wrapped.__doc__) # 输出`这个是被修饰的函数` print(wrapped.__name__) # 输出`wrapped`
相关文章推荐
- ubuntu 手动更新源 以及使用sudo update与upgrade的作用及区别
- java中equals和==之间的区别?clone方法的作用,及其为什么要使用clone方法?如何使用clone复制对象?以及深克隆浅克隆
- java 中 log4j 的概念、作用以及如何使用
- composer update的错误使用以及如何更新composer.lock文件
- 【Linux】ubuntu的源(概念、如何使用、如何选择最优源、update与upgrade作用及区别)
- java 中 log4j 的概念、作用以及如何使用
- Atlas UpdatePanel使用技巧以及常见问题(转)
- 为何以及如何使用Netlink Socket ( Why and How to Use Netlink Socket)
- 您想知道如何在Access 2003中使用ON UPDATE CASCADE/ON DELETE CASCADE,ON UPDATE SET NULL/ ON DELETE SET NULL吗?
- 如何自定义类以及如何使用自定义类
- asp.net ajax UpdatePanel使用技巧以及常见问题
- 转载: asp.net ajax UpdatePanel使用技巧以及常见问题
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 什么是web services?它有什么作用,以及它如何实现?
- 什么是web services?它有什么作用,以及它如何实现?
- IE中伪类:hover的使用及BUG,以及如何在IE6中进行修正(CSS)
- 如何对动态创建控件进行验证以及在Ajax环境中的使用
- 如何以及何时使用sIFR
- 虚拟机VMare Workstation的使用,以及如何在虚拟Linux中访问Windows宿主文件,分区.(转载)
- 什么是web services?它有什么作用,以及它如何实现?