Найти - Пользователи
Полная версия: передача в функцию переменного количества позиционных аргументов
Начало » Python для новичков » передача в функцию переменного количества позиционных аргументов
1
vadim_matveev
Есть функция, в которую передается список со строками подписей кнопок, которые выводятся в чат-боте Телеграм. Сами кнопки добавляются с помощью метода 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
Решение найдено. Оказывается можно не только принимать переменное количество аргументов через ‘*’, но и передавать:
 buttons = [types.KeyboardButton(btn) for btn in buttons_list]
markup.add(*buttons)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB