【发布时间】:2015-11-24 02:29:48
【问题描述】:
我相信func(obj.attr) 和tmp = obj.attr; func(tmp) 应该是完全无法区分的。但是,下面的代码
class Cls(object):
#@staticmethod
def f(self):
pass
def who(obj):
print(id(obj) % 1000, end=' ')
obj = Cls()
n = 10
for i in range(n):
who(obj.f)
print('\n')
for i in range(n):
tmp = obj.f
who(tmp)
生产
736 736 736 736 736 736 736 736 736 736
736 216 736 216 736 216 736 216 736 216
我们可以看到第二个 for 循环产生了一个有趣的模式,而第一个则没有。似乎分配绑定方法会改变绑定方法本身,但为什么将其传递给函数不会呢?
【问题讨论】:
标签: python methods variable-assignment argument-passing