多次定义函数

2024-04-26 14:44:17 发布

您现在位置: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的第二个调用覆盖了第一个。我很好奇引擎盖下面会发生什么。是否以某种方式删除了第一个函数定义?在


Tags: 函数定义topdef方式记录动态测试程序
2条回答

与此相同:

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

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

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

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

foo = func

因此,您可以以后仍将其称为foo

^{pr2}$

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

相关问题 更多 >