loader
04 Mar , 2019

Python中for循环里的变量无法被引用的解决方法

author

缪芮珂 CSDN博客

shape animated shape animated shape animated

使用第三方账号注册

使用手机号/邮箱注册

在之前的编程语言里,学到for循环里面是可以重置变量i的值的,然后让整个for循环从头开始,但是在python里面却行不通这是为什么呢?

在python中,for循环相当于一个迭代器(Iterator),在循环体中改变循环变量的值对循环次数是没有影响的。 

迭代器在一个独立的线程中工作,并且拥有一个mutex锁。迭代器被创建的时候,建立了一个内存索引表(单链表),这个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错误。就是说迭代器在工作的时候,是不允许被迭代的对象被改变的。 

举个例子,i从0到10循环,j取i+1到10,如果i+j大于5,则i跳到当前的j,并进行后面的循环(不知道怎么描述才对,看不明白就直接看代码吧/(ㄒoㄒ)/~~)。

用for循环写就是:

print("when we use 'for':")
for i in range(10):
    print('i:',i)
    for j in range(i+1,10):
        print('\tj=',j)
        if i+j<5:
            j=j+1
            continue
        else:
            i=j
            break

运行结果:

when we use 'for':
i: 0
        j= 1
        j= 2
        j= 3
        j= 4
        j= 5
i: 1
        j= 2
        j= 3
        j= 4
i: 2
        j= 3
i: 3
        j= 4
i: 4
        j= 5
i: 5
        j= 6
i: 6
        j= 7
i: 7
        j= 8
i: 8
        j= 9
i: 9

从运行结果可以看出,i并没有变动。

List、Set等是动态的、可变对象数量的数据结构,但是迭代器是单向不可变、只能顺序读取、不能逆序操作的数据结构,当迭代器指向的原始数据发生变化时,迭代器自己就迷失了方向。因此,我们可以改用while循环:

print("\nwhen we use 'while':") 
i=0
while i < 10:
    print('i:',i)
    j=i+1
    while j < 10:
        print('\tj=',j)
        if i+j<5:
            j=j+1
            continue
        else:
            i=j
            break
    i=i+1

运行结果:

when we use 'while':i: 0
        j= 1
        j= 2
        j= 3
        j= 4
        j= 5i: 6
        j= 7i: 8
        j= 9

此时就得到了我们想要的效果。

如果要想该变循环次数的话可以使用while语句,需要注意的是,while循环的运行效率比for循环低,所以会花费较多的时间。

以上就是关于“Python中for循环里的变量无法被引用”的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流。

Robin Binar Themeix

Onubia, turpis inceptos pharetra. Ipsum erat rutrum, luctus non rhoncus quam quisque posuere, eros pede leo facilisis at risus. Ea sit consectetuer suscipit pede hac purus, erat nec

猜你喜欢

WinSxS是什么,C盘WinSxS是什么文件夹?

11 Dec , 2018

2018-12-11 00:01

mac下安装composer,macos系统下全局安装composer

11 Dec , 2018

2018-12-11 00:11

区块链是什么,区块链到底是什么意思,看完这段话就懂了

11 Dec , 2018

2018-12-11 00:19

wireshark使用教程,网络抓包工具wireshark中文版使用教程

11 Dec , 2018

2018-12-11 00:48

VBS整人代码大集合,学会用VBS来编小程序对心仪的女神表白

11 Dec , 2018

2018-12-11 02:06

网友评论 ( 0 条评论 )

评论