从builtin_function_or_method中检索func_code

时间:2013-08-24 18:16:25

标签: python python-2.7

是否可以从builtin_function_or_method中检索func_code对象? 即来自time.time()

import time
dir(time.time)

不包含函数对象

也不是

dir(time.time.__call__)

只是自我回归

time.time.__call__.__call__.__call__

..等等。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

很确定你做不到。 From the docs

  

内置功能

     

内置函数对象是C函数的包装器。内置函数的示例包括len()math.sin()math是标准内置模块)。参数的数量和类型由C函数确定。特殊的只读属性:__doc__是函数的文档字符串,如果不可用,则为None; __name__是函数的名称; __self__设置为None(但请参阅下一项); __module__是定义函数的模块的名称,如果不可用,则为None

这些是编译的C代码 - 在Python代码中没有函数体的表示。

答案 1 :(得分:1)

在CPython中,内置方法是用C(或其他语言,例如C ++)实现的,因此不可能得到func_code(该属性仅存在于使用Python定义的函数)。 / p>

您可以在此处找到time.time的源代码:http://hg.python.org/cpython/file/v2.7.5/Modules/timemodule.c#l126

其他Python实现可能会在内置函数中使func_code可用。例如,在PyPy上:

$ pypy
Python 2.7.1 (7773f8fc4223, Nov 18 2011, 22:15:49)
[PyPy 1.7.0 with GCC 4.0.1] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>> import time
>>>> time.time
<built-in function time>
>>>> time.time.func_code
<builtin-code object at 0x00000001017422e0>
>>>> time.time.func_code.co_consts
('time() -> floating point number\n\n    Return the current time in seconds since the Epoch.\n    Fractions of a second may be present if the system clock provides them.',)