下面是Python三大器之迭代器、生成器、装饰器的完整攻略:
迭代器(Iterator)
迭代器是Python中非常重要的概念,它是可以遍历访问集合元素的对象,可以按照一定次序逐个访问集合中的元素,而无需暴露集合内部的方式。Python中很多内置对象,比如列表、元组、字符串等都是可迭代对象,而迭代器是可迭代对象中更为高级的概念。迭代器可以通过Python内置函数iter()
进行创建,而且必须实现两个方法:__iter__()
和__next__()
。
下面是创建迭代器的示例:
# 生成一个自定义的迭代器
class MyIterator:
def __init__(self, max=0):
self.max = max
def __iter__(self):
self.num = 0
return self
def __next__(self):
if self.num < self.max:
self.num += 1
return self.num
else:
raise StopIteration
it = iter(MyIterator(5))
for i in it:
print(i)
在上面这个示例中,我们创建了一个自定义的迭代器MyIterator
,它可以返回给定范围内的整数。通过iter()
函数创建迭代器对象,并通过for
循环获取迭代器中的元素,每次迭代返回一个整数。
生成器(Generator)
生成器是Python中另一个非常重要的概念,它是一种特殊的迭代器,使用生成器可以按需产生、处理无限序列或大量数据。Python中定义生成器的方式有两种:一种是通过函数定义生成器,另一种是通过yield语句在函数内部产生一个生成器。生成器与迭代器类似,都可以算是一种可以逐个访问数据的数据类型,但是它们的区别在于生成器是一种更优雅、更简洁的解决数据处理问题的方法。
下面是通过函数产生生成器的示例:
# 定义生成器函数
def my_generator(max):
n = 0
while n < max:
yield n
n += 1
# 调用生成器函数,并获取每个生成器元素
g = my_generator(5)
for i in g:
print(i)
在上面这个示例中,我们通过yield
语句在函数内部产生了一个生成器。通过for
循环获取生成器元素,并且每次yield语句都会像暂停一样,记录当前迭代到的位置并返回给调用方,之后可以再次调用生成器,继续执行。
装饰器(Decorator)
装饰器是Python中另一个非常重要的概念,它是一种在不修改函数源代码的情况下,为函数的功能增加特殊功能的一种机制。Python中的装饰器提供了非常灵活和高效的方式来扩展函数和类的行为,比如可以用于记录日志、计时、授权访问、缓存结果等。
下面是一个用于计时的装饰器示例:
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
print('Cost time:', end_time - start_time)
return wrapper
@timer
def my_func():
time.sleep(1)
print('This is my_func.')
my_func()
在上面这个示例中,我们定义了一个用于计时的装饰器timer
,它会在函数执行前后记录下时间,并输出函数运行的时间。在my_func()
函数上添加@timer
装饰器,即可调用装饰器包装好的函数实现计时的功能。
以上就是Python三大器之迭代器、生成器、装饰器的完整攻略。希望能对您有所帮助。