在我的 Jupyter 笔记本(Python 3)中,我一遍又一遍地使用变量
kk
:
kk = 7
for kk in range(2): # ranging from 0 to 1
for kk in range(90,92): # ranging from 90-91
for kk in range(10,12): # ranging from 10-11
print(kk)
kk
据我了解,
for kk in range(2)
循环使用自己的 kk
变量(范围),并且不关心上面定义的 kk
,也不关心其他循环中的 kk
。 for kk in range(90,92)
循环和for kk in range(10,12)
循环也是如此。为什么他们都覆盖了全局定义的kk
,使得最终的kk
是11,但他们却从不读取全局的kk
?
我正在尝试理解范围和名称空间。但我预料到了:
kk
,因为它们在自己的作用域中使用 kk
(这是我所期望的,因为 Python 中的 命名空间和作用域);或kk
现在设置为 10
,它位于最外层循环所需的范围之外。我认为Python中的作用域和命名空间试图解释它,但我不明白。
那么 kk 会改变每个循环的每一步。
for 不像 C++ 或 C# 中那样是静态的,所以它实际上并不关心 kk 是否在中间发生变化。
kk = 7 # Here it is 7
for kk in range(2):
# Here kk is 0
for kk in range(90,92):
# Here kk is 90
for kk in range(10,12):
# Here kk is 10 and 11
print(kk) # <- 10\n11
# Now it goes for the second loop
for kk in range(90,92):
# Here kk is 91
for kk in range(10,12):
# Here kk is 10 and 11
print(kk) # <- 10\n11
# Now the inner loop is finished so it goes all over again
for kk in range(2):
# Here kk is 1
for kk in range(90,92):
# Here kk is 90
for kk in range(10,12):
# Here kk is 10 and 11
print(kk) # <- 10\n11
# Now it goes for the second loop
for kk in range(90,92):
# Here kk is 91
for kk in range(10,12):
# Here kk is 10 and 11
print(kk) # <- 10\n11
# Now the outer loop has finished so the job is finished, last kk value is 11
# Since you implemented kk before the loops the last value is not lost.
Python 不关心你在循环中使用什么变量。
例如
some_list = [1,2]
for item in some_list:
some_list.remove(item) # <- this will work but once
这将适用于一次迭代,1 将被 2 删除,因为 python 从索引 0 -> 1 -> 2 开始,因为它找到了索引 0,它进行了迭代,然后找不到索引 1,所以它已经结束
如果你去
some_list = [1,2]
for item in some_list:
some_list.append(item)
你将得到 [1, 2, 1, 2, 1, 2, ...] 的无限循环
因为您使用 range(X),它只是创建一个数字列表,然后使用该列表,因此不存在过度使用 kk 的问题,但每个循环都会丢失以前的值。