• 人生苦短之Python迭代器


         迭代

         在Python中,如果给定一个list或者touple,我们可以通过for循环来遍历,将值依次取出,这种遍历称为迭代。

          在Python中是通过for...in..来进行遍历的,在Java中则是通过下标来遍历 for(int i;i<length;i++){},Python作为解释性语言,在语法上是十分简单的,可以遍历数组集合,也可以遍历字典。看下面的例子:

    for name in names:
        print(name)
    
    person = {'name': '张三', 'age': 14, 'sex': '男'}
    
    for key in person:
        print(key)
    for value in person.values():
        print(value)
    for item in person.items():
        print(item)
    
    for i, value in enumerate(names):
        print(i, value)
    

          遍历一个list或者touple使用for..in..,也可以直接遍历字典的key或者value或者字典里地item,同样地如果我们需要跟其他语言中的那样的下标的话,我们可以使用for i,xx in .. 来获取下标,由此呢,我们也可以进行引用多个变量来进行迭代,例如将key和value值全部分别遍历,可以使用for key, value in dic.item 来进行遍历,使用起来是非常灵活地。

         迭代器

         list,dict,str等数据类型都可直接使用for循环遍历,这些被称为可迭代对象:Iterable,而生成器不但可以使用for循环遍历,还可以调用next()函数不断的调用返回下一个值,直到最后抛出StopIteration错误无法返回下一个值,这种可以被next()函数不断调用返回下一个值的对象称为迭代器:Iterator。

          生成器都是iterator对象,但是list,dict,str等数据类型却不是迭代器,因为迭代器都是可以被next()函数调用不断地返回下一个值,它的大小是未知的,它需要生成了下一个值才会计算。我们可以使用iter()函数将这些可迭代对象变成迭代器。

         上面提到了生成器,生成器是什么呢?

         我们先来看下列表生成式。我们生成一个列表,可以这样做:

         生成一个1-9的平方值的列表

         L=[]

         for x in range(1,10):

               L.append(x*x)

         如果用列表生成式可以是这样:L=[x*x for x in range(1,10)],同时我们还可以加一些判断,比如我只想要偶数的平方值,可以在后面加个if判断。了解了列表生成式,我们在看下生成器。

         最简单地创建生成器的方式,L=(x*x for x in range(1,10)),将[]换成(),那么完成后的区别在哪里呢?

         如果是列表生成式,我执行了一个列表生成式,它会根据生成式的条件立即生成一个列表,然后我可以对这个列表进行遍历(迭代),这也就是上面说的list是可迭代对象;

         如果它是个生成器,我运行了后它不会立即生成一个我想要的列表,它比较懒,它会在我需要的时候跟我生成一个我想要的值,什么时候是我需要的呢,就是调用next()函数的时候,通过next()函数获得生成器的下一个返回值,直到最后一个元素,没有值了抛出StopIteration错误。它里面保存的不是计算好的值,而是计算的算法,每次需要的时候给计算出来。

         可以作用于for循环遍历的对象都是可迭代对象

         可以作用于next()函数的对象都是迭代器对象

         我也学的有点蒙圈,暂时先这样理解,在今后用的地方多了加深对这方面的理解。

  • 相关阅读:
    wx.showToast 延时跳转~~~
    wx.request 获取不到post传递的值
    G,sql中select 如果太长,可以在后面放G,竖行显示~~~~
    用for语句从数组中剔除数据,注意,count,要放到for语句之外才行
    读代码还是读文档,来自知乎
    聊聊我对写好程序的认识
    open() 函数以 r+ 模式打开文件
    open()
    Python 流程控制:while
    Python 序列
  • 原文地址:https://www.cnblogs.com/dreamyu/p/7107986.html
Copyright © 2020-2023  润新知