为什么在python中修改locals是个坏主意?

与此回复相关。当地人的文件在这里。 文档提到字典不应该改变,不确定它意味着什么但是would0ѭ适用于数据不会改变的实验室报告,例如在测量中?     
已邀请:
修改是一个坏主意,因为文档(您链接)明确说明不:   注意:不应修改此词典的内容;更改可能不会影响解释器使用的本地和自由变量的值。 你不需要任何理由。 如果你以不修改任何变量的方式使用它,那么你会没事的,但我会质疑设计并看看是否有更好的方法来做你想要的。 在您链接的特定示例中,locals实际上是globals(),因为您在模块的全局范围中使用它。这个非常具体的用法现在可以使用,虽然我希望它继续像全局变量一样工作,但你也可以使用全局变量。 在不知道你的其他设计的情况下,更清晰的解决方案可能是使用常规的ol'字典来表示你的变量;然后使用data [“x”] = value而不是globals()[“x”] = value。     
文档说的是当你有一个本地
x
变量并且做
locals()['x'] = 42
时,那么
x
仍然可以指向旧对象。
def foo():
    x = 0xABCD
    locals()['x'] = 42
    print(x)

foo()
    
在某些情况下,对locals()的调用返回从多个源收集的值,而不是指向本地范围的指针。 示例:在函数调用中,locals()返回函数的全局范围和范围的组合。在这种情况下,修改locals()输出将不会对本地范围进行任何更改,因为它实际上使用的是岛。似乎唯一可行的情况是其输出与globals()的输出相同。 所以,换句话说,你要么想要使用globals(),要么找到一种不同的方法来实现相同的目标。     
在CPython解释器中,局部变量可以来自许多地方(其中的细节并不重要,但它与如何为闭包存储变量有关)。
locals()
函数从所有这些位置收集名称和值,以便您在一个地方方便地访问它们,但由于它不知道给定变量的来源,因此无法将其放回原处。换句话说,这是一个坏主意,因为它不起作用。     
从潜水到Python   locals是一个返回a的函数   字典,在这里你正在设置一个   那个字典里的价值。你可能会   认为这会改变价值   局部变量x到2,但它   没有。当地人实际上并没有   返回本地命名空间,它返回   复印件。所以改变它没有任何意义   中的变量值   本地命名空间     

要回复问题请先登录注册