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/m.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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP