python装饰器

创建虚拟环境,以方便管理

ぃ、小莉子 提交于 2019-12-05 17:43:21
人生苦短,我用Python(目录) 目录 一、计算机基础 二、Python基础 三、函数 四、常用模块 五、模块和包 六、面向对象 七、网络编程socket 八、数据库 九、前端 十、Python Web框架 十一、版本控制--GIT 十二、爬虫 十三、前端框架之VUE 十四、量化投资与Python 十五、算法 十六、设计模式 十七、restful framework 十八、linux基础 十九、权限管理 一、计算机基础 计算机基础知识 计算机的发展史及多道技术 计算机网路知识的简单介绍 二、Python基础 Python学习【第0篇】:window环境下安装Python2和Python3   Python学习【第1篇】:Python简介以及入门 Python学习【第2篇】:Python之数据类型 Python学习【补充篇】:Python之字符串切片 Python学习【第3篇】:Python之运算符 Python学习【第4篇】:Python之可变数据类型与不可变数据类型 Python学习【第5篇】:Python之字符编码问题 Python学习【第6篇】:Python之文件操作 Python学习【补充篇】:map函数和reduce函数的区别 三、Python之函数 Python学习【第7篇】:Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) Python学习【第7篇

Python进阶-III 函数装饰器(decorator)

[亡魂溺海] 提交于 2019-12-05 17:41:23
1、引入场景: 检查代码的运行时间 import time def func(): start = time.time() time.sleep(0.12) print('看看我运行了多长时间!') end = time.time() print('此段代码运行时长为:%s'%(end - start)) func() 如果有大量的函数要检查,这样加入代码太费功夫!考虑提取为一个函数,要检查时直接调用即可 def check_time(f): start = time.time() time.sleep(0.12) f() end = time.time() print('此段代码运行时长为:%s' % (end - start)) check_time(func) 还是有问题,有人嫌每次都去调用该函数很麻烦!能不能,在不修改要测试远行时长的函数的调用方式前提下,还想在原来的函数前后添加测试时长功能? def timing(f): # 装饰器函数 def inner(): start = time.time() time.sleep(0.12) f() # 被装饰函数 end = time.time() print('此段代码运行时长为:%s' % (end - start)) return inner func = timing(func) func()

python装饰器,小例子

走远了吗. 提交于 2019-12-05 16:20:51
python装饰器的作用就是在不想改变原函数代码的情况下,增加新的功能.主要应用了python闭包的概念,现在用1个小例子说明 import time def foo(): time.sleep(1) def bar(): time.sleep(2) def show_time(f): def inner(): start_time = time.time() f() end_time = time.time() print(end_time-start_time) return inner #show_time(f) is a decoration function foo = show_time(foo) bar = show_time(bar) foo() bar() 上面的代码定义了两个函数foo()和bar(). 通过装饰器函数show_time(f),在其内部定义了另一个闭包函数inner(),再通过foo=show_time(foo),bar=show_time(bar)语句将foo()和bar()函数同装饰器函数关联起来,从而实现了不改变foo()和bar()函数代码,增加打印程序执行时间的功能.程序的执行结果如下: 1.0011370182 2.00142788887 显然,程序在没有改变原函数的情况下,实现了调用原函数显示程序运行时间的功能. 来源: https

Python装饰器使用方法总结(一)

谁说我不能喝 提交于 2019-12-05 12:23:07
Python装饰器简单的讲就是在不改变原函数或者类的情况下,对原函数或类的扩展新功能的一种函数,这种函数特殊之处在于它的返回值是个函数,这个函数是内嵌原函数的函数。 对于一般的函数,要想扩展函数的功能,最直接的方式是修改函数的代码,例如: 定义一个函数f(): 1 import time 2 def f(): 3 print("hello") 4 time.sleep(1) 5 print("world") 为了统计该函数的运行时间可以修改代码为: import time def f(): start_time = time.time() print("hello") time.sleep(1) print("world") end_time = time.time() execution_time = (end_time-start_time)*1000 print("time is %d ms"%execution_time) 这样就可以对函数f()实现该功能,但是这样就需要修改函数f()的代码了,若是需要统计很多函数的运行时间的话,那么这个工作量就太大了,当然也可以通过定义新的函数g(),将函数f()以形参传递进去,然后在函数g()内部统计时间,比如: def g(f): start_time = time.time() f() end_time = time.time()

python中的装饰器理解

