为了账号安全,请及时绑定邮箱和手机立即绑定

有什么方法可以修改本地字典吗?

有什么方法可以修改本地字典吗?

白衣染霜花 2019-10-22 22:22:25
locals是一个内置函数,该函数返回本地值的字典。该文件说:警告该字典的内容不得修改;更改可能不会影响解释器使用的局部变量的值。不幸的是,exec在Python 3.0中也有同样的问题。有什么办法解决吗?用例考虑:@depends("a", "b", "c", "d", "e", "f")def test():    put_into_locals(test.dependencies)Depends将其参数中提供的字符串存储在列表中test.dependences。这些字符串是字典中的键d。我希望能够进行编写,put_into_locals以便我们可以将这些值提取出来d并放入当地人手中。这可能吗?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

局部变量由赋值语句修改。


如果您使用的字典关键字是字符串,请不要也将它们设置为局部变量-只需将它们用作字典关键字即可。


如果您绝对必须 具有局部变量,请执行此操作。


def aFunction( a, b, c, d, e, f ):

    # use a, b, c, d, e and f as local variables


aFunction( **someDictWithKeys_a_b_c_d_e_f )

这将在您的字典中填充一些局部变量,而不会做任何神奇的事情。


查看完整回答
反对 回复 2019-10-22
?
心有法竹

TA贡献1866条经验 获得超5个赞

这是不可能的。我认为这是为了以后可以进行性能优化。Python字节码通过索引而不是名称来引用本地。如果要求locals()是可写的,则它可能阻止解释器实现某些优化,或者使它们更加困难。


我相当确定您不会找到任何保证您可以像这样编辑本地语言的核心API,因为如果该API可以做到,那么locals()也将没有此限制。


不要忘记所有本地人都必须在编译时存在。如果您引用的名称在编译时未绑定到本地,则编译器会认为它是全局名称。编译后无法“创建”本地人。


请参阅此问题以寻求一种可能的解决方案,但这是一个严重的问题,您确实不想这样做。


请注意,示例代码存在一个基本问题:


@depends("a", "b", "c", "d", "e", "f")

def test():

    put_into_locals(test.dependencies)

"test.dependencies"不是指“ f.dependencies”,其中f是当前函数;它引用的是实际的全局值“ test”。这意味着如果您使用多个装饰器:


@memoize

@depends("a", "b", "c", "d", "e", "f")

def test():

    put_into_locals(test.dependencies)

它不再起作用,因为“测试”是备忘录的包装函数,而不是依赖函数。Python 确实需要一种方法来引用“当前执行的函数”(和类)。


查看完整回答
反对 回复 2019-10-22
  • 3 回答
  • 0 关注
  • 462 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信