Keste
@Keste
test1

Как в Python 3 вызвать функцию чьё название написано в строке?

Вопрос такой: я ввожу название функции и я просто хочу чтобы это название выполнила функцию.
И я не хочу создавать пару десятков if/elif/else что бы перебрать все функции в коде.
Не знаю как такое осуществить!
Опишите как это сделать поподробнее.
call_func = input("Введите название функции чтобы её вызвать: ")
if call_func[0] == '$':
    call_func = call_func[1:]
    call_func()

Спасибо!
  • Вопрос задан
  • 3218 просмотров
Решения вопроса 2
Tanner
@Tanner
Огромный человекоподобный боевой робот
Вообще, сама постановка вопроса кагбе намекает на архитектурные проблемы такого подхода. Но, если решать вопрос «в лоб», то вот самый логичный вариант:

call_func = input("Введите название функции чтобы её вызвать: ")
locals()[call_func]()


Это я подразумеваю, что функции определены в том же неймспейсе, что и call_func. Если они определены в неймспейсе модуля, а call_func − глубже, в функции или методе, то поможет globals(). А если они вообще где-то в других модулях, которые могут не быть импортированы заранее, то нужно копать в сторону importlib.import_module, но это уж точно оверкилл.

Ну и, конечно, использовать пользовательский ввод тут небезопасно. Не так опасно, как eval, но тоже нехорошо.
Ответ написан
Комментировать
BuriK666
@BuriK666
Компьютерный псих
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@kratorr
def func1(text):
    return text

def func2():
    return ""

functions = {'func1':func1, 'func2':func2}

functions['ваш input']()
Ответ написан
Комментировать
@bbkmzzzz
Создайте словарь. Ключ - строка для определения, значение - функция.
def foo():
    print('foo()')

def bar(x):
    print(x)

dc = {'foo': foo, 'bar': bar}
dc['foo']()
dc['bar'](10)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы