文档说的是,当你有一个局部x
变量并且这样做时locals()['x'] = 42
,x
仍然可以指向旧对象.
def foo():
x = 0xABCD
locals()['x'] = 42
print(x)
foo()
Run Code Online (Sandbox Code Playgroud)
在某些情况下,对 locals() 的调用返回从多个来源收集的值,而不是指向本地作用域的指针。
示例:在函数调用内部时,locals() 返回全局作用域和函数局部作用域的组合。在这种情况下,修改 locals() 输出不会对本地范围进行任何更改,因为它本质上是在使用一个岛。这似乎是它唯一的案件做工作,这样的情况的输出是一样的全局变量()的输出。
因此,换句话说,您要么想使用 globals(),要么寻找不同的方法来实现相同的目标。
修改是一个坏主意,因为文档(您链接的)明确表示不要:
注:本词典内容不得修改;更改可能不会影响解释器使用的局部变量和自由变量的值。
你不需要更多的理由。
如果您以不修改任何变量的方式使用它,那么您会没事的,但我会质疑设计并看看是否有更好的方法来完成您想要的事情。
在您链接的具体示例中,locals 实际上是 globals(),因为您在模块的全局范围内使用它。这种非常具体的用法现在可以工作,尽管我希望它继续像全局变量一样工作,但您也可以只使用全局变量。
一个更干净的解决方案可能是,在不知道设计的其余部分的情况下,为变量使用常规的字典;然后使用 data["x"] = value 而不是 globals()["x"] = value。
归档时间: |
|
查看次数: |
1897 次 |
最近记录: |