一般的には、できません。たとえば、2 + 2
は式ですが、それを任意の関数またはメソッドに渡す場合、渡される引数は単なる数値4
であり、計算元の式を復元する方法はありません。関数のソース コードは復元できる場合がありますが (a の場合lambda
は除く)、「引用符で囲まれていない Python 式」が評価されるため、取得されるのは式の値であるオブジェクトだけです。
どのような問題を解決しようとしていますか? 他の実行可能なアプローチがあるかもしれません。
編集:明確にするためにOPにtx。または他のいくつかのコーナーケースでそれを行う方法はありませんlambda
が、私が言及したように、関数のソースコードを復元できる場合があります...:
import ast
import inspect
def f():
return 23
tree = ast.parse(inspect.getsource(f))
print ast.dump(tree)
inspect.getsource
渡しIOError
たオブジェクトのソースコードを取得できない場合に発生します。解析と getsource 呼び出しを、文字列を受け入れる (そして解析するだけ) または関数 (そして getsource を試行し、そのIOError
場合により良いエラーが発生する可能性がある) を補助関数にラップすることをお勧めします。