Python笔记-函数装饰器的缺点
装饰器的好处,复用了代码,缺点就是原函数的元信息不见了
比如函数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笔记-函数装饰器的缺点相关推荐
- Python笔记-函数装饰器
在调用某个方法前,想调用一些额外的东西. 个人感觉就和C++里面,带一个函数指针的的参数,在某个函数执行前,调用这个函数指针,或者,在某个函数中,直接调用这个函数.比如插入日志等.功能. 但在pyth ...
- 初学者python笔记(装饰器、高阶函数、闭包)
一个函数被定义完成后,甚至程序发布后,后期可能需要添加某些功能,但是我们不可能每次都去修改原函数的代码,这时候装饰器就可以上场了,本篇文章将会用一个个可实现的代码,由浅入深.循序渐进得阐述装饰器的强大 ...
- 初学者python笔记(装饰器后篇:登陆验证)
装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器. 上一篇文章:初学者python笔记(装饰器.高阶函数.闭包)已经非常详细的剖析了装饰器 ...
- python中tracer函数意思_浅析Python编写函数装饰器
本节主要介绍编写函数装饰器的相关内容. 跟踪调用 如下代码定义并应用一个函数装饰器,来统计对装饰的函数的调用次数,并且针对每一次调用打印跟踪信息. 这是一个通过类装饰的语法写成的装饰器,测试如下: 运 ...
- Python笔记-类装饰器
使用类装饰器还可以依靠类内部的__call__方法,但使用@形式将装饰器附加到函数上时,就会调用此方法. 如下代码: class Foo(object):def __init__(self, func ...
- python 笔记:装饰器
1 装饰器介绍 如果有一批函数都是需要前置或者后置的工作,那么我们可以统一使用装饰器进行修饰. 1.1 不用装饰器的版本 def decorator(fn, name):print("I'm ...
- python 闭包_一起看流畅的python:函数装饰器和闭包
装饰器 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数).装 饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个 函数或可调用对象. 装饰器的一个关键特性是,它们在被装饰的函数定义 ...
- python 匿名函数装饰器
匿名函数 关键字lambda表示匿名函数,冒号前面的x表示函数参数 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. >>> list(map( ...
- python装饰器函数-Python函数装饰器指南
Python 具有强大的功能和富有表现力的语法.我最喜欢的装饰之一.在设计模式的上下文中,装饰器动态更改方法或类功能,而不必直接使用子类.当您需要扩展功能,但不想修改原函数时,这是理想的选择.我们可以 ...
最新文章
- EditText和TextView出现中文、英文等string串的排版问题
- MySQL日期及时间加减函数
- 快速游戏开发工具GameMaker,Action Game Maker使用体验
- Inside dependency property
- uva 1347——Tour
- java 变量初始化_浅谈Java变量的初始化顺序详解
- visual studio 判断dropdownlist选的是什么_心理测试:五个小蓝人,你选哪个?测你是不是一个容易追求的人...
- python 输入一个列表s和一个由二元组成的列表p_re --- 正则表达式操作 — Python 3.9.1 文档...
- 【BZOJ4149】[AMPPZ2014]Global Warming 单调栈+RMQ+二分
- SPSS中系统聚类操作案例
- WSL无法打开或者卡死
- 基于vc的数字图像分割——基于阙值的分割方法
- Java胖老鼠的交易
- JQuery插件Validation的使用-遁地龙卷风
- C语言入门——递归(思想简要讲解+简单递归练习)
- JAVA:实现简单的人员管理系统
- 项目与团队如何进行管理
- 如何将base64图片转化为URL格式
- Qt雨田哥的斗图神器
- 工业机器视觉的应用及发展