builtin_function_or_method から func_code オブジェクトを取得することは可能ですか? つまり、time.time() から
import time
dir(time.time)
関数オブジェクトを含まない
もしない
dir(time.time.__call__)
それは自分自身を返すだけです
time.time.__call__.__call__.__call__
..等々。
何か案は?
builtin_function_or_method から func_code オブジェクトを取得することは可能ですか? つまり、time.time() から
import time
dir(time.time)
関数オブジェクトを含まない
もしない
dir(time.time.__call__)
それは自分自身を返すだけです
time.time.__call__.__call__.__call__
..等々。
何か案は?
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.',)
あなたができないことは確かです。ドキュメントから:
組み込み関数
組み込み関数オブジェクトは、C 関数のラッパーです。組み込み関数の例は
len()
、math.sin()
(math
は標準の組み込みモジュールです) です。引数の数と型は、C 関数によって決定されます。特別な読み取り専用属性:__doc__
関数のドキュメント文字列、または利用できない場合は None です。__name__
関数の名前です。__self__
に設定されてNone
います (ただし、次の項目を参照してください)。__module__
関数が定義されたモジュールの名前、またはNone
使用できない場合。
これらはコンパイルされた C コードです。Python コードには関数本体の表現はありません。