Вообще, сама постановка вопроса кагбе намекает на архитектурные проблемы такого подхода. Но, если решать вопрос «в лоб», то вот самый логичный вариант:
call_func = input("Введите название функции чтобы её вызвать: ")
locals()[call_func]()
Это я подразумеваю, что функции определены в том же неймспейсе, что и
call_func
. Если они определены в неймспейсе модуля, а
call_func
− глубже, в функции или методе, то поможет
globals()
. А если они вообще где-то в других модулях, которые могут не быть импортированы заранее, то нужно копать в сторону
importlib.import_module
, но это уж точно оверкилл.
Ну и, конечно, использовать пользовательский ввод тут небезопасно. Не так опасно, как
eval
, но тоже нехорошо.