python 装饰器、迭代器、生成器

2018-09-18  本文已影响0人  niffler_

1.装饰器的作用
装饰器的强大在于它能够在不修改原有业务逻辑的情况下对代码进行扩展,权限校验、用户认证、日志记录、性能测试、事务处理、缓存等都是装饰器的绝佳应用场景,它能够最大程度地对代码进行复用。
对于python来说装饰器就是能够在不修改原始的代码情况下给其添加新的功能,比如一款软件上线之后,我们需要在不修改源代码和不修改被调用的方式的情况下还能为期添加新的功能,在python种就可以用装饰器来实现,同样在写代码的时候也要考虑到后面的可扩展性。
一个简单装饰器的实现:

def outer(func):
'''可以理解成闭包函数,外函数的返回值为内嵌函数本身'''
    def inner():
        print("记录日志开始")
        func() # 业务函数
        print("记录日志结束")
    return inner
foo = outer(foo) 
foo()
################################
@outer
def foo():
'''其实将foo()函数对象当做参数传递给了outer()'''
    print("foo")
foo()

2.迭代器:是访问集合元素的一种方式,从集合的第一个元素开始访问,直到所有元素被访问结束。其优点是不需要事先准备好整个迭代过程中的所有元素,仅在迭代到某个元素时才开始计算该元素。适合遍历比较巨大的集合。iter():方法返回迭代器本身, next():方法用于返回容器中下一个元素或数据。

生成器:带有yield的函数不再是一个普通函数,而是一个生成器。当函数被调用时,返回一个生成器对象。不像一般函数在生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行状态。

'''迭代器'''
alist=[1,2,3,4,5,6]
#for i in iter(alist):
#    print(i)
a=iter(alist)
while True:
    try:
        x=next(a)
        print(x)
    except StopIteration:
        break

'''生成器'''
def myyield(n):
    while n>0:
        print("开始生成...:")
        yield n
        print("完成一次...:")
        n -= 1
for i in myyield(4):
    print("遍历得到的值:",i)

reference:
https://blog.csdn.net/lantian_123/article/details/78094145
https://zhuanlan.zhihu.com/p/25177227
关于装饰器、迭代器、生成器
https://blog.csdn.net/wang_yuewen/article/details/78847807

上一篇 下一篇

猜你喜欢

热点阅读