for

作者: 老鼠慎言 | 来源:发表于2018-08-26 16:06 被阅读8次

    深层次原因:

    • python 中的for循环实质上是一个迭代器,迭代器在一个独立的线程中工作,并且拥有mutex(互斥)锁,即只有一个进程能访问这个可迭代对象。
    • 当迭代器被创建时,在这里是\color{red}{for},它生成一个内存索引表,这个表指向可迭代对象,在这里是range(8)。当i改变时,因为mutex锁的原因,这个索引表的内容并没有同步改变。也可以说成,此\color{red}{i}非彼\color{red}{i}

    当然, python中的\color{red}{for}循环也是可以改变循环次数的,重点在这句话--\color{red}{for}这个迭代器建立的内存索引表指向一个可迭代对象。
    我们来看看列表,例如

    a= [1,2,3,4]
    

    这个a列表本质上是对a[0],a[1],a[2],a[4]的引用,而又因为列表本身是一个可迭代对象,所以我们改变这个列表(可迭代对象)的内部引用即可

    count = 0
    for i in a:
       a[1:] = [1]
       count += 1
    print(count)
    

    count 的结果为2
    而上面的\color{red}{range}我们是没办法对其内部操作的,第一个i是对内存索引表的挨个查找,第二个i是新的对象
    而对于列表,我们直接改变了可迭代对象的结构,也就是说内存索引表本身发生了变化

    相关文章

      网友评论

          本文标题:for

          本文链接:https://www.haomeiwen.com/subject/ymuoiftx.html