`
heipark
  • 浏览: 2094583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python高级编程——Decorator(修饰器)用法

阅读更多

 

一、基本应用:

 

在python里方法也是对象,它可以作为参数传递。

现在有个方法foo,我希望在它运行前后做些事情,那就可以使用decorator了。

 

# coding=utf-8

# 原方法
def foo():
    print 'running'

# 修饰方法
def outer(some_func):
    def inner():
        print "before some_func"
        some_func()
        print "after some_func"
    return inner

# 修饰foo方法
decorated = outer(foo) # 2

# 运行修饰后的方法
decorated()
输出:
before some_func
running
after some_func

可以看到我们在没有修改原方法foo()的前提下,修改了foo()运行之前和运行之后的行为。

 

二、使用@符号简化修饰器应用 

# coding=utf-8

# 修饰方法
def NewFoo(some_func):
    def inner():
        print "before some_func"
        some_func()
        print "after some_func"
    return inner

# 原方法
@NewFoo
def foo():
    print 'running'

# 运行修饰后的方法
foo()

修改后的代码更清晰简单了,而且foo方法名称都没有改变,行为就改变了。

这里注意:@NewFoo要与修饰方法名称一样,否则不会生效。通过修饰器,python实际调用是这样的:

foo = NewFoo(foo)
foo()

 

 

 

三、一个我使用到的案例

假设我们的开发code有多个分支,但测试代码希望只有一份,那就可以在测试代码上定义@dev_branchA_run_only、@dev_branchB_not_run这样的标记来适应多个分支的测试case。

 

 

参考:

http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/

http://coolshell.cn/articles/11265.html

http://www.imooc.com/article/1257

 

--end

 

分享到:
评论

相关推荐

    Python编程——修饰器.docx

    在Python编程中,修饰器(Decorator)是一种强大的工具,它允许我们在不修改原函数代码的情况下,为函数添加额外的功能或行为。修饰器本质上是接受一个函数作为参数,并返回一个新的函数的高阶函数。这种设计模式...

    Python高级编程

    "Python高级编程"涵盖了Python语言的深入理解和高级用法,这包括但不限于元编程、装饰器、生成器、协程、多线程与多进程、高级数据结构、错误处理、模块化编程、性能优化以及Python在大型项目中的应用。 1. **元...

    Python高级编程和异步IO并发编程

    在Python编程领域,掌握高级特性以及网络编程与并发模型是至关重要的。本资源"Python高级编程和异步IO并发编程"旨在深入探讨这些主题,帮助开发者提升技能,以实现更高效、更强大的程序设计。 首先,让我们从面向...

    最新Python高级编程.最新版.pdf

    Python是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能深受程序员喜爱。"最新Python高级编程.最新版.pdf"这份文档很可能是为已经掌握基础Python知识的开发者准备的,旨在深入探讨Python的高级特性、...

    python高级编程第2版

    元编程可以帮助开发者创建更加灵活和自定义的类和模块,以及实现元类(metaclass)和装饰器(decorator)等高级概念。 其次,Python的异常处理机制是另一个重要的高级话题。通过学习如何有效地使用try/except/...

    Python高级编程技巧实战.zip

    在Python的高级编程技巧中,我们经常会遇到一系列提升效率和代码质量的方法。这些技巧涵盖了元编程、装饰器、生成器、上下文管理器、错误处理、模块化设计等多个方面。通过对这些技巧的深入理解和实践,我们可以使...

    装饰者模式——Decorator

    在博客文章“装饰者模式——Decorator”中,作者可能详细讲解了以下几个方面: 1. 装饰者模式的基本概念和原理。 2. 如何通过代码示例展示装饰者模式的实现。 3. 装饰者模式与继承的区别和优势。 4. 装饰者模式在...

    Python高级编程技巧和技术.docx

    Python是一种强大的高级编程语言,因其简洁的语法和广泛的应用领域而受到程序员的热爱。在Python中,掌握一些高级编程技巧和技术能显著提升代码质量和效率。本文将深入探讨四个关键的高级概念:迭代器与生成器、装饰...

    Python核心编程基础教程

    函数式编程在Python中也占据重要地位,我们将探讨高阶函数如map()、filter()和reduce(),以及装饰器(decorator)的使用,它们能有效提高代码的复用性和可读性。此外,异常处理(try-except-finally)是处理程序错误...

    python——retry装饰器(csdn)————程序.pdf

    本文将对 Python 中的 retry 装饰器进行详细的讲解,包括其定义、使用方法、优点和实际应用场景。 retry 装饰器的定义 retry 装饰器是指在 Python 中,使用装饰器(decorator)实现函数的重试机制。其主要思想是,...

    python核心编程第三版各章节代码

    - 装饰器:理解装饰器的原理,使用@decorator语法增强函数功能。 - 上下文管理器:了解with语句的工作方式,实现自己的上下文管理器。 -元类:深入理解类是如何被创建的,以及如何自定义元类。 -生成器:使用...

    《Python核心编程 第二版》.(Wesley J. Chun ).[PDF]&Linux;公社www.linuxidc.com整理.rar

    特别地,Python中的装饰器(decorator)和元类(metaclass)是进阶话题,它们允许更灵活地修改和扩展代码行为。 函数式编程在Python中也占据一席之地,函数可以作为第一类对象,这使得高阶函数如map、filter和...

    python高级之核心编程

    在Python的高级核心编程中,我们探讨的是Python语言的深层次特性和高级用法,这些内容对于熟练掌握Python并提升编程效率至关重要。以下是一些关键的知识点: 1. **元编程**:元编程是关于在运行时创建或操作代码的...

    Python:Python高级特性:装饰器与迭代器

    ### Python高级特性详解:装饰器与迭代器 #### 一、装饰器 ##### 1.1 装饰器的概念 装饰器是Python语言中一项非常强大的特性,它允许开发者在不修改原始函数代码的基础上,为其添加新的功能或行为。简而言之,...

    python编程教程之装饰器、协程、并发编程.zip

    Python编程是一种广泛使用的高级编程语言,以其简洁明了的语法和强大的功能深受程序员喜爱。本教程专注于三个核心概念:装饰器、协程以及并发编程,这些都是Python编程中的重要概念,对于提升代码效率和解决复杂问题...

    python核心编程中文版

    书中可能还会介绍一些进阶话题,如装饰器(decorator)、上下文管理器(context manager)和生成器(generator),这些都是Python高效编程的重要工具。此外,Python的Web开发、网络编程、数据分析等领域也可能有所...

    Python源码剖析-深度探索动态语言核心技术(2008)

    通过阅读这本书,读者不仅能掌握Python的高级编程技巧,还能提升对Python语言底层运作的理解,这对于成为一名优秀的Python开发者至关重要。书中可能还包含了一些实战案例和实践建议,帮助读者将理论知识应用于实际...

    Python+核心编程2.rar

    7. **高级特性**:例如装饰器(decorator)、上下文管理器(context manager)、生成器(generator)、闭包(closure)、函数式编程等,这些是Python进阶学习的重点。 8. **文件与I/O操作**:学习如何打开、读写...

    Python 基本编程词汇.zip

    在Python编程语言的学习过程中,掌握基础的编程词汇是至关重要的。这个名为"Python 基本编程词汇.zip"的压缩包文件提供了一份详尽的、从A到Z分类的编程词汇清单,旨在帮助那些英语基础薄弱的初学者也能顺利地理解和...

Global site tag (gtag.js) - Google Analytics