我有一个动态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:
与此相同:
换句话说,它只是将一个函数赋给一个名称(在本例中是func),然后在随后的调用中,将相同的名称func重新分配给另一个函数。在
编译函数体,然后将其分配给变量名
func
下的本地命名空间。在然后,当您运行第二条
exec
语句时,一个新函数将以相同的名称存储,覆盖第一个函数。通过在新名称中存储对其的引用,可以保留第一个名称:因此,您可以以后仍将其称为
^{pr2}$foo
:您还可以将其存储在字典、列表或另一个对象的属性中。在
相关问题 更多 >
编程相关推荐