如何在循环中重置Python中的一些函数变量

时间:2013-08-14 21:06:44

标签: python function reference

我有一个脚本,我必须更改一些功能并重置我对它们所做的更改。我目前这样做:

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个以上的函数执行此操作将产生一个我希望减少的大代码块。

不幸的是,我一直无法找到可行的解决方案。我想到了弱点,但我对它们的实验失败了。

2 个答案:

答案 0 :(得分:5)

只需将旧函数存储在字典中:

old = {'a': a, 'b': b, 'c': c}

然后使用globals()字典恢复它们:

globals().update(old)

仅当abc以全局字母开头时才有效。

您可以使用相同的技巧将d分配给所有这些名称:

globals().update(dict.fromkeys(old.keys(), d))

这会将键abc设置为相同的值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