我只是在玩python,发现有些奇怪。
我有以下功能:
def myfun(): #f1
return 1
def myfun(): #f2
return 0
print (myfun())
Run Code Online (Sandbox Code Playgroud)
我改变了值f1和f2,但它仍然似乎总是在打印的返回值f2。是否有特定原因?
如果您尝试定义两个具有相同名称的函数,则在编译语言中通常会收到错误消息。但是在Python函数中,一流的对象是对象,它们是动态定义的。
当您定义一个与先前定义的函数同名的新函数时,该函数名现在将绑定到新的函数对象,并且垃圾回收器将回收旧的函数对象。
因此,您的函数所发生的事情与本页其他答案中发布的简单整数示例所发生的事情没有什么不同。
同样,我们可以对使用该lambda机制定义的功能执行相同的操作。例如:
>>> myfun=lambda:1; myfun=lambda:0; print(myfun())
0
Run Code Online (Sandbox Code Playgroud)