Python中的装饰器的简单介绍01
一. 装饰器是什么?
简单来说,装饰器其实也就是一个函数,一个用来包装函数的函数,返回一个修改之后的函数对象,将其重新赋值原来的标识符,并永久丧失对原始函数对象的访问。
二.装饰器语法
(1)无参数装饰器
def deco(func):
print (func)
return func
@deco
def foo():
pass
foo()
第一个函数deco是装饰函数,它的参数就是被装饰的函数对象。我们可以在deco函数内对传入的函数对象做一番“装饰”,然后返回这个对象(记住一定要返回 ,不然外面调用foo的地方将会无函数可用。实际上此时foo=deco(foo)
下面是一个简单的例子,检查函数有没有说明文档:
def deco_functionNeedDoc(func):
if func.__doc__ == None :
print (func.__name__, "has no __doc__, it's a bad habit.")
else:
print (func.__name__, ':', func.__doc__, '.')
return func
@deco_functionNeedDoc
def f():
print ('f() Do something')
@deco_functionNeedDoc
def g():
'I have a __doc__'
print ('g() Do something')
f()
g() #输出如下
#f has no __doc__, it's a bad habit.
#g : I have a __doc__ .
#f() Do something
#g() Do something
#[Finished in 0.2s]
(2)有参数装饰器
不使用装饰器的实现代码:
import time
import datetime def outter(func):
def inner(args):
start=datetime.datetime.now()
func(args)
end=datetime.datetime.now()
cost=end-start print("execute %s spend %s"%(func.__name__,cost.total_seconds()))
return (inner) def func2(args):
time.sleep(args) f=outter(func2)
f(1) #输出如下:
#execute func2 spend 1.014
#[Finished in 1.2s]
使用装饰器的代码实现如下:
import time
import datetime
import functools def outter(func):
@functools.wraps(func)
def inner(*args,**kwargs):
'''This is inner'''
start=datetime.datetime.now()
func(*args,**kwargs)
end=datetime.datetime.now()
cost=end-start print("execute %s spend %s"%(func.__name__,cost.total_seconds()))
return (inner) @outter
def func2(args):
'''This is func2'''
time.sleep(args) @outter
def func3(m,n):
'''This is func3'''
print("m+n={0}".format(m+n)) func2(1)
print(func2.__name__)
print(func2.__doc__) func3(m=2,n=3)
print(func3.__name__)
print(func3.__doc__) #加了@functools.wraps(func)装饰器的输出结果
# execute func2 spend 1.000413
# func2
# This is func2
# m+n=5
# execute func3 spend 0.0
# func3
# This is func3
# [Finished in 1.2s] #不加@functools.wraps(func)装饰器的输出结果 # execute func2 spend 1.000413
# inner
# This is inner
# m+n=5
# execute func3 spend 0.0
# inner
# This is inner
# [Finished in 1.2s]
Python中的装饰器的简单介绍01的更多相关文章
- Python中的装饰器的简单介绍02
这篇博文转载自伯乐在线的12步轻松搞定python装饰器,重构成python3. 1. 函数 在python中,函数通过def关键字.函数名和可选的参数列表定义.通过return关键字返回值.我们举例 ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- python中@property装饰器的使用
目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...
- 【Python】python中的装饰器——@
对装饰器本来就一知半解的,今天终于弄清楚了,Python中的装饰器是对装饰者模式的很好运用,简化到骨子里了. python中为什么需要装饰器,看这里:http://www.cnblogs.com/hu ...
- Python 中实现装饰器时使用 @functools.wraps 的理由
Python 中使用装饰器对在运行期对函数进行一些外部功能的扩展.但是在使用过程中,由于装饰器的加入导致解释器认为函数本身发生了改变,在某些情况下——比如测试时——会导致一些问题.Python 通过 ...
- 写python中的装饰器
python中的装饰器主要用于在已有函数实现功能前附加需要输出的信息,下面将用实例展示我如何写装饰器. 首先分别尝试写装饰器装饰一个无参函数和一个有参函数(被装饰函数仅输出,无返回值情况下) def ...
- python中的装饰器decorator
python中的装饰器 装饰器是为了解决以下描述的问题而产生的方法 我们在已有的函数代码的基础上,想要动态的为这个函数增加功能而又不改变原函数的代码 例如有三个函数: def f1(x): retur ...
- 三分钟搞定Python中的装饰器
python的装饰器是python的特色高级功能之一,言简意赅得说,其作用是在不改变其原有函数和类的定义的基础上,给他们增添新的功能. 装饰器存在的意义是什么呢?我们知道,在python中函数可以调用 ...
- 浅显易懂的谈一谈python中的装饰器!!
hello大家好~~我是稀里糊涂林老冷,一天天稀里糊涂的. 前一段时间学习了装饰器,觉着这东西好高大上哇靠!!哈哈,一定要总结一下,方便以后自己查阅,也希望帮助其他伙伴们共同进步! 装饰器: 大家可以 ...
随机推荐
- windows10系统下安装pygame
1.安装python,选择版本3.7.1 下载地址:https://www.python.org/downloads/windows/选择安装版本 2.安装pip 下载地址:https://pypi. ...
- protocol buffer 编码
protocol buffer能够跨平台提供轻量的序列化和反序列化,得益于其平台无关的编码格式,本文就介绍下其中的编码格式. Varints 在protocol buffer中大量使用到了Varint ...
- CSRF(Cross Site Request Forgery, 跨站域请求伪造)
CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...
- Solr入门介绍
solr入门案例 solr是apache下的一个全文检索引擎系统. 我们需要在服务器上单独去部署solr, 通过它的客户端工具包solrJ, 就是一个 jar包, 集成到我们项目中来调用服务器中 ...
- numpy 数组对象
numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange ...
- jquery easyui datagrid 将值作为img显示图片时报404 undefined
原因:datagrid 在请求到数据先进行头部数据和样式的渲染,之后数据 obj = {} value = undefined index = 0 进行一次渲染, 在没有formater情况将数据 ...
- 运行maven install命令时出现错误(BUILD FAILURE)
运行run as—>maven install时出现以下错误: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-com ...
- nginx 反向代理和正向代理功能 第六章
一:Nginx作为正向代理服务器: 1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代 ...
- D3生成树专题
这一天不知道怎的上课 竟然我说了两道题正解: 第一题:我写过一篇较详细的博客:https://www.cnblogs.com/Tyouchie/p/10366967.html 第二题:UVA10369 ...
- python 的运行方式和基础变量
机器语言:直接用计算机能听的懂得二进制去编写程序,需要了解硬件细节 优点:执行效率高 缺点:开发效率低汇编语言:用英文单词取代二进制指令去编写程序 优点:开发效率高于机器语言 缺点:执行效率低于机器语 ...