对for循环中的变量范围感到困惑
Puzzled about variable scope in for-loop
此代码将引发 NameError: name 'i' is not defined
:
for n in range(2, 101):
for i in range(2, n):
if n % i == 0:
break
if n % i != 0:
print(n, end=' |')
这段代码将无误地执行:
n = 97
if True:
for i in range(2, n):
if n % i == 0:
break
if n % i != 0:
print(n, end=' |')
谁能告诉我为什么?
这与范围无关,事实上 python 中的 for
循环不会创建自己的范围,除非它在 list comprehension
中。您收到错误的原因是 i
未在第一个代码中创建。
for n in range(2,101):
# at first iteration n == 2
for i in range(2,n):
# this is equivalent to range(2,2) in first iteration
因此,没有可迭代的内容,因此没有值分配给 i
。当它到达 n % i
时,它会抛出 NameError
.
第二块:
for i in range(2, n):
# value if i is 2
由于 i
有一个值,因此定义,它不会抛出 NameError
。
当 n
为 2 时,range(2,n)
将是一个空列表,因此该循环的主体根本不会执行。
此代码将引发 NameError: name 'i' is not defined
:
for n in range(2, 101):
for i in range(2, n):
if n % i == 0:
break
if n % i != 0:
print(n, end=' |')
这段代码将无误地执行:
n = 97
if True:
for i in range(2, n):
if n % i == 0:
break
if n % i != 0:
print(n, end=' |')
谁能告诉我为什么?
这与范围无关,事实上 python 中的 for
循环不会创建自己的范围,除非它在 list comprehension
中。您收到错误的原因是 i
未在第一个代码中创建。
for n in range(2,101):
# at first iteration n == 2
for i in range(2,n):
# this is equivalent to range(2,2) in first iteration
因此,没有可迭代的内容,因此没有值分配给 i
。当它到达 n % i
时,它会抛出 NameError
.
第二块:
for i in range(2, n):
# value if i is 2
由于 i
有一个值,因此定义,它不会抛出 NameError
。
当 n
为 2 时,range(2,n)
将是一个空列表,因此该循环的主体根本不会执行。