为什么 for 块会覆盖 PHP 和 Python 中的外部范围?

Why do for blocks overwrites outer scope in PHP and Python?

在PHP或Python(其他语言可能适用)中,为什么在for(或foreach)中声明的值仍然存在(并覆盖)在外部范围内?

例如,在PHP中:

<?php

$value = 0;
$test = [1,2,3];

foreach ($test as $value) {
    echo $value;
}
echo $value;

(执行它(也有一个for循环)here)

将输出:

1233

并在 Python 中:

value = 0
test = [1,2,3]

for value in test:
  print(value)

print(value)

(执行here

将输出:

1
2
3
3

它可能适用于我还不知道的其他语言。

问题是为什么这些for块设计成这样? 为什么它不像(例如)C,其中索引变量仅存在于 for 范围内(例如 here)?

查看 this answer 以了解有关 python 范围的更一般性问题。

你可以看到 for-loops 根本不影响范围。没有创建新范围。在循环内,您可以像在循环外一样创建、读取和更新变量。

您的问题可以改写为 "why doesn't python use block scope?"。维基百科有很多关于这个主题的信息:en.wikipedia.org/wiki/Scope_(computer_science)#Levels_of_sco‌​pe

根据 SO 上的其他答案,有理论认为块作用域会使事情变得过于复杂,无论如何您都应该保持函数简短。如果您需要一个新的作用域,请创建另一个函数并调用它。