Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2022 12:46:16

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

передача в функцию переменного количества позиционных аргументов

Есть функция, в которую передается список со строками подписей кнопок, которые выводятся в чат-боте Телеграм. Сами кнопки добавляются с помощью метода add() класса ReplyKeyboardMarkup.

Проблема в том, что если вызывать метод add() последовательно для добавления каждой кнопки (variant 2 В коде), то кнопки добавляются просто в колонку - одна над другой, а если передать все созданные кнопки сразу как позиционные аргументы, то кнопки выглядят как надо - располагаются пропорционально.
Я конечно выкрутился через подсчёт количества элементов в списке и дальше через elif (variant 1 в коде): но уверен что это говнокод и должен быть в Пайтоне какой-то более гибкий и изящный метод.

 def create_reply_buttons(buttons_list):
    markup = types.ReplyKeyboardMarkup(row_width=2, resize_keyboard=True, selective=False,
                                       one_time_keyboard=False,
                                       input_field_placeholder='')
    b = [types.KeyboardButton(buttons_list[i]) for i in range(len(buttons_list))]
    variant = 1
    if variant == 1:
        __b: int = len(buttons_list)
        if __b==0:
            return
        elif __b==1:
            markup.add(b[0])
        elif __b==2:
            markup.add(b[0], b[1])
        elif __b == 3:
            markup.add(b[0], b[1], b[2])
    elif variant == 2:
       for i in buttons_list:
            itembtn = types.KeyboardButton(i)
            markup.add(itembtn)

Отредактировано vadim_matveev (Апрель 13, 2022 12:52:10)

Офлайн

#2 Апрель 13, 2022 15:14:58

vadim_matveev
Зарегистрирован: 2022-03-23
Сообщения: 14
Репутация: +  -1  -
Профиль   Отправить e-mail  

передача в функцию переменного количества позиционных аргументов

Решение найдено. Оказывается можно не только принимать переменное количество аргументов через ‘*’, но и передавать:

 buttons = [types.KeyboardButton(btn) for btn in buttons_list]
markup.add(*buttons)

Отредактировано vadim_matveev (Апрель 13, 2022 15:15:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version