Если я правильно понял то ты подписываешься и в открытом соединение ждет события (longpoll), при совпадении условий отправляешь сообщения и вызываешь функцию `parser` в которой и получаешь список продуктов разбивая строку на список используя разделитель запятую.
Первое - насколько я вижу функция `parser` находится в каком-то классе а ты ее вызываешь не как метод класса. Второе - Внутри этой функции ты подключаешься к longpoll и ждешь события, так же как и до ее вызова. Теоретически этот цикл может быть вечным, пока ты не закроешь соединение и цикл будет отрабатывать каждый раз когда будет приходить событие. Это ответ почему функция работает вечно.
Но все равно не понимаю каким образом функция parser таки запускается, хотя не должна.
А для хранения значений нужно полученный список объектов из события внести в атрибут класса а не локальную переменную или сделать костыль и заносить в глобальную переменную, который будет являться словарем а ключем в нем будет получатель к примеру (тут зависит от логики).
По хорошему надо обработку события с сообщением с продуктами вывести в общий цикл обработки. Но есть костыль - в конце функции поставить break или return, тем самым остановив цикл.
Я крайне не рекомендую использоваться костылями. Из представленного куска кода, сложновато понять все и сделать правильные выводы. Если я не прав поправь меня, постараюсь помочь
Отличный ответ! Но немного дополню, вместо среза n[:2]
Можно использовать метод строки replace. Заменив указанную подстроку на пустую строку И получится примерно так sum(int(n.replace('р.', '')) for n in arr)
Не до конца понятно нужен ли промежуточный вариант. Если да то сначала используем list comprehension для создания списка с интами а после сделаем сумму всех элементов new_arr = [int(n.replace('р.', '')) for n in arr]
SoreMix, это не баг питона. С большей вероятность это либо смешение табов и пробелов либо не правильное использование одного или другого. Тут надо глянуть в чем писалось (какая ide, текстовый редактор или консоль)
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Первое - насколько я вижу функция `parser` находится в каком-то классе а ты ее вызываешь не как метод класса. Второе - Внутри этой функции ты подключаешься к longpoll и ждешь события, так же как и до ее вызова. Теоретически этот цикл может быть вечным, пока ты не закроешь соединение и цикл будет отрабатывать каждый раз когда будет приходить событие. Это ответ почему функция работает вечно.
Но все равно не понимаю каким образом функция parser таки запускается, хотя не должна.
А для хранения значений нужно полученный список объектов из события внести в атрибут класса а не локальную переменную или сделать костыль и заносить в глобальную переменную, который будет являться словарем а ключем в нем будет получатель к примеру (тут зависит от логики).
По хорошему надо обработку события с сообщением с продуктами вывести в общий цикл обработки. Но есть костыль - в конце функции поставить break или return, тем самым остановив цикл.
Я крайне не рекомендую использоваться костылями. Из представленного куска кода, сложновато понять все и сделать правильные выводы. Если я не прав поправь меня, постараюсь помочь