`
hfeeqi
  • 浏览: 13945 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Python decorator

阅读更多
function decorator:
语法:
@decoratorname
def decoratoredfunction

例如:

python 代码
 
  1. class C:  
  2.     @classmethod  
  3.     def meth(cls):  
  4.         ...  


上面的 @classmethod 等于 meth=classmethod(meth)

decorator 能够用于为函数(普通函数或类的成员函数)添加功能, 不能够用来为类动态添加方法.
decorator 把被修饰的函数作为参数, 其返回值通常是一个函数或者类

技术上讲, 任何只带一个参数能够被调用的对象都可以被当作decorator使用, 但是这个定义过于宽泛而无用, 所以可以把decorator分为以下两类:
  • signature-preserving decorator: 例如, 一个输入为一个函数输出与该函数的输出一致的可调用对象
  • signature-changing decorator: 例如, 内部类 staticmethod 和 classmethod 就属于这种类型, 因为它们会把被修饰的函数作为输入, 返回一个描述对象, 这个对象不是函数, 不可调用
Decorator的用法:
  • @catch_on((exception list), functor)
其定义如下:
python 代码
 
  1. from types import *  
  2.   
  3. def catch_on(excepts, act):  
  4.   def call(proc, *args, **kw):  
  5.     try:  
  6.       return proc(*args, **kw)  
  7.     except excepts, e:  
  8.       if not act and type(act) is types.FunctionType:   
  9.         act(e)  
  10.       pass  
  11.     except Exception, e:  
  12.       if not isinstance(e, excepts):  
  13.         raise  
  14.         
  15.   return decorator(call)  
  16.   
  17. def x():  
  18.   raise NameError, "NameError"  
  19.     
  20. def boo():  
  21.   raise KeyError, "KeyError"  
  22.   
  23. def bar():  
  24.   raise ValueError, "ValueError"  
  25.     
  26. @catch_on((KeyErrorValueError), lambda e: None)  
  27. def koo():  
  28.     x()  
  29.     boo()  
  30.     bar()  
  31.       
  32. @catch_on((KeyErrorValueError), lambda e: None)  
  33. def goo():  
  34.     boo()  
  35.     bar()  
  36.     x()  
  37.   
  38. koo()  
  39. goo() 

  • 代码块
分享到:
评论
4 楼 huangyiiiiii 2007-05-23  
python3000中将加入 class decorator
@decorator
class Klass(object):pass

等价于
Klass = decorator(Klass)
3 楼 simohayha 2007-04-10  
hfeeqi 写道
1\ 我发帖的时候没有找到python的论坛,只好随意选了一个
2\ 这只是我学习python decorator的笔记, 心得
3\ 怎样加入圈子?
到这边,加入就行了.
http://onlypython.group.iteye.com/
2 楼 hfeeqi 2007-04-09  
1\ 我发帖的时候没有找到python的论坛,只好随意选了一个
2\ 这只是我学习python decorator的笔记, 心得
3\ 怎样加入圈子?
1 楼 simohayha 2007-04-08  
1 发错版了
2 要说decorator,  limodou这篇讲的很不错 .
http://blog.donews.com/limodou/archive/2004/12/19/207521.aspx

3 加到python圈子里吧.

相关推荐

    python decorator==4.4.2

    在"python decorator==4.4.2"版本中,我们可以探讨这个库提供的装饰器功能及其在Odoo中的应用。 首先,让我们理解什么是Python装饰器。装饰器本质上是一个接收函数作为参数并返回新函数的函数。通过在定义函数前...

    python decorator & closure demo code for learning the use tips

    python decorator & closure demo code for learning the use tips

    Python decorator拦截器代码实例解析

    ### Python Decorator 拦截器详解 在深入探讨Python中的`decorator`(装饰器)之前,我们先来了解一下什么是装饰器以及它为何被称为“拦截器”。 #### 一、装饰器简介 装饰器是一种特殊类型的函数,它可以修改...

    Python库 | drf_nested_decorator-0.3-py2-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:drf_nested_decorator-0.3-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python装饰器decorator用法实例

    2. **装饰器(Decorator)**: 装饰器是Python中实现装饰模式的一种方式。它是一个可调用的对象,通常是一个函数,接收一个函数作为参数,并返回一个新的函数。装饰器可以用来增强或修改原函数的功能,如日志、性能...

    分析Python中设计模式之Decorator装饰器模式的要点

    Python中的装饰器模式是一种设计模式,它允许在不修改原有对象的情况下向其添加新的功能。装饰器模式在Python中有着广泛的应用,特别是在处理诸如认证、权限检查、日志记录、参数检查、同步加锁等与核心业务逻辑无关...

    python实现Decorator模式实例代码

    本文研究的主要是python实现Decorator模式,具体介绍如下。 一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类)。首先来看一个简单的例子: # -*- coding: utf-8 -*- ...

    decorator python(decorator-3.4.0.tar.gz).rar

    这个"decorator python"模块是版本3.4.0的实现,其核心概念是通过函数来包装(即装饰)其他函数,以增强被装饰函数的行为。这个模块可能是由社区成员贡献并分享的,因此它属于"其他资源"类别。 在Python中,装饰器...

    python-decorator-3.4.0-3.el7.noarch.rpm

    离线安装包,亲测可用

    python装饰器decorator介绍

    python中的decorator通常为输入一个函数,经过装饰后返回另一个函数。 比较常用的功能一般使用decorator来实现,例如python自带的staticmethod和classmethod。 装饰器有两种形式: 复制代码 代码如下: @A def foo()...

    python-decorator-3.0.1-3.1.el6.noarch.rpm

    python-decorator-3.0.1-3.1.el6.noarch

    python中完善decorator共5页.pdf.zip

    Python中的装饰器(Decorator)是该编程语言的一个强大特性,它允许我们修改或增强函数、类等对象的行为,而无需更改其源代码。这个“python中完善decorator共5页.pdf.zip”文件很可能是关于深入理解和高效使用...

    python中编写无参数decorator共4页.pdf

    Python中的装饰器(Decorator)是高级函数编程的一个重要特性,它允许我们修改或增强其他函数的功能,而无需改动原函数的代码。在Python中,装饰器本质上是一个接收函数作为参数并返回新函数的函数。本资料"python中...

    Python库 | cache_decorator-1.2.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:cache_decorator-1.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    装饰器decorator_python_

    装饰器在Python编程中是一种强大的工具,它允许我们在不修改原始函数代码的前提下,为函数添加新的功能或行为。装饰器本质上是Python中的一个函数,它接收一个函数作为参数,并返回一个新的函数。这种设计模式在很多...

    python中编写带参数decorator共5页.pdf

    Python中的装饰器是一种强大的工具,它允许我们修改或增强函数、类或其他可调用对象的行为,而无需修改它们的源代码。在Python编程中,装饰器尤其常见,用于日志记录、性能测试、缓存、权限控制等场景。当我们谈论...

    Python库 | potemkin_decorator-0.0.7-py3-none-any.whl

    "potemkin_decorator-0.0.7-py3-none-any.whl" 是一个与Python相关的库,名为“Potemkin Decorator”,版本号为0.0.7。这个库是为Python3设计的,支持多种平台,其主要功能是提供装饰器(Decorator)功能。 装饰器...

    Python库 | json_log_decorator-2.0.0.tar.gz

    《Python库解析:json_log_decorator-2.0.0》 在编程领域,尤其是Python社区,库是开发者的重要工具,它们提供了预定义的功能,帮助我们更高效地编写代码。今天我们要探讨的是一个名为`json_log_decorator`的Python...

Global site tag (gtag.js) - Google Analytics