python三大器之迭代器、生成器、装饰器

  • Post category:Python

下面是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三大器之迭代器、生成器、装饰器的完整攻略。希望能对您有所帮助。