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

如何在循环中重置Python中的一些函数变量,python,function,reference,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 =

我有一个脚本,我必须更改一些函数,并重置对它们所做的更改。我现在是这样做的:

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+个函数这样做将产生一个大的代码块,我想减少这个代码块


不幸的是,我一直无法找到可行的解决办法。我想到了weakrefs,但我的实验失败了。

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

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

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

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

函数定义存储在声明它们的模块的“全局”范围内。全局范围是一个字典。因此,您可以通过键访问/修改其值

请参见此示例:

>>> def a():
...   print "a"
... 
>>> def b():
...   print "b"
... 
>>> def x():
...   print "x"
... 
>>> for i in ('a', 'b'):
...   globals()[i] = x
... 
>>> a()
x

函数定义存储在声明它们的模块的“全局”范围中。全局范围是一个字典。因此,您可以通过键访问/修改其值

请参见此示例:

>>> def a():
...   print "a"
... 
>>> def b():
...   print "b"
... 
>>> def x():
...   print "x"
... 
>>> for i in ('a', 'b'):
...   globals()[i] = x
... 
>>> a()
x

问题的最佳解决方案可能包括根本不替换函数,或将它们存储在某种数据结构中而不是15+变量中。问题的最佳解决方案可能包括根本不替换函数,或将它们存储在某种数据结构中而不是15+变量中。