locals是一个内置函数,返回本地值的字典.文件说:
警告
不应修改此词典的内容; 更改可能不会影响解释器使用的局部变量的值.
不幸的是,exec在Python 3.0中也有同样的问题.这有什么办法吗?
用例
考虑:
@depends("a", "b", "c", "d", "e", "f")
def test():
put_into_locals(test.dependencies)
Run Code Online (Sandbox Code Playgroud)
depends将其参数中提供的字符串存储在列表中test.dependences.这些字符串是字典中的键d.我希望能够编写,put_into_locals以便我们可以将值拉出d并将它们放入本地.这可能吗?
大多数人可能会说这是一个坏主意。我想使用字符串的内容作为变量的名称。我想完成可怕的事情:
s = 'x'
x = 1
Run Code Online (Sandbox Code Playgroud)
变量名x(不知何故?)来自 string 的地方s。
要回答“为什么?”,假设我有一个全局默认值x,我想要在函数中覆盖的选项。但:
x = 0
def f(**kw):
print x
f(x=1)
Run Code Online (Sandbox Code Playgroud)
打印0不1。如果我可以使用 kw.keys() 中的字符串重新分配x(或任何其他全局设置的变量),那么我会很高兴。
我意识到,这适用于重新分配x的f:
x = 0
def f(x=x):
print x
f(x=1)
Run Code Online (Sandbox Code Playgroud)
但是我想在我的命名空间中有许多变量的情况下这样做,我可能在某个时候想要覆盖而不重写我的模块中的每个函数定义。
我想动态分配变量(矩阵名称)并分配一些值。
下面是我正在尝试的示例代码。预期输出为 mat1 和 mat2,分别包含值 1 和 1。
stri = "mat"
for i in range(1,2):
"_".join([stri, i])=1
Run Code Online (Sandbox Code Playgroud)