从一开始学习python的时候,就一直不是很理解装饰器是个什么东东,再看了很多篇博文和自己动手敲了好多代码后,算是略有了解。

我理解的装饰器是: 在不改变原有函数调用的情况下,对其进行包装,使其变成另外一种函数来使用,一般的用途是 插入日志、性能测试、事务处理等。def host_restrict(tags=[], names=[]):

def decorator(f):

@functools.wraps(f)

def decorated(*args, **kwargs):

host_info = hosts.get(env.host)

if not host_info:

return f(*args, **kwargs)

if tags and host_info[0] not in tags:

raise StandardError('Tag %s not in %s' % (host_info[0], tags))

if names and not set(names).intersection(

set([s for s in host_info[1].split(' ') if s.strip()])):

raise StandardError(

'Name %s not in %s' % (host_info[1], names))

return f(*args, **kwargs)

return decorated

return decorator

公司的这个装饰器是用来约束 用户输入的信息的。

特此记录装饰器的用法,把装饰器分为 有参数的装饰器、无参数的装饰器和functions模块。

1 无参数的装饰器def foo1(func):

def decorator():

print '一些列相关操作'

return func()

return decorator

2 有参数的装饰器

2.1 原函数带参数def foo1(func):

def decorator(*args,**kwargs):

print '一些列相关操作'

return func(*args,**kwargs)

return decorator

2.2 装饰器带参数# arg为装饰器的参数

def foo3(arg):

def decorator(func):

def decoratod(*args,**kwargs):

print '可以对arg进行判断,计算等相关操作'

return func(*args,**kwargs)

return decoratod

return decorator

3 functions 模块

这个装饰器能将装饰过的函数的特殊属性保留。一般在使用反射的使用会很有用。# arg为装饰器的参数

def foo4(arg):

def decorator(func):

@functools.wraps(func)

def decoratod(*args,**kwargs):

print '可以对 arg 进行一些判断等相关操作'

return func(*args,**kwargs)

return decoratod

return decorator

下面是参考资料,当初有不少地方没看明白,真正练习后才明白些:

我对python的理解_python之我对装饰器的理解相关推荐

  1. python装饰器与闭包_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。...

    转载:http://python.jobbole.com/81683/ 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需 ...

  2. python闭包和装饰器的区别_python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)。(转)...

    呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...

  3. python装饰器的通俗理解_Python|闭包、装饰器,简单的实例,通俗的理解

    闭包和装饰器都是属于函数的语法范畴,是在函数定义中以另一个函数做为形参的语法机制. 1 闭包(Closurer) 闭包是定义内部函数的一种语法规则,要理解闭包,请看下面的实例:def outer(t) ...

  4. python正则表达式生成器_Python学习之路-装饰器生成器正则表达式

    装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器,def login_decorator(fun ...

  5. python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...

    本篇随笔只是记录我对这三个装饰器的理解,可能会有不准确的地方,敬请指出. property装饰器 功能:通过property装饰器控制类的属性的绑定与获取,一般就是给某个属性增加一个验证类型等功能. ...

  6. python装饰器哪个好_[Python] 对 Python 装饰器的理解心得

    最近写一个py脚本来整理电脑中的文档,其中需要检校输入的字符,为了不使代码冗长,想到使用装饰器. 上网搜索有关python的装饰器学习文档,主要看的是AstralWind的一篇博文,以及Limodou ...

  7. python带参数的装饰器的作用_Python带参数的装饰器运行原理解析

    关于装饰器的理解,特别像<盗梦空间>中的进入梦境和从梦境出来的过程,一层一层的深入梦境,然后又一层一层的返回,被带入梦境的是被装饰的函数,装饰器就是使人入梦的工具. 上代码: from f ...

  8. python function at 0x00000_Python 中的函数装饰器和闭包

    本文是<流畅的Python>第7章的学习笔记. 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另 ...

  9. python进阶(小白也能看懂)——装饰器浅谈(一)

    python进阶(小白也能看懂)--装饰器(一) 第四篇 文章目录 python进阶(小白也能看懂)--装饰器(一) 1.函数基础知识 例子1.1 例子1.2 例子1.3 例子1.4 2.不带参数的装 ...

最新文章

  1. 控制程序仅执行一次 php,PHP流程控制(1)
  2. java.lang.NullPointerException 空指针异常问题
  3. 51单片机——My-Clock项目
  4. anaconda安装的TensorFlow版本没有model这个模块
  5. vc2010 mysql5.7_VC2010利用MySQL++访问mysql. 及连接池示例
  6. android退出app代码,Android应用退出代码各种方式
  7. 红橙Darren视频笔记 状态栏设置颜色 获取高度 设置全屏
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的客户关系管理系统
  9. mysqluuid去除横岗
  10. 固态硬盘安装记录之数据二次迁移
  11. Jib快速打包Docker镜像
  12. codewars题目
  13. html 怎么插入向上的箭头,如何在html中插入箭头?
  14. 世界首富用 AI 开除混吃混喝的“兄弟”
  15. ios iPhone的 自带输入法emoji编程
  16. 我,程序员,32岁失业后干啥都赔钱,月薪2万的好日子一去不返
  17. 基于ARM核心板实现的BMS可行性方案
  18. HanLP极致简繁转换详细讲解 1
  19. 学计算机的人掉头发吗,高校里容易“掉头发”的3个专业,为了防秃头,大家慎重报考!...
  20. 智能机器人的发展趋势是什么?

热门文章

  1. win7计算机文件夹打开慢,win7开机很慢怎么办 win7电脑开机慢的优化教程
  2. 华为云NP考试题库_阿里云ACP大数据及云计算经验感悟
  3. 单片机多大的ram才可以带动tft lcd_【单片机自学】7.液晶实验
  4. 引用和指针自增的不同
  5. cuSPARSE库:(十三)cusparseDestroySolveAnalysisInfo()
  6. Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
  7. win10调节屏幕分辨率导致黑屏
  8. axios, ajax和fetch的比较
  9. OpenCV之图像的遮挡与切分、合并(笔记06)
  10. mfc多线程编程实例_多线程技术的PLC与PC的通讯方式