ограниченный exec: не может присвоить новое значение переменной? - PullRequest
0 голосов
/ 18 апреля 2019

Имея этот код:

x = 10
exec('x += 5', {}, {'x': x})
print(x)  # prints 10.

# This works of course
exec('x += 5')
print(x)  # prints 15.

Почему он игнорирует мое x += 5 выражение? Есть ли что-то еще, что я удаляю, ограничивая глобальные / локальные значения на exec, чтобы это не позволило изменить переменную?

P.S. Хотя это работает, если я изменяю словарь. Возможно, это связано с неизменяемыми типами?

1 Ответ

2 голосов
/ 18 апреля 2019

Вот что происходит:

>>> x = 5
>>> loc = dict(x=x)
>>> exec('x += 5', {}, loc)
>>> print(loc)
{'x': 10}
>>> x
5
...