鱼C论坛

 找回密码
 立即注册
查看: 2834|回复: 3

关于python的for的用法的问题

[复制链接]
发表于 2017-1-18 17:13:46 | 显示全部楼层 |阅读模式
2鱼币
代码:
for i in range(10):
        if i!=5:
                i+=2
                print(i)

               
结果:
2
3
4
5
6
8
9
10
11

我想问一下:在c里,在循环体中对循环变量进行操作会影响for循环,但在python里好像这种操作没有影响,比如在循环体里当print(i)=10时,此时i在循环体里等于10,可是回到下一次for循环判断时,是按i=9来做的,谁能解释一下呢?

最佳答案

查看完整内容

Python 中 for 循环不能修改循环变量的原因是:range() 像是一个迭代器,它只会输出信息,而不能修改迭代器的内容。Python 迭代器的 C 结构是一个指针和一个对象列表。修改循环对象的值是 C 的思维方式,最好不要用在写 Python 代码上。所以你问的问题不在于能否修改 i,而是修改迭代器的行为,答案是不能。因为每次循环之后 for 语句又会重新对 i 赋值,若你非得要修改 i 的值,你可以用 while 循环,或者用个生成器。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-18 17:13:47 | 显示全部楼层
Python 中 for 循环不能修改循环变量的原因是:range() 像是一个迭代器,它只会输出信息,而不能修改迭代器的内容。Python 迭代器的 C 结构是一个指针和一个对象列表。修改循环对象的值是 C 的思维方式,最好不要用在写 Python 代码上。所以你问的问题不在于能否修改 i,而是修改迭代器的行为,答案是不能。因为每次循环之后 for 语句又会重新对 i 赋值,若你非得要修改 i 的值,你可以用 while 循环,或者用个生成器。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-18 19:13:45 | 显示全部楼层
for循环里,将range(10)生成的列表的值一一返回给i,相当于赋值,每次返回i都会被重置,自然不会影响循环。这里的range(10)可以是其他列表,只是不一定能算数运算。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-1-19 09:57:22 | 显示全部楼层
因为你每次循环的时候都是把range的列表一一给变量i,所以你在循环内部赋值,不会影响循环变量
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-25 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表