03、python中的装饰器与迭代器# 装饰器本质上是一个Python函数 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能# 装饰器的返回值也是一个函数对象# 它经常用于有切面需求的场景 比如:插入日志 性能测试 权限判断等# 有了装饰器 我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用# 总之 装饰器的作用就是为已经存在的对象添加额外的功能# -*- coding: utf-8 -*-__author__ = 'dongfangyao'__date__ = '2017/12/18 下午4:21'__product__ = 'PyCharm'__filename__ = 'decorator1'def addTips(fun): def wrap(*args, **kwargs): print('这是操作之前') result = fun(*args, **kwargs) print('操作结束啦!') return result return wrap@addTipsdef add(x, y): return x+yprint(add(2, 3))# -*- coding: utf-8 -*-__author__ = 'dongfangyao'__date__ = '2017/12/18 下午4:29'__product__ = 'PyCharm'__filename__ = 'decorator2'def addTips(i): def wrap1(fun): def wrap(*args, **kwargs): print('这是操作之前') result = 0 if i > 10: result = fun(*args, **kwargs) else: print('对不起,没有执行fun的权限') print('操作结束啦!') return result return wrap return wrap1@addTips(11)def add(x, y): return x+yprint(add(2, 3))# -*- coding: utf-8 -*-# 迭代器(iterator)# 可迭代的对象:如果一个对象可以用for in 的方式遍历其内容 就是一个可迭代的对象 list tuple 字典# 迭代器:遍历可迭代对象内容的方式# 常见的迭代器:组合 排列 笛卡尔积 串联迭代器# -*- coding: utf-8 -*-__author__ = 'dongfangyao'__date__ = '2017/12/18 下午4:35'__product__ = 'PyCharm'__filename__ = 'iterator1'# 排列 组合 笛卡尔积 串联迭代器import itertoolsx = range(1, 5)y = list('abc')# 排列com1 = itertools.combinations(x, 3)# 组合com2 = itertools.permutations(x, 3)# 笛卡尔积com3 = itertools.product(x, y)# 串联迭代器com4 = itertools.chain(com1, com2, com3)for i in com4: print(i)