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

2024-03-29 15:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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中作为enclosure的默认值。因为locals()dict,所以它的引用被复制到l。所以最后三行应该有相同的结果。你知道吗

但是结果是这样的:

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

三个print语句几乎同时被调用,locals()lid是相同的,但是F中使用的第一个l没有内容。你知道吗

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

非常感谢!你知道吗


Tags: 函数代码idmaindeffunction局部语句
1条回答
网友
1楼 · 发布于 2024-03-29 15:58:09

如果您阅读locals函数的docs,您将看到

Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks.

locals()不仅返回局部变量的dict,它还更新dict以反映当前的局部变量值。你知道吗

相关问题 更多 >