1

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

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,但我对它们的实验失败了。

4

2 回答 2

5

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

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

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

globals().update(old)

这仅适用于ab并且c是全局变量。

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

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

这会将键a和设置bc相同的值d

于 2013-08-14T21:08:44.477 回答
0

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

看这个例子:

>>> def a():
...   print "a"
... 
>>> def b():
...   print "b"
... 
>>> def x():
...   print "x"
... 
>>> for i in ('a', 'b'):
...   globals()[i] = x
... 
>>> a()
x
于 2013-08-14T21:10:49.827 回答