zoukankan      html  css  js  c++  java
  • python中 wraps 的作用

    这里使用两段代码比较加入wraps装饰器后,函数打印的结果对比:

    新建文件名:Testword
    代码1:不加wraps装饰器

    # coding=utf-8
    from functools import wraps   
    def my_decorator(func):    
    	def wrapper(*args, **kwargs):        
    		'''decorator'''        
    		print('Decorated function...')        
    		return func(*args, **kwargs)    
    	return wrapper   
    @my_decorator 
    def test():    
    	"""Testword"""     
    	print('Test function')
    print(test.__name__, test.__doc__)

    打印结果:

    wrapper decorator
    [Finished in 0.1s]


    代码2:加入wrapper函数后

    from functools import wraps   
    def my_decorator(func):    
    	@wraps(func)    
    	def wrapper(*args, **kwargs):        
    		'''decorator'''        
    		print('Decorated function...')        
    		return func(*args, **kwargs)    
    	return wrapper
    
    @my_decorator 
    def test():    
    	"""Testword"""     
    	print('Test function')
    print(test.__name__, test.__doc__)


    打印结果:

    test Testword
    [Finished in 0.1s]


    总结:
    因为当使用装饰器装饰一个函数时,函数本身就已经是一个新的函数;即函数名称或属性产生了变化。所以在python的functools模块中提供了 wraps 装饰函数来 确保原函数在使用装饰器时不改变自身的函数名及应有属性。
    所以在装饰器的编写中建议加入wraps确保被装饰的函数不会因装饰器带来异常情况。

    关注公众号 海量干货等你
  • 相关阅读:
    二分查找练习
    Linux中Buffer和Cache的区别
    c++设计模式之单例模式
    c++设计模式之工厂模式
    C++中内存泄漏的几种情况
    snprintf
    命名空间和模块化编程1
    避免内存泄漏
    静态对象强制类型转换
    副本构造器
  • 原文地址:https://www.cnblogs.com/sowhat1412/p/12734310.html
Copyright © 2011-2022 走看看