目录
1.3案例演示: 以下是一个简单的迭代器示例,遍历一个列表并打印每个元素:
Python是一种功能强大而灵活的编程语言,拥有许多强大的特性和工具,其中包括"一闭三器"——迭代器、生成器、装饰器和闭包
只要是可以通过for...in…的形式进行遍历的,那么这个数据类型就是可以迭代的
迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,迭代器对象从第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器有两个方法:iter()和next()方法
- class MyIterator:
- def __init__(self, data):
- self.data = data
- self.index = 0
-
- def __iter__(self):
- return self
-
- def __next__(self):
- if self.index >= len(self.data):
- raise StopIteration
- item = self.data[self.index]
- self.index += 1
- return item
-
- my_list = [1, 2, 3, 4, 5]
- my_iter = MyIterator(my_list)
-
- for item in my_iter:
- print(item)
凡是可作用于for循环的对象都是Iterable 类型;
凡是可作用于 next() 函数的对象都是Iterator 类型;
集合数据类型如list 、dict、str等是 Iterable但不是Iterator,不过可以通过 iter()函数获得一个Iterator对象
特点:
优点:
缺点:
__iter__()
和__next__()
方法,有些繁琐。介绍: 生成器是一种特殊类型的迭代器,它可以以更简洁的方式生成值。
案例演示: 以下是一个生成器示例,生成斐波那契数列:
- def fibonacci():
- a, b = 0, 1
- while True:
- yield a
- a, b = b, a + b
-
- fib = fibonacci()
- for _ in range(10):
- print(next(fib))
特点:
yield
关键字简化了迭代器的创建。优点:
缺点:
介绍: 装饰器是一种用于修改函数或方法行为的技术,允许在不修改原始函数代码的情况下添加额外的功能。
案例演示: 以下是一个装饰器示例,用于测量函数执行时间:
- import time
-
- def timing_decorator(func):
- def wrapper(*args, **kwargs):
- start_time = time.time()
- result = func(*args, **kwargs)
- end_time = time.time()
- print(f"{func.__name__} took {end_time - start_time} seconds to run.")
- return result
- return wrapper
-
- @timing_decorator
- def slow_function():
- time.sleep(2)
-
- slow_function()
特点:
优点:
缺点:
介绍: 闭包是一种函数,它可以访问其定义范围之外的变量,即使外部函数已经执行完毕。
案例演示: 以下是一个闭包示例,创建一个计数器函数:
- def counter():
- count = 0
- def increment():
- nonlocal count
- count += 1
- return count
- return increment
-
- counter1 = counter()
- print(counter1()) # 输出1
- print(counter1()) # 输出2
-
- counter2 = counter()
- print(counter2()) # 输出1
特点:
优点:
缺点:
一闭三器属于进阶语法,我们需要有强大的基础才能实际开发中运用,当我们运用得当,它能成为我们很实用的工具,为我们减轻很多代码,以及提示代码的质量