zoukankan      html  css  js  c++  java
  • Pyhton自由之路(六)闭包与装饰器

    设计模式中有一种叫做装饰者模式,而在JAVA社区中,有一种技术被称之为AOP。
    个人理解为,在某一过程运行时程序能动态地控制过程的行为。可惜目前的我离这个目标还有段距离,只能通过反射机制动态控制过程的始末。
     来看一个简单的例子:
     def test(sec):
          print 'please wait',
          for i in range(sec):
              sleep(1)
              print '.',       
          print 'over~!'
    这是一个简单的过程,现在要在这个过程的前后加上时间日志。我们定义一个日志记录函数
     def log(func):
          def wrapperfunc(*args):
             print 'Function Runing..at',ctime()
             func(*args)
             print 'Function Finished..at',ctime()
          return wrapperfunc
    在程序中测试方法def test(sec)上面加上’@log’,再次运行调用test(3),可以发现python中利用闭包实现AOP是多么简洁优雅。关于(*args)请参考API中“可变长度的参数”
    你也可以使用带参数的函数修饰符’@log(who,when)’来动态决定使用怎样的装饰规则。
    看下面的例子:
    Code
    如果运用得当,这样的功能可以给我们的程序带来很强的可扩展性。顺便说一下,可以把log等这些装饰者函数放在其他模块的类中,我们导入模块from _module import _class,然后在要装饰的函数上加上’@_class.log’,能够这样使用的前提是log函数必须在类中声明为静态函数,即在log()也加上修饰符’@staticmethod’,从这也可以看出,函数修饰是可以迭加的。
  • 相关阅读:
    今天是周日,一如既往的在加班
    懒出来的框架
    把Visio文档中形状信息导出到XML文件的VBA代码
    DataGridView多线程更新数据的问题的解决办法
    为VS定制一个自己的代码生成器
    安装VS2012之后自己开发的自定义工具没法使用问题的解决办法
    通过RSA进行私钥加密公钥解密算法的进一步改进
    程序员在职场 该反思了吗?
    图片与字节数组相互转换的方法
    jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  • 原文地址:https://www.cnblogs.com/ysisl/p/1548078.html
Copyright © 2011-2022 走看看