Python无参装饰器
需求:想要在test_func函数前后执行一些代码
1.第一步(定义函数,将调用原函数,使用新函数替换)
def test_func():
return 'test_func'
def test_wrapper_func():
print 'before'
rt = test_func()
print 'after'
return rt
print test_wrapper_func()
2.第二步(原函数可以定义参数)
def test_func():
return 'test_func'
def test_wrapper_func(*args, **kwargs):
print 'before'
rt = test_func(*args, **kwargs)
print 'after'
return rt
print test_wrapper_func()
3.第三步(定义工厂函数,返回wapper函数)
def test_func():
return 'test_func'
def test_wrapper_func(*args, **kwargs):
print 'before'
rt = test_func(*args, **kwargs)
print 'after'
return rt
def test_wrapper():
return test_wrapper_func
test_wrapper_func_temp = test_wrapper()
print test_wrapper_func_temp == test_wrapper_func
print test_wrapper_func_temp()
print test_wrapper_func()
4.第四步(去掉共有的wapper函数,放在工厂函数内部)
def test_func():
return 'test_func'
def test_wrapper():
def wrapper(*args, **kwargs):
print 'before'
rt = test_func(*args, **kwargs)
print 'after'
return rt
return wrapper
test_wrapper_func = test_wrapper()
print test_wrapper_func()
5.第五步(可以为所有函数添加同一功能前后执行代码)
def test_func()
return 'test_func'
def test_wrapper(func):
def wrapper(*args, **kwargs):
print 'before'
rt = func(*args, **kwargs)
print 'after'
return rt
return wrapper
test_wrapper_func = test_wrapper(test_func)
print test_wrapper_func()
6.第六步(使用装饰器)
def test_wrapper(func):
def wrapper(*args, **kwargs):
print 'before'
rt = func(*args, **kwargs)
print 'after'
return rt
return wrapper
@test_wrapper
def test_func():
return 'test_func'
print test_func()
7.第七步(修正多个装饰器时,使用函数fun名称问题)
from functools import wraps
def test_wrapper(func):
@wraps(func)
def wrapper(*args, **kwargs):
print 'before'
rt = func(*args, **kwargs)
print 'after'
return rt
return wrapper
@test_wrapper
def test_func():
return 'test_func'
print test_func()
Python学习群:238757010
Python无参装饰器的更多相关文章
- python语法糖之有参装饰器、无参装饰器
python的装饰器简单来说就是函数的一种形式,是为了扩展原来的函数功能而设计的. 装饰器的特别之处在于它的返回值也是一个函数,可以在不改变原有函数代码的基础上添加新的功能 # 先定义一个函数及引用# ...
- PYTHON-有参装饰器,无参装饰器,语法糖
装饰器 装饰器就是闭包函数的一种应用场景 一 为何要用装饰器 #开放封闭原则:对修改封闭,对扩展开放 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强 ...
- day11有参装饰器,无参装饰器
今日内容 1.有参装饰器 2.无参装饰器 什么是装饰器? 用来为被装饰对象添加新功能的工具. 注:装饰器可以是任意可调用对象,被装饰对象也可以是任意可调用对象. 为何要用装饰器? 开放封闭原则:对修改 ...
- python 有参装饰器与迭代器
1.有参装饰器 模板: def auth(x): def deco(func): def timmer(*args,**kwargs ): res = func(*args,**kwargs ) re ...
- python带参装饰器的改良版
简单点就是这种 def deco2(param=1): def _deco2(fun): def __deco2(*args, **kwargs): print (param) fun(*args, ...
- python函数之闭包函数与无参装饰器
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...
- Python练习-无参装饰器的正确打开方式
import time def DecoUserPrint(UserFunc):#定义一个DecoUserPrint接收参数的多重方法 def DecoPrint(): StartTime = tim ...
- python中的无参装饰器和有参装饰器
python中的无参装饰器和有参装饰器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 装饰器特点: 1>.开放封闭原则,即对扩展是开放的,对修改时封闭的: 2>.装饰器 ...
- python基础语法8 叠加装饰器,有参装饰器,wraps补充,迭代器
叠加装饰器: 叠加装饰器 - 每一个新的功能都应该写一个新的装饰器 - 否则会导致,代码冗余,结构不清晰,可扩展性差 在同一个被装饰对象中,添加多个装饰器,并执行. @装饰1 @装饰2 @装饰3 de ...
随机推荐
- 关于cocos2dx的textfield事件响应
time:2015/08/27 1. textfiled cocostudio的输入框,看源代码知道他是直接继承widget的,但是真正的输入框功能是label实现的,是Textfield类的一个成员 ...
- centos7.4应用之KVM
最小安装系统: 参考博客:https://www.cnblogs.com/chenjiahe/p/5911965.html 辅助命令 yum install make bison flex autom ...
- Centos7 教程收集ing
CentOS7 常用命令集合 https://blog.csdn.net/o0darknessyy0o/article/details/52072054#t1 1.centOS7下实践查询版本/CPU ...
- 【收集】Python 微优化
1. 第二种方式可以节省寻找result的append属性的时间, 但会降低代码可读性和可维护性 # The way we're used to seeing it: result.append(&q ...
- Java设计模式16:常用设计模式之观察者模式(行为型模式)
1. Java之观察者模式(Observer Pattern) (1)概述: 生活中我们在使用新闻app,当我们对某一栏比较感兴趣,我们往往会订阅这栏新闻,比如我对军事栏感兴趣,我就会订阅军事栏的新闻 ...
- wk_06.md
IO与文件操作 文件内建函数open 内建函数open提供了初始化输入/输出(I/O)操作的通用接口.open()内建函数成功打开文件后会返回一个文件对象.open函数的语法如下: open(file ...
- python第十七课——列表生成式
1.列表生成式: 什么是列表生成式? 它就是一串表达式,专门用于生成列表对象,当中包含一系列的业务逻辑: 结构:简介.优雅.阅读性好:比传统获取列表对象来的更加的方便: 它是语法糖的一种: 什么是语法 ...
- [Java123]Gradle
https://dzone.com/articles/gradle-vs-maven https://docs.gradle.org/current/userguide/what_is_gradle. ...
- c++问题整理
1.C++ 多态,多态的实现,c++虚函数,虚函数和纯虚函数有什么区别,虚函数的实现原理,虚继承,析构函数能否为虚,为什么析构要虚函数,析构函数声明为虚函数的作用,构造函数为啥不能定义为虚函数,析构函 ...
- Vue2.5开发去哪儿网App 从零基础入门到实战项目
第1章 课程介绍本章主要介绍课程的知识大纲,学习前提,讲授方式及预期收获. 1-1 课程简介 试看第2章 Vue 起步本章将快速讲解部分 Vue 基础语法,通过 TodoList 功能的编写,在熟悉基 ...