本章内容:
装饰器
迭代器 & 生成器
re 正则表达式
字符串格式化
装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
先定义一个基本的装饰器:
########## 基本装饰器 ##########def orter(func): #定义装饰器 def inner(): print("This is inner before.") s = func() #调用原传入参数函数执行 print("This is inner after.") return s #return原函数返回值 return inner #将inner函数return给name函数 @orter #调用装饰器(将函数name当参数传入orter装饰器)def name(): print("This is name.") return True #name原函数return True ret = name()print(ret) 输出结果:This is inner before.This is name.This is inner after.True
给装饰器传参数:
############ 装饰器传参数 ###########def orter(func): def inner(a,b): #接收传入的2个参数 print("This is inner before.") s = func(a,b) #接收传入的原函数2个参数 print("This is inner after.") return s return inner @orterdef name(a,b): #接收传入的2个参数,并name整体函数当参数传入orter装饰器 print("This is name.%s,%s"%(a,b)) return True ret = name('nick','jenny') #传入2个参数print(ret) 输出结果:This is inner before.This is name.nick,jennyThis is inner after.True
给装饰器传万能参数:
########## 万能参数装饰器 ########## def orter(func): def inner(*args,**kwargs): #万能参数接收多个参数 print<strong style="color:transparent">本文来源gao@daima#com搞(%代@#码@网&</strong>("This is inner before.") s = func(*args,**kwargs) #万能参数接收多个参数 print("This is inner after.") return s return inner @orterdef name(a,b,c,k1='nick'): #接受传入的多个参数 print("This is name.%s,%s"%(a,b)) return True ret = name('nick','jenny','car')print(ret) 输出结果:This is inner before.This is name.nick,jennyThis is inner after.True
一个函数应用多个装饰器方法:
########### 一个函数应用多个装饰器 ######### def orter(func): def inner(*args,**kwargs): print("This is inner one before.") print("This is inner one before angin.") s = func(*args,**kwargs) print("This is inner one after.") print("This is inner one after angin.") return s return inner def orter_2(func): def inner(*args,**kwargs): print("This is inner two before.") print("This is inner two before angin.") s = func(*args,**kwargs) print("This is inner two after.") print("This is inner two after angin.") return s return inner @orter #将以下函数整体当参数传入orter装饰器 @orter_2 #将以下函数当参数传入orter_2装饰器 def name(a,b,c,k1='nick'): print("This is name.%s and %s."%(a,b)) return True ret = name('nick','jenny','car')print(ret) 输出结果:This is inner one before.This is inner one before angin.This is inner two before.This is inner two before angin.This is name.nick and jenny.This is inner two after.This is inner two after angin.This is inner one after.This is inner one after angin.True