python装饰器

Python核心技术与实战

二次信任 提交于 2019-12-26 16:33:56
课程目录: 第00课、开篇词丨从工程的角度深入理解Python.rar 第01课、如何逐步突破,成为Python高手?.rar 第02课、Jupyter Notebook为什么是现代Python的必学技术?.rar 第03课、列表和元组,到底用哪一个?.rar 第04课、字典、集合,你真的了解吗?.rar 第05课、深入浅出字符串.rar 第06课、Python “黑箱”:输入与输出.rar 第07课、修炼基本功:条件与循环.rar 第08课、异常处理:如何提高程序的稳定性?.rar 第09课、不可或缺的自定义函数.rar 第10课、简约不简单的匿名函数.rar 第11课、面向对象(上):从生活中的类比说起.rar 第12课、面向对象(下):如何实现一个搜索引擎?.rar 第13课、搭建积木:Python 模块化.rar 第14课、答疑(一):列表和元组的内部实现是怎样的?.rar 第15课、Python对象的比较、拷贝.rar 第16课、值传递,引用传递or其他,Python里参数是如何传递的.rar 第17课、强大的装饰器.rar 第18课、[名师分享] metaclass,是潘多拉魔盒还是阿拉丁神灯?.rar 第19课、深入理解迭代器和生成器.rar 第20课、揭秘 Python 协程.rar 第21课、Python并发编程之Futures.rar 第22课

python 装饰器

五迷三道 提交于 2019-12-26 15:11:33
原文: http://docs.pythontab.com/interpy/decorators/your_first_decorator/ 你的第一个装饰器: 在上一个例子里,其实我们已经创建了一个装饰器!现在我们修改下上一个装饰器,并编写一个稍微更有用点的程序: 1 def a_new_decorator(a_func): 2 3 def wrapTheFunction(): 4 print("I am doing some boring work before executing a_func()") 5 6 a_func() 7 8 print("I am doing some boring work after executing a_func()") 9 10 return wrapTheFunction 11 12 def a_function_requiring_decoration(): 13 print("I am the function which needs some decoration to remove my foul smell") 14 15 a_function_requiring_decoration() 16 #outputs: "I am the function which needs some decoration to remove

python闭包&装饰器&偏函数

爱⌒轻易说出口 提交于 2019-12-26 09:53:48
什么是闭包? 首先还得从基本概念说起,什么是闭包呢?来看下维基上的解释: 在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。 上面提到了两个关键的地方: 自由变量和函数, 这两个关键稍后再说。还是得在赘述下“闭包”的意思,望文知意,可以形象的把它理解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹到处游荡。当然还得有个前提,这个包裹是被创建出来的。 在通过Python的语言介绍一下,一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量。 例子 def func(name): def inner_func(age): print 'name:', name, 'age:', age return inner_func bb = func('ken') bb(26) # name: ken age: 26 这里面调用func的时候就产生了一个闭包—

python用类实现装饰器

无人久伴 提交于 2019-12-25 18:49:09
一般实现python装饰器都是采用方法的模式,看起来有点复杂,模式如下: def send_msg_simple(url): def decorator(func): def wrapper(*args, **kw): func(*args, **kw) group_robot(url, "完毕:%s.%s" % (kw['db'], kw['table'])) return wrapper return decorator 但其实也可以采用类的方式,看起来逻辑更为清晰: class DecoratorTest(object): #定义一个类 def __init__(self,func): self.__func = func def __call__(self): #定义call方法,当直接调用类的时候,运行这里。 print('pre msg') self.__func() print('post msg') @DecoratorTest def test(): print('主函数体') if __name__=='__main__': test() 来源: https://www.cnblogs.com/wangbin2188/p/12098380.html

关于python学习路线

允我心安 提交于 2019-12-25 10:43:55
* Python进阶(目录/书籍/学习路线) 忘了从哪里转的了,没办法标记哦,实在不好意思... 目录 : ) 1. 简介 &helloworld& 开发环境配置 2. 基本语法:标识符 & 变量 & 运算符 3. 基本控制流 4. 基本数据结构 1- 列表 5. 基本数据结构 2- 元祖 6. 基本数据结构 3- 字典 7. 基本数据结构 4- 集合 5. 数字处理 A. 数字基础 B. 相关扩展模块 6. 字符串处理 A. 字符串基础 B. 格式化 C. 正则表达式 D. 编码相关 7. 文件处理 A. 文件基础 B. 相关模块 8. 异常处理 9. 时间处理及相关模块 10. 函数定义及参数传递 11. 内建函数 12. 模块和包 13. 面相对象 A. 基础 B. 类 C 魔术方法(方法运算符重载) 14. 函数式编程: A. 基础 B. 迭代器 C. 生成器 D. 装饰器 15.docstring 16.PyUnit 及调试 17. 垃圾回收 18. 设计模式 19. 元类 20.Pythonic 最佳实践 21. 性能最佳实践 22. 命令行编程 23. 多线程 24.Python 相关要求 25. 题目 & 学习路线 & 资源链接 PS: 目测搞完后有些多,不会按照顺序发,写完一章会同步更新到目录。 -20121005 有任何问题回复到这个页面吧

装饰器

