1

我在 Python 中遇到了内置函数 locals() 的奇怪行为。很难准确解释,但请看一段代码:

def Main():
  def F(l=locals()):  print 'F', id(l), l
  a= 100
  F()
  print '1', id(locals()), locals()
  F()

在本地函数F中,我将locals()intol作为附件的默认值。因为locals()是 a dict,所以它的引用被复制到l。所以最后三行应该有相同的结果。

然而结果是这样的:

F 139885919456064 {}
1 139885919456064 {'a': 100, 'F': <function F at 0x7f39ba8969b0>}
F 139885919456064 {'a': 100, 'F': <function F at 0x7f39ba8969b0>}

这三个print语句几乎同时被调用,idoflocals()和ofl是一样的,但是第一个linF没有内容。

我不明白为什么会这样。谁能解释这种现象?或者这是一个已知/未知的错误?

非常感谢!

4

1 回答 1

4

如果您阅读该功能的文档locals,您会看到

更新并返回一个表示当前本地符号表的字典。自由变量在函数块中调用时由 locals() 返回,而不是在类块中。

locals()不只是返回局部变量的字典;它还更新dict 以反映当前的局部变量值。

于 2017-05-19T17:42:21.673 回答