为什么两个具有相同id
值的函数可以具有不同的属性,例如__doc__
或__name__
?
这是一个玩具示例:
some_dict = {}
for i in range(2):
def fun(self, *args):
print i
fun.__doc__ = "I am function {}".format(i)
fun.__name__ = "function_{}".format(i)
some_dict["function_{}".format(i)] = fun
my_type = type("my_type", (object,), some_dict)
m = my_type()
print id(m.function_0)
print id(m.function_1)
print m.function_0.__doc__
print m.function_1.__doc__
print m.function_0.__name__
print m.function_1.__name__
print m.function_0()
print m.function_1()
这将打印出:
57386560
57386560
I am function 0
I am function 1
function_0
function_1
1 # <--- Why is it bound to the most recent value of that variable?
1
我尝试过在调用copy.deepcopy
时进行混合(不确定函数是否需要递归复制,或者这是否过度),但这并没有改变任何东西。
i
。 - Hyperboreusi
的fun.__doc__
没有发生相同的事情呢? - elyformat
立即被求值,而fun
的主体部分却不会。 - Hyperboreus