我在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()
和l
的id
是相同的,但是F
中使用的第一个l
没有内容。你知道吗
我不明白为什么会这样。有人能解释这种现象吗?或者这是一个已知/未知的错误?你知道吗
非常感谢!你知道吗
如果您阅读
locals
函数的docs,您将看到locals()
不仅返回局部变量的dict,它还更新dict以反映当前的局部变量值。你知道吗相关问题 更多 >
编程相关推荐