Python:本地人的奇怪行为()

时间:2017-05-19 17:33:39

标签: python locals

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

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

在本地函数F中,我将locals()分配到l作为附加内容的默认值。由于locals()dict,因此其引用将复制到l。所以最后三行应该有相同的结果。

但结果是这样的:

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

几乎同时调用了三个print语句,idlocals()的{​​{1}}相同,但使用了第一个ll中没有内容。

我无法理解为什么会这样。谁能解释这个现象?或者这是一个已知/未知的错误?

非常感谢!

1 个答案:

答案 0 :(得分:4)

如果您阅读locals功能的docs,则会看到

  

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

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