Поскольку этот пост помечен как дубликат этого другого поста , я отвечу здесь за случай "лямбды", хотя ОП не касается лямбд.
Таким образом, для лямбда-функций, которые не определены в своих собственных строках: в дополнение к ответу marko.ristin вы можете использовать mini-lambda или использовать SymPy как предложено в этом ответе .
mini-lambda
легче и поддерживает любые операции, но работает только для одной переменной
SymPy
тяжелее, но гораздо больше оснащено математическими / вычислительными операциями. В частности, это может упростить ваши выражения. Он также поддерживает несколько переменных в одном выражении.
Вот как вы можете сделать это, используя mini-lambda
:
from mini_lambda import x, is_mini_lambda_expr
import inspect
def get_source_code_str(f):
if is_mini_lambda_expr(f):
return f.to_string()
else:
return inspect.getsource(f)
# test it
def foo(arg1, arg2):
# do something with args
a = arg1 + arg2
return a
print(get_source_code_str(foo))
print(get_source_code_str(x ** 2))
Это правильно дает
def foo(arg1, arg2):
# do something with args
a = arg1 + arg2
return a
x ** 2
Подробнее см. mini-lambda
документация . Я, кстати, автор;)