孤街浪徒 提交于 2019-12-05 08:39:45
python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。 这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。 之前拓展函数的做法是侵入原函数进行拓展修改,例如: 原始函数: import time def f(): print ( "hello" ) time.sleep( 1 ) print ( "python" )   修改为记录下这个函数执行的总时间,改动原来的代码: import time def f(): begintime = time.time() print("hello") time.sleep(1)    print("python") endtime = time.time() totaltime = (endtime - begintime )*1000 print("time is %d ms" %totaltime ) 使用闭包函数的用法如下: import time def test(func):   begintime = time.time()   f()   endtime = time.time()   totaltime = (endtime - begintime) * 1000   print("执行时间:

函数的基本操作

允我心安 提交于 2019-12-05 06:45:52
自学函数的笔记整理 函数与函数式编程 编程方法: 1、面向对象 -->类 -->class(关键字) 2、面向过程 -->过程 -->def(关键字) 3、函数式编程 -->函数 -->def(关键字) python:非纯函数式编程,也是面向对象的(最火) 定义函数和定义过程的区别: 过程即为没有返回值的函数 1 # 定义函数 2 def func1(): 3 print('in the func1') 4 return 0 5 # 定义过程 6 def func2(): 7 print('in the func2') 8 9 x = func1() # x接收返回值0 10 y = func2() # y接收返回值空(python中给出了隐式返回值None) 11 print(x, y) # 0 None 区别 1 def test(x): 2 ''' 3 文档描述 4 :param x: 5 :return: 6 ''' 7 # 函数体(逻辑) 8 x += 1 9 # 定义返回值,终止函数的运行 10 return x 函数结构 1 import time 2 def test(): 3 ''' 4 文档描述 5 :param x: 6 :return: 7 ''' 8 # 函数体(逻辑) 9 time_format = '%Y-%m-%d %X' # X:时分秒 10

Python函数装饰器原理与用法详解《摘》

半城伤御伤魂 提交于 2019-12-05 05:04:54
本文实例讲述了Python函数装饰器原理与用法。分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 严格来说,装饰器只是语法糖,装饰器是可调用的对象,可以像常规的可调用对象那样调用,特殊的地方是装饰器的参数是一个函数。 import time #遵守开放封闭原则 def foo(): start = time.time() # print(start) # 1504698634.0291758从1970年1月1号到现在的秒数,那年Unix诞生 time.sleep(3) end = time.time() print('spend %s'%(end - start)) foo() bar()、bar2()也有类似的需求,怎么做?再在bar函数里调用时间函数?这样就造成大量雷同的代码,为了减少重复写代码,我们可以这样做,重新定义一个函数:专门设定时间: import time def show_time(func):

Python魔术方法

我与影子孤独终老i 提交于 2019-12-05 04:58:51
------------恢复内容开始------------ 特殊属性 __name__:类,函数,方法等的名字。(实例没有) __module__:类定义所在的模块名(test1.py,test2.py就是两个不同的module) __class__:对象或类所属的类 __bases__:类的基类的元组,顺序为它们在基类列表中出现的顺序。 __doc__:类,函数的文档字符串,如果没有则为None __mro__:类的mro,class.mro()返回的结果保存在__mro__中。多继承中,非常重要。 __dict__类或实例的属性,可写的字典。 查看属性 __dir__:返回类或者对象的所有成员名称列表,dir()函数就是调用__dir__()。如果提供__dir_(),则返回属性的列表,否则会尽量从__dict__属性中收集信息。 如果dir(【obj】)参数obj包含方法__dir__(),该方法将被调用。如果参数obj不包含__dir__(),该方法将最大限度的收集参数信息。 dir()对于不同类型的对象具有不同的行为: 如果对象是模块对象,返回的列表包含模块的属性名。 如果对象是类型或者类对象,返回的列表包含类的属性名,及它的基类的属性名。 否则,返回列表包含对象的属性名,它的类的属性名和类的基类的属性名。 #animal.py class Animal: x =

python之装饰器强制函数上的类型检查

强颜欢笑 提交于 2019-12-05 04:27:07
问题:通过装饰器想对函数参数进行强制类型检查,并且指定所有参数类型,也可以指定部分参数类型 未装饰的函数: def spam(x, y, z=42): print(x,y,z) spam('hello',1) #hello 1 42 写装饰器前,运用到了inspect中的signature签名函数, signature()获取函数的参数签名信息 : sig = signature(spam) print(sig) #(x, y, z=42) print(type(sig.parameters['x'].name)) #<class 'str'> print(type(sig.parameters)) #<class 'mappingproxy'> print(sig.parameters.items()) #odict_items([('x', <Parameter "x">), ('y', <Parameter "y">), ('z', <Parameter "z=42">)]) bind_partial() 方法来执行从指定类型到名称的部分绑定: bound_types = sig.bind_partial(int,str,z=int) #允许忽略任何参数(int,z=int) print(bound_types) #<BoundArguments (x=<class 'int

总复习知识点day18

和自甴很熟 提交于 2019-12-05 02:09:54
总复习: 1.计算机核心组件: - CPU - 内存 - 硬盘 - 输入设备: 键盘、鼠标 - 输出设备: 显示器、音响.. 2.python解释器: - 将人类编写好的代码转成机器能看得懂的字符。 - 解释器的作用: 帮你执行python代码。 3.pycharm编辑器: - 编辑器的作用: 可以更好的编写python代码,编辑器内部有很多强大的功能。 能够快速编写代码。 4.编程语言分类: - 机器语言(机器能直接看懂): 比如: 01010101 - 汇编语言(让人能看懂一点点): 比如: a ---> 01101001 - 高级语言(让人类能直接看懂): 比如: print('hello') 高级语言是更接近于人类的语言。 - 解释型: 一遍解释(翻译)一遍执行, 类似于同声传译。 优点: 开发效率高 可跨平台,一份代码可以多个平台使用。 缺点: 执行效率相比于编译型低。 - 编译型: 先一次性编译然后再执行,类似于 "有道翻译"。 优点: 执行效率高。 稳定义 缺点: 开发效率相比于解释型语言要低。 不可跨平台。 - 解释型语言的种类: python: 10级别 c# : java: 8 php: 3 - 编译型语言的种类: C c++ go 5.变量: 变量指的是可变化的量。 - 变量名: 可以与变量值绑定关系,通过变量名可以访问变量值。 - 相当于身份证ID号 -