Для переопределения цикла внешних переменных вместо создания новых - PullRequest
0 голосов
/ 18 ноября 2018

Так что я уже некоторое время работаю с Python, и как только я начинал думать, что у меня есть руки, я наткнулся на еще одну базовую концепцию, которую мне не хватало. Итак ..

Имея этот базовый цикл for (foreach):

x = 15
for x in range(10):
    continue
print(x)

Значение для x, которое я ожидал, было 15 , но вместо этого я получил 9 .

Тот же фрагмент кода в C возвращает исходное значение x - 15 :

#include <stdio.h>

int main(void) 
{
  int x = 15;
  for (int x = 0; x < 10; x++)
  {
    continue;
  }
  printf("%d", x);
  return 0;
}

Кажется, я не могу понять, как работает область действия переменной.Поскольку x объявляется вне области действия цикла for, не должна ли создаваться новая локальная переменная во время существования цикла?Почему тогда «x» переопределяется в версии Python?

1 Ответ

0 голосов
/ 18 ноября 2018

Это не то же самое.В C вы явно создаете новую переменную, тогда как в Python вы повторно используете имя в области действия for, заканчивая тем, что переопределяете предыдущее значение.

Таким образом, эквивалент C на самом деле:

#include <stdio.h>

int main(void) 
{
  int x = 15;
  for (x = 0; x < 10; ++x)
  {
    continue;
  }
  --x; // To accommodate the different behavior of the range loop
  printf("%d", x);
  return 0;
}

Не забывайте, что в Python переменные - это просто записи в словаре, создаваемые динамически, тогда как в C они являются независимыми статическими элементами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...