типа мне надо функция, которая принимает функцию с аргументами в возвращает просто функцию, точнее имя функции, но не строку, а именно имя функции, то есть саму функцию без аргументов и без вызова, не коллабэл.
Типа:
»»» func_return(print('ёпрст'))
print
Как бы вы реализовали функцию func_return?
никак* * - кроме фокусов с аст
А покажи фокус. Вообще хоть как-то я имею в виду. Я хочу играться с кодом и использовать функции как данные и наоборот.
А почему бы не вернуть globals(func_name)
можно через inspect получить
фокус этот слишком сложен и не нужен
Реально сложно и много строк будет? Это вот в 5+- строк никак?
никак
никак и с фокусами с ast. во время выполнения кода ast уже нет.
суть проблемы вкратце: func_return получает то, что вернула функция (в данном случае print), по значению нельзя восстановить, какая функция его вернула
А если передать print('бла-бла-бла') как строку, в кавычках?
ну типа сделать колбек наверное имели в виду
Нет, вызов мне как раз не нужен нигде. Нужно вернуть функцию без её вызова. Функция допустим принимает строку с именем функции и надо из строки как-то получить функцию. Ладно, буду думать.
распарси название функции до первой открывающейся скобки, а потом в locals/globals глянь
macropy же работал как-то
Так в locals и globals разве сохраняется не то, что уже раньше вызывалось? А если такая функция раньше не вызывалась? Да и как понять какой ключ чтобы найти нужную функцию?
в глобальном скоупе лежат те имена которые существуют, например функции которые определены в этом модуле или импортированы. вызывалась функция или нет не имеет значения.
Ага, я понял, которые я создавал или импортил. Ну да, не подходит мне, я ведь их не обязательно сам писал. Попробую через builtins
сделай словарь вида {имя: функция}
Та я вроде сделал уже что хотел
а теперь выкинь и сделай нормально
Исходную подзадачу лучше скажу. Исходная подзадача в том, что функция принимает строку в которой идёт вызов функции с параметрами, но вызова функции не происходит так как это строка. Возвращает функция ту самую функцию, что в строке, но без параметров и не коллабл, то есть она не выполняется.
AST можешь распарсить и потом искать функцию в глобальном неймспейсе.
Я почитаю об этом, попробую. Спасибо.
Это точно исходная задача?
В словаре, нефиг
ну или в словре. вообще задача как я понял синтетическая и учебная
Для чего это понадобилось?
Нет, исходная задача от которой была эта задача была вчера. Но по сути с решением этой подзадачи я уже практически решил вчерашнюю задачу. Или я думаю что решил. Мне в голове оперативки не хватает и я сча пролистаю чат чтобы увидеть какую я задачу ставил вчера или позавчера.
Покажи вчерашнюю
изначально вроде не было никакой строки 🤨
Но если мы этот код не поместим куда-то типа строки, то он выполнится, а мне не надо выполнение. К тому же я уточнил ещё в первый же день, что пусть код тогда будет в строке, чтобы он не выполнялся. В общем вначале тоже подразумевалось что он в строке и я об этом писал в тот же день.
я в любом случае не понимаю смысл задачи, здесь как с троллейбусом из буханки хлеба
Вот, например, хлеб с вайфаем
вот это бредборд!
Обсуждают сегодня