|
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
- @addTips
- def add(x, y):
- return x+y
- print(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+y
- print(add(2, 3))
复制代码
# -*- coding: utf-8 -*-
# 迭代器(iterator)
# 可迭代的对象:如果一个对象可以用for in 的方式遍历其内容 就是一个可迭代的对象 list tuple 字典
# 迭代器:遍历可迭代对象内容的方式
# 常见的迭代器:组合 排列 笛卡尔积 串联迭代器可以被next()函数调用的并不断返回下一个值得对象叫做迭代器:iterator
凡是可以用作与next()函数的对象都是iterator
- # -*- coding: utf-8 -*-
- __author__ = 'dongfangyao'
- __date__ = '2017/12/18 下午4:35'
- __product__ = 'PyCharm'
- __filename__ = 'iterator1'
- # 排列 组合 笛卡尔积 串联迭代器
- import itertools
- x = 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)
复制代码
可迭代对象与迭代器的区别:通过iter()将一个可迭代对象变成迭代器
- list01 = [1,2,3,4,5] #是一个可迭代对象
- # for i in list01:
- # print(i)
- # print(next(list01)) #list01不是迭代器所以无法调用 next
- #通过iter()将一个可迭代对象变成迭代器
- a = iter(list01)
- print(a)
- print(next(a))
- print(next(a))
- print(next(a))
复制代码
|
|