Python 3函数名重绑定代码运行结果及相关问题咨询
问题1解答
你的认知是完全正确的。Python中的名称(变量名)本质是绑定到内存中实际对象的标签,执行max = min时,你将当前作用域下原本指向内置最大值函数的max名称,重新绑定到了内置最小值函数的对象上,因此调用max(3,4)实际执行的是取最小值的逻辑,输出3符合预期。
问题2解答
这个理解也是正确的。Python的赋值逻辑是:先计算等号右侧表达式的结果,拿到结果对应的对象的引用,再将这个引用绑定到等号左侧的名称上。
你执行f = max时,max还指向内置的最大值函数,此时是直接将这个最大值函数对象的引用绑定给f,后续max名称的绑定对象发生变化,完全不会影响已经完成绑定的f,和你类比的「值传递而非绑定名称的引用传递」逻辑一致。
问题3解答
这个结果是符合Python绑定逻辑的,我们可以先梳理代码执行完成后三个名称实际指向的对象:
f:始终指向初始的内置最大值函数max:执行max = min后,指向内置最小值函数min:全程没有被重新赋值,始终指向内置最小值函数
所以两个比较的结果就很清晰了:
max == f:比较内置最小值函数和内置最大值函数,结果自然为Falsemin == f:同样是比较内置最小值函数和内置最大值函数,结果也为False
你之前的误解应该是误以为min的绑定也发生了变化,实际上全程只有max的绑定被修改了。
内容的提问来源于stack exchange,提问作者Reimirno
相关产品推荐
相关产品推荐

