Получить всю функцию как строку / и преобразовать строку в функцию? - PullRequest
0 голосов
/ 29 мая 2018

Я хочу получить всю функцию Python и сохранить ее как строку (например, Javascript может просто сделать functionString = functionVar.toString().

Пример:

#I defined a function with a body:
def someFunction(hey):
    return hey + hey + hey

Я хочу преобразовать этоФункция для строки и получить точно такой же текст, как я напечатал выше (конечно, без комментариев)

Затем я хочу сделать обратную операцию: из строки преобразовать ее в функцию и сохранить впеременная, которая будет вызвана.

1 Ответ

0 голосов
/ 29 мая 2018

Используя 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.

...