>> print(spam) >>> spam = "spam" 所以我失去了对spam-6ren">
gpt4 book ai didi

python - 如何从内存地址重建Python函数?

转载 作者:太空狗 更新时间:2023-10-30 02:32:04 29 4
gpt4 key购买 nike

>> def spam():
... print("top secret function")
...
>>> print(spam)
<function spam at 0x7feccc97fb78>
>>> spam = "spam"

所以我失去了对spam函数的引用。我可以从该内存地址取回它吗:0x7feccc97fb78?

>>> orig_spam_function = get_orig_func_from_memory_address("0x7feccc97fb78")

编辑(回应 thefourtheye):

抱歉这个糟糕的问题,考虑这个案例:

>>> from collections import defaultdict
>>> d = defaultdict(spam)
>>> d
defaultdict(<function spam at 0x7f597572c270>, {})

所以这个函数还没有被垃圾回收。我可以恢复吗?当然,在这种情况下,你可以使用default_factory属性。

>>> d.default_factory
<function spam at 0x7f597572c270>

但想象一下 defaultdict 没有 default_factory 属性。

最佳答案

@thefourtheye 提出了一个关于函数被垃圾收集的好观点。

但是,如果万一该函数未被垃圾回收,您可以在所有现有对象中查找它:

def spam():
pass

spam2 = spam # keep a reference
print spam
=> <function spam at 0x56d69b0>

import gc
[ obj for obj in gc.get_objects() if id(obj) == 0x56d69b0 ]
=> [<function __main__.spam>]

这不是一种有效的方式(扫描内存中的所有对象),但它是一种方式。

关于python - 如何从内存地址重建Python函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20239670/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com