Используя exec
, вы можете почти получить то, что просите.Кодирование функции в виде строки - это простая часть.
"""Encode the function as a string"""
import inspect
funcString = inspect.getsource(someFunction)
Извлечение функции из строки - это просто дополнительная работа.При следующем подходе будут возникать проблемы с глобальными или другими переменными, выходящими за рамки функции, которую вы пытаетесь восстановить, но если источник полностью указывает ее, тогда должна работать следующая идея:
d = {}
exec(funcString, d)
f = next(d[k] for k in d if k != '__builtins__')
После запуска,код, определенный источником, использованным для генерации f
, будет привязан к переменной f
.