【问题标题】:Python for loop, global vs localPython for 循环,全局与本地
【发布时间】:2023-03-03 07:52:23
【问题描述】:

这里是初学者,尝试使用 Python3 理解 for 循环。有人可以在下面的代码中解释为什么在 for 循环之外返回值 5 吗?如果在 for 循环之外调用变量,Python 是否只返回最大数?

for x in range(0,6):
    print(x) #here is the expected output of (0,1,2,3,4,5)

print(x) #this just returns 5, why?

【问题讨论】:

  • Python 保留循环中使用的变量的最后一个值。尝试使用范围内的值。
  • 好问题!我认为这会给你一个错误,因为x 应该是循环的局部变量,但显然它不会立即被垃圾收集。
  • @nbro for 循环不会创建新范围。这与垃圾回收无关,变量是为整个命名空间(函数和模块)定义的。另请参阅this answer

标签: loops python-3.x for-loop


【解决方案1】:

根据language reference(强调我的):

for 循环对目标列表中的变量进行赋值。这将覆盖所有先前对这些变量的赋值,包括在 for 循环套件中所做的赋值:

[…]

目标列表中的名称在循环结束时不会被删除,但如果序列为空,则它们根本不会被循环分配。

因此,当您在从 0 到 6 的数字范围内进行迭代时,这些值会在每次迭代中分配给 x。所以在第一次迭代中,你得到x = 0,第二次得到x = 1,依此类推,直到x = 5(这是范围内的最后一个数字)。

然后,当 for 循环按规定结束时,变量 x没有被删除,所以 x 仍然存在并且仍然具有分配给它的值 5最后的迭代。


最后,由于您似乎对 x 最终 5(而不是 0, 1, 2, 3, 4, 5)感到惊讶,请注意,在每次迭代中,x 只有一个值。 for 循环中的 print(x) 只执行了 6 次,x 每次都有不同的值。但是,这不会导致您声明的输出;每行仍然是一个数字。您的代码基本上与以下没有循环的代码相同:

# the for loop does this:
x = 0
print(x)
x = 1
print(x)
x = 2
print(x)
x = 3
print(x)
x = 4
print(x)
x = 5
print(x)

# and this follows the loop:
print(x)

【讨论】:

  • 优秀的解释戳。非常感谢,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2022-10-20
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多