是否可以从builtin_function_or_method中检索func_code对象? 即来自time.time()
import time
dir(time.time)
不包含函数对象
也不是
dir(time.time.__call__)
只是自我回归
time.time.__call__.__call__.__call__
..等等。
有什么想法吗?
答案 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.',)