передача в функцию переменного количества позиционных аргументов
Есть функция, в которую передается список со строками подписей кнопок, которые выводятся в чат-боте Телеграм. Сами кнопки добавляются с помощью метода 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)
Ответы (1 шт):
Есть два варианта:
- Вызов с переменным количеством аргументов
from aiogram import *
def create_reply_buttons(*buttons_list): # <----
markup = types.ReplyKeyboardMarkup(
row_width=2,
resize_keyboard=True,
selective=False,
one_time_keyboard=False,
input_field_placeholder=''
)
buttons = [types.KeyboardButton(btn) for btn in buttons_list]
markup.add(*buttons)
create_reply_buttons(1, 2, 3, 4) # <----
- Вызов с переменной длинной списка:
from aiogram import *
def create_reply_buttons(buttons_list): # <----
markup = types.ReplyKeyboardMarkup(
row_width=2,
resize_keyboard=True,
selective=False,
one_time_keyboard=False,
input_field_placeholder=''
)
buttons = [types.KeyboardButton(btn) for btn in buttons_list]
markup.add(*buttons)
create_reply_buttons([1, 2, 3, 4]) # <----