Python: Why can't I modify the current scope w

2020-04-17 05:52发布

Why does creating/modifying a member of locals() not work within a function?

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条回答
霸刀☆藐视天下
2楼-- · 2020-04-17 06:12

Why would it? It's designed to return a representation, and was never intended for editing the locals. It's not ever guaranteed to work as a tool for such, as the documentation warns.

查看更多
闹够了就滚
3楼-- · 2020-04-17 06:25

locals() return a copy of the namespace (which is the opposite of what globals() does). This means that any change you perform on the dictionary returned by locals() will have no effect. Check in dive into python at example 4.12.

查看更多
登录 后发表回答