Python迭代器与生成器要怎么理解?

迭代器协议意味着对象必须提供下一个next方法。执行此方法将返回迭代中的下一个项目,或导致stoplteration异常终止迭代。而生成器可以理解为一种数据类型,它可以自动实现迭代器协议(其他数据类型需要调用它们自己的内置__iter__方法),因此生成器是可迭代的对象。那么到底Python迭代器与生成器要怎么理解?在Python中,使用for... in ...来对list、tuple、set和dict数据类型并过滤掉所有数据。 如下:

Python迭代器与生成器要怎么理解?_业界动态_行业云

for element in [1, 2, 3]:

print(element)

for element in (1, 2, 3):

print(element)

for key in {'one':1, 'two':2}:

print(key)

for char in "123":

print(char)

for line in open("myfile.txt"):

print(line, end='')

 1、迭代器

对字符串,列表,使用内置函数 iter 转化为可迭代对象, 使用next关键字,可迭代对象每次取其中的一个值。如下面代码:

nums = [1,2,3,4]

nums = iter(nums)

print(next(nums))

print(next(nums))

print(next(nums))

print(next(nums))

输出

1

2

3

4

如果超出数据的长度,将会报错 StopIteration

nums = [1,2,3,4]

nums = iter(nums)

print(next(nums))

print(next(nums))

print(next(nums))

print(next(nums))

print(next(nums)) # 超过数据长度,报错 StopIteration

 2、生成器

使用生成器可以创建迭代器。生成器主要使用 yeild 关键字,每次调用 next 时会与yeild 定义的对应。例如:我们需要取 10~20之间的数据,步长为2,可以使用如下code

for x in range(10,20,2):

print(x)

但是如果步长设置为 0.5,如下代码:

for x in range(10,20,0.5):

print(x)

将会报错

TypeError: 'float' object cannot be interpreted as an integer

这个时候,我们就可以使用 生成器来自定义一个函数

def drange(start,stop,step):

x = start

while x< stop:

yield x

x += step

for x in drange(10,20,0.5):

print(x)

再举一个例子:

给定一个字符串,倒叙排列:

def reverse(data):

for x in range(len(data)-1,-1,-1):

yield data[x]

for x in reverse('gold'):

print(x)

看到这里,相信大家对于Python迭代器与生成器已经有了一定的理解。关于更多关于Python的干货内容,尽在,从零基础到进阶提升各个学习阶段的学习内容都在等着你。

82
54
0
31

相关资讯

  1. 1、摸金玦之守护人:没一个顶流明星,却用演技说话!这才是良心作品4417
  2. 2、唐嫣新婚生活甜蜜挽手罗晋进入父母的住所幸福感十足4153
  3. 3、上一秒流泪,下一秒发狠,于和伟《悬崖之上》中的变脸式演技3611
  4. 4、日本票房黑马《摄影机不要停》曝预告1911
  5. 5、他是李冰冰同班同学,出道20年不温不火,47岁结婚陈坤当伴郎2771
  6. 6、《柠檬》明日公映备受瞩目获选值得期待影片264
  7. 7、《说好不流泪》无惧收视率制片人:市场不正常2668
  8. 8、《仙剑3》雪见、长卿、龙葵、紫萱纷纷结婚了,景天怎么办2306
  9. 9、柳岩穿背带裙也能妩媚性感,照片却意外曝光家中田园豪宅2794
  10. 10、贾静雯美得惊动外媒,不老女神活出幸福的模样3759
全部评论(0)
我也有话说
0
收藏
点赞
顶部