【发布时间】:2012-08-10 19:26:19
【问题描述】:
[原版的代码乱七八糟。即使在我修复了代码之后,帖子中仍然存在几个非常令人困惑的错别字。我相信我最终也修复了所有这些问题。深表歉意。]
下面对alias 的两次调用会产生不同的输出,因为与变量my_own_id 关联的对象在两次调用之间会发生变化:
>>> def my_own_id():
... me = my_own_id
... return id(me)
...
>>> alias = my_own_id
>>> alias()
4301701560
>>> my_own_id = None
>>> alias()
4296513024
我可以在my_own_id 的定义中为me 分配什么,以使其输出在my_own_id 变量的后续重新定义中保持不变? (IOW,让内部me变量总是引用同一个函数对象?)
(我可以获取当前帧(使用inspect.currentframe()),但它只包含对当前代码对象的引用,而不是对当前函数的引用。)
附:这个问题的动机只是为了更好地了解 Python。
【问题讨论】:
-
spam定义在哪里? -
这个例子有点令人困惑 -
ham和spam引用my_own_id()? -
不错的发现 :-) [您应该编辑将 my_own_id 重命名为垃圾邮件的问题] 我不知道为什么会发生这种情况。如果您再次分配,它会保持稳定:
foo = ham; ham(); del ham; foo()(我想这是您问题的答案,尽管没有任何见解:-) -
这很有趣:
>>> id(my_own_id) 45375408 >>> alias = my_own_id >>> id(alias) 45375408 >>> my_own_id = None >>> id(my_own_id) 505354444 >>> id(alias) 45375408 >>> alias() 505354444 -
@MartijnPieters:我的代码搞砸了;我现在已经修好了。很抱歉造成混乱。
标签: python introspection