多次定义函数

时间:2012-09-05 20:12:56

标签: python

我有一个动态的Python服务,它将在每个记录的基础上定义函数,我遇到了一些我无法弄清楚的东西。假设我有一个如此设置的测试程序:

func_str = """
def func():
  print "top"
"""
exec func_str

func_str = """
def func():
  print "bottom"
"""
exec func_str

func()

当然,这将打印"bottom",因为第二次调用exec func_str会覆盖第一个。我好奇发生了什么事。是否以某种方式删除了第一个函数定义?

2 个答案:

答案 0 :(得分:5)

编译函数体,然后将其分配给变量名func下的本地名称空间。

然后,当您运行第二个exec语句时,新函数将以相同的名称存储,覆​​盖第一个。您可以通过以新名称存储对它的引用来保留第一个:

foo = func

因此您稍后可以将其称为foo

foo()

您还可以将其存储在字典,列表或另一个对象的属性中。

答案 1 :(得分:2)

与此相同:

>>> a = 5
>>> print a
5
>>> a = 'hello'
>>> print a
'hello'

换句话说,它只是将一个函数分配给一个名称(在本例中为 func ),并在随后的调用中将同名 func 重新分配给另一个函数