4

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

import time
dir(time.time)

不包含函数对象

也不

dir(time.time.__call__)

只是返回自己

time.time.__call__.__call__.__call__

..等等。

有任何想法吗?

4

2 回答 2

2

在 CPython 中,内置方法是用 C(或某些其他语言,例如 C++)实现的,因此无法获得 a func_code(该属性仅存在于使用 Python 定义的函数中)。

你可以在这里找到源代码:http time.time: //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.',)
于 2013-08-24T19:09:35.263 回答
1

很确定你不能。从文档

内置函数

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

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

于 2013-08-24T19:06:06.423 回答