Pyhton自由之路(六)闭包与装饰器

简介: 设计模式中有一种叫做装饰者模式,而在JAVA社区中,有一种技术被称之为AOP。个人理解为,在某一过程运行时程序能动态地控制过程的行为。可惜目前的我离这个目标还有段距离,只能通过反射机制动态控制过程的始末。
设计模式中有一种叫做装饰者模式,而在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)’来动态决定使用怎样的装饰规则。
看下面的例子:
img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif Code
def log(who,when):
    
def logged(f):
        
def wrapperfunc(*args):
            
print 'Function Runing..at',when
            f(
*args)
            
print 'Function Finished..at',ctime()
        
return wrapperfunc
    
    
def welcome(func):
        
def wrapperHello(*args):
            
print 'Hello',who,',welcome accessing'
            func(
*args)
            
print 'Goog Bye,',who
        
return wrapperHello
 
    
if who =='' :
        
return logged
    
else:
        
return welcome
@log(
'ysisl',ctime())
def test(sec):
    
print 'please wait',
    
for i in range(sec):
        sleep(
1)
        
print '.',        
 
print 'over!'
如果运用得当,这样的功能可以给我们的程序带来很强的可扩展性。顺便说一下,可以把log等这些装饰者函数放在其他模块的类中,我们导入模块from _module import _class,然后在要装饰的函数上加上 ’@_class.log’,能够这样使用的前提是log函数必须在类中声明为静态函数,即在log()也加上修饰符 ’@staticmethod’,从这也可以看出,函数修饰是可以迭加的。
目录
相关文章
|
10天前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
|
4月前
|
Python
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
20 0
|
12月前
|
数据采集 缓存 JSON
学会这12个Python装饰器,让你的代码更上一层楼
装饰器是一个重要的抽象思想,可以在不改变原始代码的情况下扩展代码。本文整理了项目中经常用到的12个装饰器,值得每一个Python开发者掌握。
225 0
学会这12个Python装饰器,让你的代码更上一层楼
|
分布式计算 索引 Python
猿创征文|Python迭代器、生成器、装饰器、函数闭包
猿创征文|Python迭代器、生成器、装饰器、函数闭包
101 0
猿创征文|Python迭代器、生成器、装饰器、函数闭包
|
设计模式 Java 程序员
程序中的奇技淫巧--语法糖
程序中的奇技淫巧--语法糖
程序中的奇技淫巧--语法糖
|
监控 NoSQL 程序员
一则小故事带你弄清Python装饰器
装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题。装饰器 `(Decorators)` 是 Python 的一个重要部分。简而言之:**Python中的装饰器就是拓展原来函数功能的一种函数
|
数据采集 开发框架 算法
Python学习之路-函数-作用域
开发者学堂课程,了解Python语言的基本特性、编程环境的搭建、语法基础、算法基础等,了解Python的基本数据结构,对Python的网络编程与Web开发技术具备初步的知识,了解常用开发框架的基本特性,以及Python爬虫的基础知识。 课程地址:https://developer.aliyun.com/learning/course/601/detail/8730
Python学习之路-函数-作用域
|
Python
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
【Python零基础入门篇 · 19】:递归函数、闭包、装饰器(语法糖用法、设置多个装饰器)
python最常用七大函数(四)之闭包
闭包(closure) 是函数式编程的重要的语法结构。函数式编程是一种编程范式 ( 而面向过程编程和面向对象编程也都是编程范式) 。在面向过程编程中,我们见到过函数(function) ;在面向对象编程中,我们见过对象(object) 。函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability) 。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。 作者:zhulin1028 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明
|
存储 Python
Python初级案例教学,函数的定义与调用,高阶函数,闭包以及装饰器【第四课】
Python 编写一个函数 cacluate 编写一个函数 cacluate ,可以接收任意多个数,返回的是一个元组元组的第一个值为所有参数的平均值第二个值是大于平均值的所有数. 使用高阶函数方式设计Calc函数,实现加、减、乘、除、乘方等计算功能 使用闭包编写一个学生成绩平均统计。要求每次调用函数传入一个学生成绩,得到已经传入成绩的平均分。
428 2