Python: Почему я не могу изменить текущую область внутри функции, используя locals ()? - PullRequest
2 голосов
/ 26 марта 2009

Почему создание / изменение члена locals () не работает внутри функции?

Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> # Here's an example of what I expect to be possible in a function:
>>> a = 1
>>> locals()["a"] = 2
>>> print a
2

>>> # ...and here's what actually happens:
>>> def foo():
...  b = 3
...  locals()["b"] = 4
...  print b
...
>>> foo()
3

Ответы [ 2 ]

7 голосов
/ 26 марта 2009

С чего бы это? Он предназначен для возврата представления и никогда не предназначался для редактирования местных жителей. Не гарантируется, что он станет инструментом для таких целей, как предупреждает документация .

3 голосов
/ 26 марта 2009

locals () возвращает копию пространства имен (что противоположно тому, что делает globals ()). Это означает, что любое изменение, внесенное вами в словарь, возвращаемое функцией locals (), не будет иметь никакого эффекта. Проверьте погружение в python на примере 4.12.

...