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 削完皮了
吃梨
装饰器特点:提升代码的复用率,代码简洁、高效,易懂