1. 03python中的装饰器与迭代器
    2. # 装饰器本质上是一个Python函数 它可以让其他函数在不需要做任何代码变动的前提下增加额外功能
    3. # 装饰器的返回值也是一个函数对象
    4. # 它经常用于有切面需求的场景 比如:插入日志 性能测试 权限判断等
    5. # 有了装饰器 我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用
    6. # 总之 装饰器的作用就是为已经存在的对象添加额外的功能
    7. # -*- coding: utf-8 -*-
    8. __author__ = 'dongfangyao'
    9. __date__ = '2017/12/18 下午4:21'
    10. __product__ = 'PyCharm'
    11. __filename__ = 'decorator1'
    12. def addTips(fun):
    13. def wrap(*args, **kwargs):
    14. print('这是操作之前')
    15. result = fun(*args, **kwargs)
    16. print('操作结束啦!')
    17. return result
    18. return wrap
    19. @addTips
    20. def add(x, y):
    21. return x+y
    22. print(add(2, 3))
    23. # -*- coding: utf-8 -*-
    24. __author__ = 'dongfangyao'
    25. __date__ = '2017/12/18 下午4:29'
    26. __product__ = 'PyCharm'
    27. __filename__ = 'decorator2'
    28. def addTips(i):
    29. def wrap1(fun):
    30. def wrap(*args, **kwargs):
    31. print('这是操作之前')
    32. result = 0
    33. if i > 10:
    34. result = fun(*args, **kwargs)
    35. else:
    36. print('对不起,没有执行fun的权限')
    37. print('操作结束啦!')
    38. return result
    39. return wrap
    40. return wrap1
    41. @addTips(11)
    42. def add(x, y):
    43. return x+y
    44. print(add(2, 3))
    45. # -*- coding: utf-8 -*-
    46. # 迭代器(iterator)
    47. # 可迭代的对象:如果一个对象可以用for in 的方式遍历其内容 就是一个可迭代的对象 list tuple 字典
    48. # 迭代器:遍历可迭代对象内容的方式
    49. # 常见的迭代器:组合 排列 笛卡尔积 串联迭代器
    50. # -*- coding: utf-8 -*-
    51. __author__ = 'dongfangyao'
    52. __date__ = '2017/12/18 下午4:35'
    53. __product__ = 'PyCharm'
    54. __filename__ = 'iterator1'
    55. # 排列 组合 笛卡尔积 串联迭代器
    56. import itertools
    57. x = range(1, 5)
    58. y = list('abc')
    59. # 排列
    60. com1 = itertools.combinations(x, 3)
    61. # 组合
    62. com2 = itertools.permutations(x, 3)
    63. # 笛卡尔积
    64. com3 = itertools.product(x, y)
    65. # 串联迭代器
    66. com4 = itertools.chain(com1, com2, com3)
    67. for i in com4:
    68. print(i)