将内存地址转换为函数对象
Converting a memory address to a function object
Maya 中的灯光有一个属性 Use Color Temperature
,它是一个复选框,当我切换它时,会在 Maya 中调用一个函数来实际完成幕后工作。不幸的是,函数地址 <function callback at 0x0000000051CD7DD8>
被打印出来而不是它的名字。单击复选框时,我不知道执行了哪个功能。有什么方法可以将此地址转换为 python 函数对象,或者我可以使用此内存地址打印函数的实际名称吗?
这意味着调用了一个名为 callback
的函数。
我会在相应的代码文件中查找 def callback(...):
并查看它的作用。
要重新生成您的输出,只需要一个名为 callback
:
的函数
>>> def callback():
... print "My name is Reut Sharabani"
...
>>> cb = callback
>>> cb
<function callback at 0x7f182f3ca6e0>
如果您想以编程方式获取函数的名称:
>>> cb.__name__
'callback'
如果您想了解更多信息,您甚至可以使用 dis
and it's 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
这似乎是纯粹的邪恶,老实说,我认为您 can/should 改用 callback
。但作为参考,显然您可以使用垃圾收集模块 gc
从 id
.
中获取对象
在这个 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)
returns 是 int
而不是 hex
。
注意这可能有一些奇怪的竞争条件,对象 ID 可能在对象被删除后被回收。
Maya 中的灯光有一个属性 Use Color Temperature
,它是一个复选框,当我切换它时,会在 Maya 中调用一个函数来实际完成幕后工作。不幸的是,函数地址 <function callback at 0x0000000051CD7DD8>
被打印出来而不是它的名字。单击复选框时,我不知道执行了哪个功能。有什么方法可以将此地址转换为 python 函数对象,或者我可以使用此内存地址打印函数的实际名称吗?
这意味着调用了一个名为 callback
的函数。
我会在相应的代码文件中查找 def callback(...):
并查看它的作用。
要重新生成您的输出,只需要一个名为 callback
:
>>> def callback():
... print "My name is Reut Sharabani"
...
>>> cb = callback
>>> cb
<function callback at 0x7f182f3ca6e0>
如果您想以编程方式获取函数的名称:
>>> cb.__name__
'callback'
如果您想了解更多信息,您甚至可以使用 dis
and it's 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
这似乎是纯粹的邪恶,老实说,我认为您 can/should 改用 callback
。但作为参考,显然您可以使用垃圾收集模块 gc
从 id
.
在这个 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)
returns 是 int
而不是 hex
。
注意这可能有一些奇怪的竞争条件,对象 ID 可能在对象被删除后被回收。