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 )
这将在您的字典中填充一些局部变量,而不会做任何神奇的事情。
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 确实需要一种方法来引用“当前执行的函数”(和类)。
添加回答
举报