当前位置:网站首页>怎么理解Python迭代器与生成器?

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

2020-11-06 20:07:16 SXXpenguin

  怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list、tuple、set和dict数据类型进行迭代,可以把所有数据都过滤出来。如下:

  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迭代器与生成器已经有了一定的理解。关于更多的干货内容,尽在博学谷IT培训平台,从零基础到进阶提升各个学习阶段的学习内容都在等着你!

郑州无痛人流医院哪家好http://fk.zztjyy.com/

郑州看妇科哪家医院好http://www.zztjfk.com/

郑州看妇科哪家好http://www.xasgfuke.cn/

版权声明
本文为[SXXpenguin]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4531268/blog/4705782