python中的for循环是一个通用的序列迭代器,可以遍历任何有序的序列对象内部的元素,(注意是遍历),也就是说循环的方式一开始就固定好了,本质上是遍历。
python:代码
count = 0for i in range(8): if i % 2 == 0: i += 2 print(i, end=' ') count += 1print('\n总次数',count)
返回结果
2 1 4 3 6 5 8 7 总次数 8
我的本意是想让这个程序遇到偶数跳两个,很显然,它还是执行了八次
而c++代码就可以用for实现这个功能:
for(int i = 1; i<=8;i++) { if(i%2==0){ i += 2; } cout<<i<<' '; }
结果为
1 4 5 8
python里要简单的实现上述功能,则需要用while了。
总结: 里的 只是对一个有序序列的遍历
深层次原因:
python 中的for循环实质上是一个迭代器,迭代器在一个独立的线程中工作,并且拥有mutex(互斥)锁,即只有一个进程能访问这个可迭代对象。
当迭代器被创建时,在这里是,它生成一个内存索引表,这个表指向可迭代对象,在这里是range(8)。当i改变时,因为mutex锁的原因,这个索引表的内容并没有同步改变。也可以说成,此非彼。
但是如果是引用,那没有问题,这也很容易理解,比如在循环里打印print(i+2)什么的,都可以的。引用的还是那个
当然, python中的循环也是可以改变循环次数的,重点在这句话--这个迭代器建立的内存索引表指向一个可迭代对象。
我们来看看列表,例如
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是新的对象
而对于列表,我们直接改变了可迭代对象的结构,也就是说内存索引表本身发生了变化。
while
Python中的while循环是当条件满足时,便一直执行,当条件不满足时,会停止
例如
while True: print(1)
上面例子就是一个死循环。