易截截图软件、单文件、免安装、纯绿色、仅160KB

Python装饰器

原文:http://www.klipdas.com/blog/?p=python-decorator
python装饰器介绍
Python 2.2中引入的 classmethod() 和 staticmethod() 内置函数,你可以这样调用classmethod():
class A:
def foo(self, y):
print y
foo = classmethod(foo)
也可以这样:
class A:
@classmethod
def foo(self, y):
print y
虽然classmethod是内置函数,但它和普通的函数没有两样,因此你也可以创建自己的函数转化逻辑,如:
def mydecorator(func):
print 'mydecorator was called.'
func.name = 'myfun'
return func
该修饰器将稍微修改了原函数的逻辑:首先打印一段文字“mydecorator was called.”,然后给原函数添加了一个name属性,属性值为"myfun",之后再将函数放回,使用方法和调用结果如下:
class A:
@mydecorator
def foo(self, y):
print y
if __name__ == '__main__':
a = A()
a.foo(1)
运行结果为:
mydecorator was called.
1
以上简介我们可以大致了解了python装饰器的作用。
装饰器的调用逻辑
如上一节的示例中我们发现,使用装饰器的时候是@mydecorator,或者是foo=mydecorator(foo),而不是@mydecorator(),或者foo=mydecorator(foo)()。显然,我们要的装饰器是个函数,而不是函数的结果。因为我们要将我们要修饰的函数foo(即老函数)传递给修饰函数mydecorator,并且修饰函数mydecorator也返回一个新函数(上一的新函数是在老函数的基础上添加了一个属性)。
带参数装饰器
上一节的介绍装饰器的调用过程,我们可以明白,@mydecorator是个函数,而且是个函数就可以,实际上是必须要实现__call__方法的对象就可以了。也就是说装饰器可以定义成实现了__call__方法的class也可以是其他的任何返回函数的“对象”,后者实现较复杂,但功能强大。
实现__call__方法的class示例:
class mydecorator:
def __init__(self, func):
self.func = func
def __call__(self):
print “mydecorator was called.”
return self.func
使用方法同前面的示例一样,因为我们可以像函数一样调用该类:mydecorator(),不同的是,该类是以被装饰的函数作为构造参数,而不是作为__call__的参数。更复杂的装饰器:
def mydecorator(arg):
print “arg is ”, arg
def newdec(func):
print ‘new decor


相关文档:

学习《Python语言入门》第十章框架与应用

关于框架,之前听得比较多,特别是在CPyG的邮件列表上,不过还没有接触过。
这一章我打算略读,加上这两天身体不适,读得更加略了。
这一章提到的几个框架我听说的有TKinter和SWIG。SWIG搞了一下,TKinter看人家用过,自己还没有用过。对这些框架陌生得很。以后碰上要用了再认真学学。
到现在,对Python算是有些了解了。 ......

删除工程中svn文件的脚本(Ruby版和Python版)

两种不同的语言,不同的表达!
Python脚本实现.
""
"
    File Name : clean.py
    File Date : 2009/11/5 14:22:56
    Author     : DannyLai
    Purpose     : Cle ......

Python开发Activex组件

Python强的功能就在于它无所不能。
使用win32com模块开发window ActiveX的示例:(如果你还没有装win32com模块的话,请到http://python.net/crew/skippy/win32/Downloads.html下载)。
# SimpleCOMServer.py
class PythonUtilities:
_public_methods_ = ['SplitString']
_reg_progid_ = "Python.Utilities"
......

[Python 学习]2.5版yield之学习心得

  shhgs 发布了关于《 Py 2.5 what's new 之 yield

之后,原来我不是特别关注 yield 的用法,因为对于2.3中加入的yield相对来说功能简单,它是作为一个 generator
不可缺少的一条语句,只要包含它的函数即是一个 generator 。但在2.3中,generator
不能重入,不能在运行过程中修改,不能引发异常,你要么是顺序 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号