Python 板


LINE

(Python 2.7) 想请问for loop的写法中, for x in iterator, 而这个iterator会随着loop而更动的话 规则是什麽?举例如下 (1) k=10 for x in range(k): print x, k=k-1 ------------------------------ console: 0 1 2 3 4 5 6 7 8 9 (2) a=range(10) for x in a: print x del(a[len(a)-1]) ---------------------------- console: 0 1 2 3 4 这两个的都是每次loop中都会改到原始iterator的长相 为什麽系统就认为在(1)的case中:range(k)=range(10) fixed 但是却在(2)的case中知道要每次都修正一次a 目前我只能说服自己说就这系统对於这两种写法有不同作为 请问有规则或其他解释吗? 谢谢! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.255.25.34
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1506156622.A.78D.html
1F:推 jamesxxx1997: 建议不要在回捐内原地修改 09/23 17:31
2F:推 jamesxxx1997: 可以改成 : 1. 建立新串列、放入想要的元素 09/23 17:34
j我知道有其他写法 只是我想知道不同的点XD 因为如果理解正确的话 这两个print出来要一样 现在不一样 一定有哪个地方理解错了@@
3F:推 Sunal: 1. in py27 type(range(x)) 是list 09/23 17:36
4F:→ Sunal: 在(1)里面 range(k) 就是 [0, 1, 2, ...] 09/23 17:37
5F:→ Sunal: loop里面改k自然没作用 09/23 17:38
S大 可是2.的case type(a)也是list耶 ※ 编辑: znmkhxrw (111.255.25.34), 09/23/2017 17:42:11
6F:推 Sunal: 这在py3结果也是一样 09/23 17:40
7F:推 Sunal: 其实这两种caes 本来做的事情就不一样...... 09/23 17:47
8F:推 Sunal: k=k-1不会去改变list的长度阿 09/23 17:52
9F:推 wennie0433: 不一样的事情啊XD 09/23 18:00
10F:→ stucode: 在for回圈中,in後面的陈述式只会被求值(evaluated) 09/23 18:35
11F:→ stucode: 一次。在(1)之中,唯一的那一次就是首次进回圈呼叫 09/23 18:35
12F:→ stucode: range(k)求值,之後会利用求值结果[0, 1, ..., 8, 9] 09/23 18:35
13F:→ stucode: 来进行iteration,无论k在回圈中如何变化,range(k) 09/23 18:35
14F:→ stucode: 都不会再被呼叫第二次,也不会影响iteration的过程。 09/23 18:35
15F:推 bxxl: 楼上正解,range(k)执行一次後就与之後的k值无关 09/23 18:38
16F:→ bxxl: x in a这个被执行一次则会指向a的本体(不会创造副本) 09/23 18:39
17F:→ bxxl: 所以去修改a,就会影响loop行为 09/23 18:40
18F:推 jamesxxx1997: 谢谢bxxl大,受益良多XD 09/23 20:44
原本我也接受这说法 因为可以case1,2都过得去 但是刚刚试了: a=range(10) for x in a: print x a=[2,3] 我跟case2一样改变a 但是却跑出跟case1一样的结果..... ※ 编辑: znmkhxrw (111.255.25.34), 09/23/2017 20:51:59
19F:推 Sunal: 简单来说a只是指向range(10) loop里面只是把a改成指向[2,3] 09/23 21:45
20F:→ stucode: 就像楼上说的那样,a=[2,3]只是把名称a重绑定到一个 09/23 21:59
21F:→ stucode: 新的list[2, 3],原本的iterator不会因此受到影响。 09/23 21:59
22F:推 Sunal: 善用id() 就容易理解了 09/23 22:01
好 我试试看 谢谢你们的解释^^ ※ 编辑: znmkhxrw (111.255.25.34), 09/23/2017 22:04:42
23F:→ znmkhxrw: 用id真的看出一些端倪 我再比较一下 09/23 22:12
24F:推 karta0910489: 推详细 上了一课 09/27 10:33







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP