在Python中调用函数句柄时的内存地址

时间:2014-03-12 14:40:39

标签: python memory-address

我知道这可能不是一个编程问题,但我仍然想知道:

为什么Python在调用函数句柄时返回函数的内存?

>>> my_func
<function my_func at 0x3ead488>

何时/如何有用?为什么不显示函数的实际内容(同时仍保持相同的功能;指向函数的链接)?

1 个答案:

答案 0 :(得分:3)

您正在查看没有文字表示的Python对象的repr()表示。这些对象遵循大多数Python对象遵循的默认<type ... at 0xid>模式。

它的目的是让你能够区分不同的function个物体,即使它们的名字是相同的;如果你有两个foo函数,你希望能够看到它们是否是同一个对象;表示中的id()值允许您这样做。

引用__repr__ method documenation

  

repr()内置函数和字符串转换(反向引号)调用,以计算对象的“官方”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境)。 如果无法做到这一点,请填写表格的字符串&lt; ...一些有用的说明...&gt;应返回。返回值必须是字符串对象。如果一个类定义__repr__()但不定义__str__(),那么当需要该类的实例的“非正式”字符串表示时,也会使用__repr__()

     

这通常用于调试,因此表示信息丰富且明确无误。

函数的内容是a)可能更大,b)要求源文件可用。 function对象本身仅引用已编译的代码对象字节码。即使源文件可用,打印一个充满函数的容器对象也会导致输出过于冗长。

如果要查看给定函数对象的源代码,请在对象上使用inspect.getsource()。如果没有可用的源,此可以引发IOError异常。