Есть ли что-то вроде обратной функции eval ()? - PullRequest
1 голос
/ 25 марта 2019

Представьте себе следующую проблему: у вас есть словарь некоторого контента на python и вы хотите сгенерировать код на python, который бы создавал этот диктат.(что походит на eval, но наоборот) Есть ли что-то, что может сделать это?

Сценарий: Я работаю с удаленным интерпретатором Python.Я могу дать исходные файлы к нему, но без ввода.Поэтому я сейчас ищу способ кодировать мои входные данные в исходный файл Python.

Пример:

d = {'a': [1,4,7]}
str_d = reverse_eval(d)
# "{'a': [1, 4, 7]}"
eval(str_d) == d

Ответы [ 2 ]

7 голосов
/ 25 марта 2019
repr(thing)

выведет текст, который при выполнении будет (в большинстве случаев) воспроизводить словарь.

1 голос
/ 25 марта 2019

На самом деле важно, для каких типов данных вы хотите, чтобы существовала эта обратная функция.Если вы говорите о встроенных / стандартных классах, обычно их метод .__repr__() возвращает код, к которому вы хотите получить доступ.Но если ваша цель - сохранить что-то в удобочитаемом формате, но использовать функцию, подобную eval, для использования этих данных в python, есть библиотека json.По этой причине лучше использовать json, потому что использование eval небезопасно.Проблема Json в том, что он не может сохранить данные любого типа , он может сохранять только стандартные объекты, но если мы говорим о не встроенных типах данных, вы никогда не узнаете, что у них на уме..__repr__(), поэтому нет возможности использовать repr-eval с данными такого типа

Итак, для всех типов данных нет функции обратного просмотра, вы можете использовать repr-eval для встроенных, но длявстроенные данные библиотека json лучше хотя бы потому, что она безопасна

...