python中的循环for 和 while

作者 : 开心源码 本文共905个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共182人阅读

近期在写代码是发现python中的for和c++的for 不同的地方

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了。
总结:\color{red}{python} 里的 \color{red}{for} 只是对一个有序序列的遍历
2018-8-26补充

深层次起因:

  • python 中的for循环实质上是一个迭代器,迭代器在一个独立的线程中工作,并且拥有mutex(互斥)锁,即只有一个进程能访问这个可迭代对象。
  • 当迭代器被创立时,在这里是\color{red}{for},它生成一个内存索引表,这个表指向可迭代对象,在这里是range(8)。当i改变时,由于mutex锁的起因,这个索引表的内容并没有同步改变。也可以说成,此\color{red}{i}非彼\color{red}{i}
  • 但是假如是引使用,那没有问题,这也很容易了解,比方在循环里打印print(i+2)什么的,都可以的。引使用的\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 = 0for i in a:   a[1:] = [1]   count += 1print(count)

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

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » python中的循环for 和 while

发表回复