如何在循环中重置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+变量中。