这篇文章主要为大家详细介绍了python装饰器的简单示例,具有一定的参考价值,可以用来参考一下。

对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧!

装饰器的语法以@开头,接着是装饰器函数的名字、可选参数。

紧跟装饰器声明的是被装饰的函数和被装饰的函数的可选参数,如下:

@decorator(dec_opt_args)

def func(func_args):

....

其实总体说起来,装饰器其实也就是一个函数,一个用来包装函数的函数,装饰器在函数声明完成的时候被调用,调用之后声明的函数被换成一个被装饰器装饰过后的函数。

如:

# @param python基础 之 装饰器详解

# @author 512笔记|www.512pic.com

def deco(func):

...

return func

@deco

def foo():

print 'foo'

#-----------------------------------

#等价如下:

def deco(func):

...

return func

def foo():

print 'foo'

foo = deco(foo)

如下例子:

def deco1(func):

print 'ok'

return func

@deco1

def foo():

print 'foo'

foo()

#输出--------------

#ok

#foo

#------------------

# End www_512pic_com

如果不使用装饰器,则可如下:

# @param python基础 之 装饰器详解

# @author 512笔记|www.512pic.com

def deco1(func):

print 'ok'

return func

def foo():

print 'foo'

print foo #

foo = deco1(foo)

foo()

#输出--------------

#ok

#foo

#------------------

# End www_512pic_com

两者对比下,可发现使用装饰器是那么简便、灵活。特别是在企业级的开发上。

同时也可以多个装饰器重叠使用:

# @param python基础 之 装饰器详解

# @author 512笔记|www.512pic.com

def deco1(func):

print 'deco1'

return func

def deco2(func):

print 'deco2'

return func

@deco1

@deco2

def foo():

print 'foo'

foo()

#输出如下:-----------

#deco2

#deco1

#foo

#---------------------

# End www_512pic_com

等效于:

# @param python基础 之 装饰器详解

# @author 512笔记|www.512pic.com

@deco1

@deco2

def foo(arg):pass

-----------与下等效----------

foo = deco1(deco2(foo()))

# End www_512pic_com

二、有参、无参的装饰器

上面的例子基本上都是有参数的,无参数更为简单。

1、无参

@deco1

@deco2

def foo(arg):pass

---------------------

foo = deco1(deco2(foo()))

2、有参

@deco1(deco_arg)

@deco2

def foo(arg):pass

---------------------

foo = deco1(deco_arg)(deco2(foo()))

返回以函数作为参数的装饰器

三、用处

1、引用日志

2、增加计时逻辑来检测性能

3、给函数加入事务的能力

四、实例

# @param python基础 之 装饰器详解

# @author 512笔记|www.512pic.com

from time import ctime,sleep

def deco(func):

def decoIn():

print '[%s]:%s called' %(ctime(),func.__name__)

return func

return decoIn

@deco

def foo():

pass

foo()

sleep(4)

for i in range(2):

sleep(1)

foo()

#输出如下:--------

#[Fri Jul 05 10:45:04 2013]:foo called

#[Fri Jul 05 10:45:09 2013]:foo called

#[Fri Jul 05 10:45:10 2013]:foo called

#------------------

# End www_512pic_com

注:关于python装饰器的简单示例的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

关键词:装饰器

python简单装饰器_python装饰器的简单示例相关推荐

  1. 学习python装饰器_Python装饰器学习(九步入门)

    这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次 ...

  2. python 运行时间 装饰器_python 装饰器统计某个函数的运行时间

    import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime. ...

  3. python重写和装饰器_python装饰器

    python装饰器的本质,就是闭包! 我们一般谈Python的闭包,都是指普通的入参,而谈装饰器的时候,入参一定有函数!闭包和装饰器,返回的都是函数.函数是代码的最小封装单位,装饰器作用于函数,它不影 ...

  4. python两层装饰器_python装饰器

    Python的装饰器的英文名叫Decorator,基本上适用的场景就是"装修":不涉及主流程业务,用于鉴权.审计等副业. 1.函数 在python中,函数通过def关键字.函数名和 ...

  5. python实现装饰器_python装饰器的实现

    说起装饰器我们可能已经很熟悉了(不了解的可以查看python基础学习--装饰器),随手就可以写一个简单的装饰器 def decorator(func): def inner(*args, **kwar ...

  6. python 开闭原则_Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】

    本文实例讲述了Python 装饰器@,对函数进行功能扩展操作.分享给大家供大家参考,具体如下: 装饰器可以对原函数进行功能扩展,但还不需要修改原函数的内容(开闭原则),也不需要修改原函数的调用. de ...

  7. 装饰器python的通俗理解_Python装饰器的通俗理解

    在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...

  8. python解读器_Python装饰器完全解读

    Python Python开发 Python语言 Python装饰器完全解读 1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入 ...

  9. python无参数装饰器_Python装饰器(不带参数)

    示例 直接给出示例,普通装饰器(即装饰器函数本身不带参数,或参数为实际被包裹的函数): import time from functools import wraps def timethis(fun ...

  10. python修饰器_python修饰器

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/02/2479833.html 文章先由stackoverflow上面的一个问题引起吧,如果使 ...

最新文章

  1. 【UVA】10152 ShellSort (几只乌龟的故事)
  2. android 二次点击退出,android返回二次退出
  3. hdu-1207(规律推导)
  4. Linux 命令集合
  5. 60岁有30万资金,如何存款最安全?
  6. leetcode —— 1217. 玩筹码
  7. excel和mysql php_php将mysql数据库和Excel相互导入和导出的方法
  8. java使用poi操作excel文件_使用 java apache poi 操作 excel xlsx 文件
  9. JAVA线程的应用实例(运用2种中断线程方式,基于实现进度条为例)
  10. 万字长文!搞定逃不脱的 DNS 面试题
  11. python中用箱线图分析异常值_[宜配屋]听图阁
  12. Java主线程等待所有子线程执行完毕再执行解决办法集
  13. 在 CentOS 上安装和配置 NFS 4.0
  14. Java适合初学者的编写软件分享
  15. 【ArchSummit干货分享】个推大数据金融风控算法实践
  16. 石头科技的“现实”和“远方”
  17. 加权平均数的例子_加权平均数怎么算?举个具体的例子
  18. lzg_ad:XPE系统管理工具组件
  19. 百度快照劫持的表现及解决方法
  20. 离散数学与计算机专业的关系是什么,离散数学跟计算机专业有什么关系?

热门文章

  1. Nio 中的方法 - 文件上传
  2. AngularJS组件 - ngTags
  3. 基于mysql-proxy读写分离
  4. 2、Android应用程序基本特性
  5. Silverlight 4 WebBrowser的使用及调用 WebBrowser 中的 javascript 方法
  6. vivo统一告警平台建设与实践
  7. 简洁好用的数据库表结构文档生成工具!
  8. 千万别说做过高并发!
  9. 通过OGG实现多源端数据库的数据集中分发
  10. 雷军、张小龙:高手的努力深入而轻松,普通人的努力肤浅而痛苦!