Как на Python использовать переменные/списки в нескольких функциях без глобальных переменных?

Рейтинг: 1Ответов: 1Опубликовано: 27.08.2023

Например есть список number который получает номер телефона во второй по счету функции, а в третьей по счету я уже его использую. Если делать через global, то все работает, но при условии что ботом пользуется только 1 человек. Если им одновременно пользуется несколько то все значения путаются в global и получается некорректный результат. Как этого избежать?(Текст в кавычках убран специально)

from telebot import types


bot = telebot.TeleBot('')
count = 0
spis = []
fil = 0
chet = 0
number = []
name1 = []
name2 = []

@bot.message_handler(commands=['start'])
def start(message):
    global count
    global spis
    global number
    global name1
    global name2
    global fil
    fil = 0
    name1 = []
    name2 = []
    number = []
    count = 0
    spis = []
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
    button_phone = types.KeyboardButton(text="", request_contact=True)
    markup.add(button_phone)

    send_mess = f'<b> Здравствуйте, {message.from_user.first_name} </b>!👋\n\nЭтот бот поможет '
    bot.send_message(message.chat.id, send_mess, parse_mode='html', reply_markup=markup)


@bot.message_handler(content_types=['contact'])
def contact(message):
    global number
    global name1
    global name2
    if message.contact is not None:
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
        btn1 = types.KeyboardButton('1100 ')
        btn2 = types.KeyboardButton('1100')
        markup.add(btn1, btn2)
        number = message.contact.phone_number
        name1 = message.contact.first_name
        name2 = message.contact.last_name
        final_message = "Отлично!"
    bot.send_message(message.chat.id, final_message, parse_mode='html', reply_markup=markup)



@bot.message_handler(content_types=['text'])
def mess(message):
    global count
    global spis
    global fil
    global chet
    global number
    global name1
    global name2
    get_message_bot = message.text.strip().lower()

    if get_message_bot == "":
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
        bot.send_message(, f'Заявка 1000+\nПользователь:\n{name1, name2}\nНомер телефона:\n{number}')
        final_message = ""```

Ответы

▲ 0Принят

Без глобальных переменных не обойтись. Но там должны быть не просто переменные, а объекты, которые выдают нужную информацию в зависимости от пользователя.