Python-迭代器、生成器、装饰器简易理解

1、什么是迭代器

迭代器要满足两个条件__iter__ 与__next__
调用可迭代对象,通过iter方法返回一个迭代对象,然后不断调用next方法返回元素(迭代对象的值),直到迭代完成后停止迭代。

2、什么是生成器

生成器:一边循环一边计算的机制,称为生成器(Generator),生成器是一个返回迭代器的函数,只能用于迭代操作。

生成器有两种:生成器表达式、生成器函数
(1)生成器表达式类似于推导式,不过推导式是用列表作为最外层。生成器表达式使用元祖。不过直接调用生成器表达式是无法得到对应值,需要用循环或者用next方法才能够输出生成器表达式的值。

a = (i for i in range(10))
print(a.__next__())
a = (i for i in range(10))
for i in a:
    print(i)

(2)通过yield关键字来定义一个生成器函数,这个生成器函数返回值就是一个生成器对象,
当循环一次后yield会进入挂起状态,然后再次循环的时候会从挂起的位置输出下一个结果。

def b():
    for i in range(10):
        yield i
a = b()
print(a.__next__())
print(a.__next__())
def b():
    for i in range(10):
        yield i
for i in b():
    print(i)

3、什么是装饰器

装饰器的本质是在执行原有函数(被装饰的函数)的同时,临时再加上一些额外的功能,或者修改一些额外的功能。

闭包和装饰器的区别:闭包传递的是变量,而装饰器传递的是函数,除此之外没有任何区别,或者说装饰器是闭包的一种,它只是传递函数的闭包

比如
装饰器是:削皮刀
被装饰器:是苹果,也可能是梨。
我可以直接带着皮吃,也可以削皮吃。代码如下:

def skin_peeler(func):
    def peel(*args, **kwargs):
        print(func.__name__, "削完皮了")
        return func(*args, **kwargs)
    return peel


@skin_peeler
def apple():
    print("吃苹果")
    return


@skin_peeler
def pear():
    print("吃梨")
    return


apple()
pear()

apple 削完皮了
吃苹果
pear 削完皮了
吃梨

装饰器特点:提升代码的复用率,代码简洁、高效,易懂

猜你喜欢

转载自blog.csdn.net/zhouzongxin94/article/details/122956195