装饰器的好处,复用了代码,缺点就是原函数的元信息不见了

比如函数docstring、_name_、参数列表

如下代码:

def use_logging(level = "debug"):def decorator(func):def wrapper(*args, **kwargs):print("[%s]  %s is running" % (level, func.__name__))return func(*args, **kwargs)return wrapperreturn decoratordef bar1():print("i am bar1")def bar2():print("i am bar2")if __name__ == "__main__":#这里就是带参数的原形f = use_logging(level = "info")(bar1)f()print(f.__name__)print(f.__doc__)

程序运行截图如下:

这里想让他打印bar1。

这里要使用functools

如下代码:

import functools
def use_logging(level = "debug"):def decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):print("[%s]  %s is running" % (level, func.__name__))return func(*args, **kwargs)return wrapperreturn decoratordef bar1():print("i am bar1")def bar2():print("i am bar2")if __name__ == "__main__":#这里就是带参数的原形f = use_logging(level = "info")(bar1)f()print(f.__name__)print(f.__doc__)

运行截图如下:

Python笔记-函数装饰器的缺点相关推荐

  1. Python笔记-函数装饰器

    在调用某个方法前,想调用一些额外的东西. 个人感觉就和C++里面,带一个函数指针的的参数,在某个函数执行前,调用这个函数指针,或者,在某个函数中,直接调用这个函数.比如插入日志等.功能. 但在pyth ...

  2. 初学者python笔记(装饰器、高阶函数、闭包)

    一个函数被定义完成后,甚至程序发布后,后期可能需要添加某些功能,但是我们不可能每次都去修改原函数的代码,这时候装饰器就可以上场了,本篇文章将会用一个个可实现的代码,由浅入深.循序渐进得阐述装饰器的强大 ...

  3. 初学者python笔记(装饰器后篇:登陆验证)

    装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器. 上一篇文章:初学者python笔记(装饰器.高阶函数.闭包)已经非常详细的剖析了装饰器 ...

  4. python中tracer函数意思_浅析Python编写函数装饰器

    本节主要介绍编写函数装饰器的相关内容. 跟踪调用 如下代码定义并应用一个函数装饰器,来统计对装饰的函数的调用次数,并且针对每一次调用打印跟踪信息. 这是一个通过类装饰的语法写成的装饰器,测试如下: 运 ...

  5. Python笔记-类装饰器

    使用类装饰器还可以依靠类内部的__call__方法,但使用@形式将装饰器附加到函数上时,就会调用此方法. 如下代码: class Foo(object):def __init__(self, func ...

  6. python 笔记:装饰器

    1 装饰器介绍 如果有一批函数都是需要前置或者后置的工作,那么我们可以统一使用装饰器进行修饰. 1.1 不用装饰器的版本 def decorator(fn, name):print("I'm ...

  7. python 闭包_一起看流畅的python:函数装饰器和闭包

    装饰器 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数).装 饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个 函数或可调用对象. 装饰器的一个关键特性是,它们在被装饰的函数定义 ...

  8. python 匿名函数装饰器

    匿名函数 关键字lambda表示匿名函数,冒号前面的x表示函数参数 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. >>> list(map( ...

  9. python装饰器函数-Python函数装饰器指南

    Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...

最新文章

  1. EditText和TextView出现中文、英文等string串的排版问题
  2. MySQL日期及时间加减函数
  3. 快速游戏开发工具GameMaker,Action Game Maker使用体验
  4. Inside dependency property
  5. uva 1347——Tour
  6. java 变量初始化_浅谈Java变量的初始化顺序详解
  7. visual studio 判断dropdownlist选的是什么_心理测试:五个小蓝人,你选哪个?测你是不是一个容易追求的人...
  8. python 输入一个列表s和一个由二元组成的列表p_re --- 正则表达式操作 — Python 3.9.1 文档...
  9. 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
  10. SPSS中系统聚类操作案例
  11. WSL无法打开或者卡死
  12. 基于vc的数字图像分割——基于阙值的分割方法
  13. Java胖老鼠的交易
  14. JQuery插件Validation的使用-遁地龙卷风
  15. C语言入门——递归(思想简要讲解+简单递归练习)
  16. JAVA:实现简单的人员管理系统
  17. 项目与团队如何进行管理
  18. 如何将base64图片转化为URL格式
  19. Qt雨田哥的斗图神器
  20. 工业机器视觉的应用及发展

热门文章

  1. 【转】使用python进行多线程编程
  2. GridView去掉边框
  3. TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
  4. 【编程导航】这本小书,把常考算法题讲活了!
  5. Java华丽转身 —— GUI编程宝典
  6. 7种常见的数据分析基本思路,满足你职场95%的需求
  7. 如何隐藏win32 console application的console窗口
  8. 逼自己玩命学了3个多月,吃透了Python技术核心!分享给你
  9. java+数组+列举,Java基础-基础语法-数组
  10. java观察者_Java中的观察者模式