[英]Using `for` in `range(x)` loop
兩個代碼塊都不應該打印相似的結果嗎? 為什么每次到達內部for語句時都會重新評估內部循環內的范圍函數,而外部循環中的范圍函數僅被評估一次?
x = 4
for j in range(x)
for i in range(x)
print i
x = 2
結果
0
1個
2
3
0
1個
0
1個
0
1個
我知道打印的前4個整數(0-3)是j在range(x)中的代碼的結果:代碼,但是為什么還要打印以下內容?
0
1個
0
1個
0
1個
編碼
x = 4
for j in range(x):
print i
x = 5
版畫
0
1個
2
3
IDLE中的附加信息Python 2.7
函數range(x)
產生[0,1,2,3,4]
的列表。 在for
循環中,您遍歷此列表。
您的代碼等效於:
for j in [0,1,2,3]:
for i in [0,1,2,3]:
print i
for i in [0,1]:
print i
for i in [0,1]:
print i
for i in [0,1]:
print i
我只能通過遍歷循環的迭代來進行解釋,所以這里是:
x = 4
for j in range(x)
for i in range(x)
print i
x = 2
第一次通過。
x = 4
for j in [0, 1, 2, 3]
for i in range [0, 1, 2, 3]
print i
x = 2
版畫
0
1
2
3
現在x設置為2,但是外部循環范圍已經執行,因此不重新評估。
現在的代碼變為:
for j in [0, 1, 2, 3]:
for i in [0, 1]:
print i
x = 2
版畫
0
1
並且這將繼續兩次。
僅對一次range(x)進行一次評估,即,當循環開始時,這就是為什么在循環內修改x無效的原因。
但是,在第一個代碼時鍾中,您將內部的x更改為2,因此,下次執行內部循環時,范圍僅給出(0,1)。
編輯:您的第一段代碼等效於
x = 5
for i in range(x)
print i
x = 2
這是我的看法:
內循環針對外循環的每次迭代執行
x = 4
j = 0
for i in range (x):
print(i)
x = 2
j = 1
for i in range(x) # this x is no longer 4 but it is 2
print(i)
x = 2
j = 2
for i in range (x): # this x is, of course, 2
print(i)
x = 2
j = 3
for i in range (x): # this x is, of course, 2
print(i)
x = 2
j未打印,請在范圍(x)中為i插入“ print('xx',j,'oo')”
然后更改為“ print('xx',x,'oo')
或將“對於范圍(x)中的j:”更改為“對於范圍(225,200,-5)中的j:”,然后在“對於范圍(x)中的i:”前跟“打印(j)”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.