2 回答

TA貢獻1853條經驗 獲得超9個贊
從你的代碼說起:
1 squares = [] 2 for x in range(1, 5):3 squares.append(x)4 print(squares)
第一行:squares = []
定義了一個類型為列表的 squares 變量, 注意這個變量的作用域,這個變量是在 for 循環(huán)之外 。說得再直白點,就是變量 squares 從一開始進行了初始化,它的 id 在這段代碼中是固定的。
第二行:定義了 for 循環(huán)為 4 重循環(huán)。
第三行:將變量 x 的值保存到列表 squares 的 尾部 。
第四行:每次循環(huán)都要打印出來變量 squares 的 當前 值。
我們看代碼的運行情況,第一行定義了變量 squares 為空列表,再往下三行代碼是 for 循環(huán)結構體,并進行了 4 次 循環(huán)。那么第一次循環(huán)的時候,變量 x 的值是 1 ,被保存到列表 squares 中,此時,列表的 當前 值是 [1],第二次循環(huán)的時候,變量 x 的值是 2 ,被保存到當前的列表的尾部,也就是 [1] 的尾部,那就成為了 [1, 2],以此類推。
所以你可以通過下面的代碼看到,每次循環(huán),變量 squares 這個列表的 id 是不變的。
1 squares = [] 2 for x in range(1, 5):3 squares.append(x)4 print(squares)5 print(id(squares))
當然,如果你把對變量 squares 的定義放入 for 循環(huán)結構體中,它的 id 是會變化的嗎,你可以用這個代碼試試。
1 for x in range(1, 5):2 squares = [] 3 squares.append(x)4 print(squares)5 print(id(squares))

TA貢獻1906條經驗 獲得超10個贊
@藕絲空間 , 這里又有個疑問, 能不能再幫我看下?
squares = [] for x in range(1, 5): squares.append(x) print(squares)
結果是
[1] [1, 2] [1, 2, 3] [1, 2, 3, 4]
很多課程講的python代碼執(zhí)行流程:
1.python中代碼從上到下執(zhí)行.
2.循環(huán)內部的代碼會一直循環(huán), 直到條件不再成立.
然后
之前說到 squares = [],這個變量是在 for 循環(huán)之外.
第一次循環(huán)的時候,變量 x 的值是 1 ,被保存到列表 squares 中,此時,列表的 當前 值是 [1],
第二次循環(huán)的時候,變量 x 的值是 2 ,被保存到當前的列表的尾部,也就是 [1] 的尾部,那就成為了 [1, 2],
我的疑問是:
用pycharm的debugger單步運行了, 每次通過方法.append()增加的數據會被保存到頂行的列表squares = [] 里.
但squares = []在代碼塊的最上方, 又不在循環(huán)內部. 可為什么for循環(huán)一次, 它也能執(zhí)行一次呢? 可能自己有點鉆牛角尖, 走近死胡同了.
添加回答
舉報