我有一个脚本,我必须更改一些功能并重置我对它们所做的更改。我目前这样做:
def a():
pass
def b():
pass
def c():
pass
def d():
pass
previous_a = a
previous_b = b
previous_c = c
a = d
b = d
c = d
# I want to make the following code block shorter.
a = previous_a
b = previous_b
c = previous_c
我希望有一个迭代数据结构(可能是字典)的循环,而不是枚举所有要重置的函数,并使用它们之前的值重置函数变量。在前面的示例中,当前的方法3函数是可以的,但是对15个以上的函数执行此操作将产生一个我希望减少的大代码块。
不幸的是,我一直无法找到可行的解决方案。我想到了弱点,但我对它们的实验失败了。
答案 0 :(得分:5)
只需将旧函数存储在字典中:
old = {'a': a, 'b': b, 'c': c}
然后使用globals()
字典恢复它们:
globals().update(old)
仅当a
,b
和c
以全局字母开头时才有效。
您可以使用相同的技巧将d
分配给所有这些名称:
globals().update(dict.fromkeys(old.keys(), d))
这会将键a
,b
和c
设置为相同的值d
。
答案 1 :(得分:0)
函数定义存储在声明它们的模块的“全局”范围内。全局范围是字典。因此,您可以通过键访问/修改其值。
见这个例子:
>>> def a():
... print "a"
...
>>> def b():
... print "b"
...
>>> def x():
... print "x"
...
>>> for i in ('a', 'b'):
... globals()[i] = x
...
>>> a()
x