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++ などの他の言語) で実装されているため、 を取得することはできませんfunc_code(この属性は、Python を使用して定義された関数に対してのみ存在します)。

ここのソースコードを見つけることができます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.',)
于 2013-08-24T19:09:35.263 に答える
1

あなたができないことは確かです。ドキュメントから

組み込み関数

組み込み関数オブジェクトは、C 関数のラッパーです。組み込み関数の例はlen()math.sin()(mathは標準の組み込みモジュールです) です。引数の数と型は、C 関数によって決定されます。特別な読み取り専用属性:__doc__関数のドキュメント文字列、または利用できない場合は None です。__name__関数の名前です。__self__に設定されてNoneいます (ただし、次の項目を参照してください)。__module__関数が定義されたモジュールの名前、またはNone使用できない場合。

これらはコンパイルされた C コードです。Python コードには関数本体の表現はありません。

于 2013-08-24T19:06:06.423 に答える