1.迭代器(Iterator)

迭代器是访问集合元素的一种方式。有下面特点:

1)每次调用__next__()方法只访问一个元素,而且不能后退,便于循环比较大的数据集合,节省内存;(当容器中没有可访问的元素后,next()方法将会抛出一个StopIteration异常终止迭代器)

2)只能从头到尾访问,不能随机访问某个值;

3)迭代器提供了一个统一的访问集合的接口,只要定义了iter()方法对象,就可以使用迭代器访问。

迭代器使用:

lis=['a','b','c','d']
a=iter(lis)
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())    #没有元素获取,导致StopIteration报错

#运行结果
a
b
c
d
Traceback (most recent call last):
  File "F:/Python/pythoncode/s12/study/study5.py", line 318, in <module>
    print(a.__next__())
StopIteration

使用for循环访问迭代器:

lis=['a','b','c','d']
a=iter(lis)
for st in a:
    print(st)

#运行结果
a
b
c
d


2.生成器(Generator)

一个调用返回迭代器的函数,就叫做生成器。函数中包含yield语法,这个函数就会变成生成器。

 1)生成器表达式

用来生成有规律的生成器

格式:generator_name=('生成规则’ for i range(num) if 'i的条件‘)

 1 a=('a' for i in range(5) if i%2)
 2 b=(i+1 for i in range(5))
 3 print(a,type(a))
 4 print(b,type(b))
 5 print(b.__next__())
 6 print(b.__next__())
 7 print(b.__next__())
 8 print(b.__next__())
 9 print(b.__next__())
10 
11 #运行结果
12 <generator object <genexpr> at 0x00F9CAE0> <class 'generator'>
13 <generator object <genexpr> at 0x00F9CC90> <class 'generator'>
14 1
15 2
16 3
17 4
18 5
生成式表达式

相关文章: