我知道这可能不是一个编程问题,但我仍然想知道:
为什么Python在调用函数句柄时返回函数的内存?
>>> my_func
<function my_func at 0x3ead488>
何时/如何有用?为什么不显示函数的实际内容(同时仍保持相同的功能;指向函数的链接)?
答案 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
异常。