淺唱寂寞╮ 提交于 2019-12-25 08:38:55
首先晒下在群里问询一个装饰器执行顺序的问题,如下: 你清楚这是怎么个执行顺序么?在刘大拿的Python群里,有老师帮我解答了这个顺序,我总结了下: 执行test( ),因为被装饰了,等价于dec1(dec2(test)) ( ) 装饰器就是将函数作为参数来传递 此时先执行装饰器dec2( ) test( )做为它的参数放进去 输出aaaa 读取函数dec2( )中的two( ) 因为没调用,所以没有任何输出值 继续执行dec2( )返回值two 此时装饰器dec2已执行完毕得到结果就是two 现在就相当于dec1(two) two作为参数放进了函数dec1( )里去执行 再执行装饰器 dec1( ) 输出1111 读取函数dec1( )中的one( ) 因为没调用,所以没有任何输出值 继续执行dec1( )返回值one 此时装饰器dec1已执行完毕 现在执行情况来看 就变成了 one( ) 那么one( )是谁?正好在 dec1( )里有定义one( )函数 就执行one( )函数去了 输出2222 继续执行下一条命令 即 a( ) a( )函数是谁?看到dec1(a)没,它是dec1( )函数的参数啊,那之前得出这个参数的,就是two啊 也就是执行a( )时候相当于 是two( ) two( ) 正好在dec2( )里有定义two( )函数,好吧我们去执行two ( )函数去

Python设计模式--装饰器模式

纵然是瞬间 提交于 2019-12-25 03:16:09
import time import math from functools import wraps class Decorator(object): def __init__(self, func): self.f = func def __call__(self, *args, **kwargs): start_time = time.time() result = self.f(*args, **kwargs) print(time.time() - start_time) return result def profiling_wrapper(f): @wraps(f) def wrapper(*args, **kwargs): start_time = time.time() result = f(*args, **kwargs) print("[func_name]: ", f.__name__+'\n' + "[use_time]: ", time.time() - start_time) return result return wrapper def profiling_all_class_methods(Cls): """装饰类中所有方法""" class ProfiledClass(object): def __init__(self, *args, *

python装饰器

我是研究僧i 提交于 2019-12-25 02:56:13
python装饰器 1.什么是装饰器 简单说就是在被装饰的函数前后增加新功能, 而不用修改函数内部结构和调用方式的特殊语法 def out(fun): def inner(): print('函数前新增功能...') fun() print('函数后新增功能...') return inner @out def test(): print('---test---') test() 输出 函数前新增功能... ---test--- 函数后新增功能... 此时的 @out 就是装饰器, 同时也可以看到装饰器只能在被修饰函数整体的前后[增加]功能, 而不能[修改]被装饰的函数的功能 2.装饰器的执行顺序 补充: 1.函数执行的顺序是由上自下,由右至左 2.函数名仅仅是一个变量而已 3. @out 等价于 test = out(test) 当执行到 @out 时,三个小步骤 向 out 函数传递被装饰函数的引用,并用 形参fun 指向此时变量 test 指向的函数引用 执行装饰器外层函数 out() ,获得内层变量 inner 指向的函数的引用 改变被装饰函数的指向,让此时变量 test 指向 inner 函数的引用 3.通用装饰器的基本结构 def out(fun): def inner(*args, **kwargs): print('函数前新增功能...') fun(*args, *

106页《Python进阶》中文版介绍分享

只谈情不闲聊 提交于 2019-12-25 01:46:42
1 前言 人生苦短,Python是岸。 近年来随着人工智能和机器学习的发展,Python大火,但其实Python并不是一门年轻的语言,早在1991年它就出现了。这门编程语言已经发展了多年,在可预见的未来也会继续保持它的地位。 如今是Python的世界,就连地产大亨潘石屹,做一个年岁已高的“外行人”,前不久也公开宣布自己要自学Python。 Python的优点和当前的主流性网上已经有很多文章写了,所以这里就不再赘述了。 小汤之前也在公众。-号 StrongerTang 底部菜单栏——“ 资料分享 ”子菜单特意分享了一套 Python入门到精通全套视频教程 ,供朋友们下载分享,收到了很好的反馈,还没有注意到的朋友可以前去获取。 因为分享,小汤也结识了很多朋友,所以会坚持分享下去,也希望有更多的朋友能在 StrongerTang 相遇。 有需要什么资料的朋友也可以直接在文章最后留言,小汤看到后会搜集一下,争取分享出来。然后其他朋友也可以分享一些资料处理。 但纯属知识分享,交流学习, 请勿用于任何商业用途 ,感谢理解。 今天给大家分享一本Python的相关书籍《 Python进阶 》,是《 Intermediate Python 》的中文译本,Intermediate Python这本书具有如下几个优点:简单、易读、易译。这些都不是重点,重点是:它是一本开脑洞的书

python装饰器的通俗理解

对着背影说爱祢 提交于 2019-12-25 00:40:33
在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Python装饰器的理解更加的透彻。在文中如有遗漏和不足,欢迎交流和指点。 允许转载并注明出处: http://blog.csdn.net/u013471155 很多人对装饰器难以理解,原因是由于以下三点内容没有搞清楚: 关于函数“变量”(或“变量”函数)的理解 关于高阶函数的理解 关于嵌套函数的理解 那么如果能对以上的问题一一攻破,同时遵循装饰器的基本原则,相信会对装饰器有个很好的理解的。那么我们先来看以下装饰器的目的及其原则。 1、装饰器 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足: 不能修改被装饰的函数的源代码 不能修改被装饰的函数的调用方式 满足1、2的情况下给程序增添功能 那么根据需求,同时满足了这三点原则,这才是我们的目的。因为,下面我们从解决这三点原则入手来理解装饰器。 等等,我要在需求之前先说装饰器的原则组成: < 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 > 这个式子是贯穿装饰器的灵魂所在! 2、需求的实现 假设有代码: improt