Python中有一個問題:
循環變量泄漏
-
第一種情況
構造一個實際的環境,當連上WiFi的時候,手機才能更新app,下面的是網絡環境的判斷
可以看到,這里的 x 是一個在for循環的局部變量,按照正常的理解,
在for循環外面調用 x 應該是報錯的,
但是在Python中,
for循環里面聲明的變量,在for循環結束后,會保留 x 的值。
上面的輸出的結果,第一個 x 的值當然是 WiFi,
第二個值就是遍歷完列表之后,列表最后一個值4G。
-
第二種情況
那如果我們直接聲明一個全局變量呢,最后輸出的會是最開始的值嗎?
下面的代碼只是加了第3行,初始化了一下全局變量 x:
輸出的結果:
還是和第一種情況一樣,
充分說明了Python中,for循環中聲明的臨時變量的值會保留下來,
壞處很明顯,
一個局部變量沒有被銷毀,反而保留了下來,習慣其他語言的程序員寫起來很別扭,
一個不注意,可能還會有bug,一個后面怎么都不會想到的會出問題的地方,
避免起來很簡單,
注意好命名就行,不要隨便命名,全局變量和局部變量同名本來也不是個好習慣。
-
語法上的規避方法
下面是Python中列表推導式,在Python3中被優化過,
其實看到下圖的紅色波浪線,就大概知道,x 在這種情況下,只是一個局部變量了。
輸出結果:
顯而易見,報錯是 x 沒有定義,x 已經被當作是局部變量了
- 我們再試一種情況
聲明一個全局變量 x,值為WiFi,
輸出結果:
輸出都是WiFi,第4行的 x 已經沒有影響了。
所以平時要注意Python中的一些坑,
Python易用的同時,也有難用的地方。
-
變量
+關注
關注
0文章
613瀏覽量
28361 -
for
+關注
關注
0文章
44瀏覽量
15811 -
python
+關注
關注
56文章
4792瀏覽量
84630
發布評論請先 登錄
相關推薦
評論