Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Python Нетривиальный вызов функций

Отаку

Начинающий
Пользователь
Регистрация
19 Май 2018
Сообщения
60
Лучшие ответы
0
Репутация
30
Привет, начал я пытаться писать своего бота для ВК, при этом изучая как и сам Python, так и API к ВК.
В моем боте надо было сделать какой-нибудь удобный вариант с вызовом функции по командам, например - "Курс биткоина" и вызывается функция. По началу я думал использовать функцию eval() для вызова функции по ее имени, но вот только минус в том что все команды должны будут "иметь_такой_формат", что конечно же не удобно. Можно закостылить, например

PHP:
'_'.join('is this what'.split())
Как вариант использования:

PHP:
def скажи_привет():
    print('Да что-то не охото')

eval('_'.join('скажи привет'.split()))()
Но неужели нет варианта попроще? Есть конечно - словари!

PHP:
def say_hi():
    print('Да что-то не охото')

functions = {
    'скажи привет': say_hi
}

functions['скажи привет']()
В этом варианте я нашел несколько плюсов:
  • Можно использовать в 'псевдониме' (назовем это так) и различные символы

    PHP:
    functions = {
        'скажи привет!': say_hi
    }
  • Функция вызывается по адресу, а не по имени, как у eval(). Поэтому конфуза с тем, что функция может быть не найдена отсутствует.

Ну существование первого варианта никто не отменяет, он тоже может быть полезен. Итак, вы знаете еще интересные варианты вызова функции из строки?
 
Сверху Снизу