将内存地址转换为函数对象

时间:2015-01-05 09:56:45

标签: python

Maya中的灯具有属性Use Color Temperature,这是一个复选框,当我切换它时,在Maya内部调用一个函数来实际执行场景后面的工作。不幸的是,打印出函数地址<function callback at 0x0000000051CD7DD8>而不是它的名字。单击复选框时,我不知道执行了哪个功能。有没有办法将这个地址转换为python函数对象,还是可以使用这个内存地址打印函数的实际名称?

2 个答案:

答案 0 :(得分:2)

这意味着调用名为callback的函数。

我在相应的代码文件中查找def callback(...):,看看它的作用。

要重新生成您的输出,只需要一个名为callback的函数:

>>> def callback():
...     print "My name is Reut Sharabani"
... 
>>> cb = callback
>>> cb
<function callback at 0x7f182f3ca6e0>

如果您想以编程方式获取函数的名称:

>>> cb.__name__
'callback'

如果您想了解更多信息,可以使用dis及其code object对其进行反汇编:

>>> import dis
>>> dis.dis(cb.__code__)
  2           0 LOAD_CONST               1 ('My name is Reut Sharabani')
              3 PRINT_ITEM          
              4 PRINT_NEWLINE       
              5 LOAD_CONST               0 (None)
              8 RETURN_VALUE      

答案 1 :(得分:2)

这似乎是纯粹的邪恶,说实话,我认为你可以/应该使用callback代替。但作为参考,显然您可以使用垃圾收集模块gcid获取对象。

找到SO response(你真的可以在SO上找到任何东西......):

import gc

def objects_by_id(id_):
    for obj in gc.get_objects():
        if id(obj) == id_:
            return obj
    raise Exception("No found")

我认为您需要将该号码强制转换为int,因为id(obj)会返回int而不是hex

注意这可能有一些奇怪的竞争条件,在删除对象后,对象ID可能会被回收。