Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. Исходник: https://dumpz.org/bASGKD8cCFDf
>>2248895 → Ох, там огромный пайплайн из селери-тасков, на одном из этапов мы запускаем параллельно несколько тасков и передаем их айдишники в следующий таск, какой-то из них может упасть но по итогу ошибка будет обрабатываться только после того как все они выполнятся, а надо бы завершать их как только 1 упадет, чтоб ресурсы не жрать и пользователя меньше ждать заставлять
Почаму Сваггер в Фастапи показывает мне такую херь на респонс когда я четко написал что и как он возвращает (обозначил response_model). Для входных данных он все подтянул и показывает как надо
Как Django Messages работает? Оно как-то "отсылает сообщение юзеру" но как это технически реализовано? Просто взять и без задней мысли отослать данные клиенту в браузер можно только через вебсокет
Можно в джанге вручную написать x-token для доступа к urls? Я смотрел на djangorest-api-key, но там ключи надо самому через admin добавлять, да и работает он странно через api_view, который показывает debug page (который выключен блядь), вместо простой ошибки. Вручную сделать декоратор? Как-то топорно получается. Неужели нет простого способа это сделать. Зачем это надо? Ко мне идут запросы с других апи, не с пользователей, а апи. Для них авторизацию крутить что-ли, это же ебанизм.
В питоне асинхронность реализована просто уебищно, практически скопировав это дерьмо с js. Пихают, естественно, везде где только можно, в синхронном языке блядь. Все эти awat async и прочие блевотные названия из js. Concurens использовать гораздо приятнее.
Пуйчарм сам подсвечивал красным ошибки а желтоватым маркером выделял ворнинги. VS Code-у вообще похуй, установил расширение для Питона, но по-прежнему - нихуя. Могу импортировать несуществующие модули, обращаться к несуществующим атрибутам класса - ему поебать. Как это фиксить? или может это не фиксится нихуя и я был слишком строг к Жидбрейнсам и по факту ничего лучше на рынке сейчас нет?
>>2248924 (OP) https://ideone.com/V0T0lV Класс для получения рандомных значений из больших файлов. Что хуево сделано, кроме того, что велосипед? Алсо, как тут правильно организовать файловые эксепшены?
>>2250320 А зачем вообще делать какой-то отдельный велосипед с чтением строк, если можно readlines()? Ну и можно будет заюзать with open('file.txt', 'r') as fp: и избавиться от бессмысленного деструктора И зачем разделять bigfile и не bigfile?
>>2250390 Читается и строится массив оффсетов, потом по запросу читается по рандомному оффсету. Суть в эффективном использовании памяти. Предложи лучше.
Ебани реализацию __enter__ и __exit__, в которых ты открываешь и закрываешь файл. А в коде юзай класс как контекстный менеджер. Тогда и файловые эксепшены обработаешь
>>2250502 Потому что файл открыт и по нему идет чтение в процессе работы. Открывать и закрывать каждый раз ради того, чтобы завернуть в контектст менеджер это хуевая идея, по-моему.
>>2250516 with YobaRandom('list.txt') as yoba: ___huinya1 = yoba.choice() ___huinya2 = yoba.choice()
Ты какой-то дурачёк, видимо. По тому коду, что ты прикрепил, нихуя не мешает использовать контекстный менеджер. Если ты там ракету в космос запускаешь, то тащи подробный код
>>2250531 Потому что я его инициализирую на старте и потом буду использовать. Нет смысла заворачивать ВЕСЬ КОД в контекстный менеджер только чтобы использовать контекстный менеджер, это хуйня. Не стоит аж так серьезно воспринимать его необходимость. Да, это удобно, когда тебе надо пару строчек завернуть в какую-то операцию, но не более.
>>2250540 >я его инициализирую на старте и потом буду использовать. >Ну вникни уже в код, блять. Вник, да, по тому ошмётку кода в то, как ты его использовать собрался
>Не стоит аж так серьезно воспринимать его необходимость >как тут правильно организовать файловые эксепшены? Ну и нахуя тебе тогда вообще об этом заботиться? Можешь вообще файл не закрывать например
>>2250533 Легко сказать бля ОТКУДА его достать-то? Где он нахуй ставится я вообще не ебу. у меня только АПИшка свагера, фронтенда с формочками у меня под рукой нет
>>2250547 Потому что есть целесообразность и уместность. Но некоторые почему-то впадают в крайности. Одни заворачивают каждый отдельный доступ к файлу или запрос в базу в менеджеры, другие заворачивают вообще всё в менеджеры и сидят там. Это суть небольшое удобство для некоторых ситуаций, не стоит возводить его в правило.
>>2250568 В питоне нет деструкторов, это не C++, __del__ про другое и закрывать там файл неправильно.
Ты по смыслу хочешь модель с деструкторами, но именно для этого в питоне как раз и нужны контекстные менеджеры.
Возможно тебе нужен контекстный менеджер для каждого YobaRandom, возможно тебе нужен контекстный менеджер для управления кучей YobaRandom. Если ты работаешь одновременно с кучей файлов, например.
ХОтя есть вариант изобрести свой собственный велосипедный контекстный менеджер, имитирующий настоящий. Чем ты и хочешь заняться.
Как сделать что-то типа requests builder-а? У меня есть интеграция с несколькими сторонними сервисами, каждому я прописал по 10-15 различных запросов. Есть идеи или примеры как их сделать красивее и универсальнее? С учётом sessions и тд. Чтоб где-нибудь можно было прописать urls-ы, headers, payloads и тд. И где их лучше прописывать? Прямо в коде или где-то отдельным файлом? Используются токены авторизации, которые хранятся в базе как есть, хто тоже правильно или лучше закодировать?
Куча примеров как сделать апи, но почти нет как адекватно организовывать запросы к этим апи, когда их много. Как это называется? Я просто недавно в вебе
>>2250961 Ну блядь изи же Пишешь базовый класс, в котором подготавливаешь урл/заголовки/авторизацию/логирование/парсеры ответа/запрос и базовую обработку ошибок. Наследуешься и привязываешь нужные параметры. Статичные вещи, типа урлов - храни в конфиге. Авторизацию - в секретах или переменных окружения. Остальное можешь хоть в классе забить. Токены в бд, если они периодически меняются - норм. Если нет, стоит в секреты вынести
>>2250972 От request.Request наследуйся. Определи свой таймаут, хоста, заголовки и т.д Сделай свой клиент, отнаследовавшись от requests.Session. Определи свой query, обработку, подготовку запроса. Потом просто Лепишь потомков от своего request.Request и оставляешь один клиент для сессии и все. Делаешь request = MyRequest(...); result = MyClientSession().query(request)
Может что есть проще или умнее. Я примерно подобное делал. Расширять дочерние классы довольно легко
>>2250986 Да, наверное, так и буду делать. Хочу чтоб потом было легко это менять всё. Одни сервисы просят токены, другие хеш-сумму запроса, третьи нестандартный oauth и прочие. Пишешь одно, потом натыкаешься на ещё одного нестандартного и переписываешь всё заново.
Нубик в треде Посмотрел уроков на ютубе методы, аргументы, функии, циклы хуе мое А дальше что делать ? книжки читать? Какую? я не задушусь и заброшу ? Есть что то с задачками для нубов ?
>>2248924 (OP) Я хуею, пацаны Работаю с одним проектом, там в celery-таске происходит ошибка, решил подебажить ее и спустя десяток минут таки осознал, что я и celery воркер работаем с разными файлами! Я сука вообще удалил нахуй все тело проблемной функции, а это мудло по-прежнему мне высирает ошибку с тем же трейсбеком на той же строчке (которой вообще уже нет блять). Это че за хуйня? КАК это блять может происходить? Проблема именно с celery-таском, когда ставлю логирование в верх модуля то при обычном импортировании оно конечно же срабатывает
Запускаю все в докерк-композе если вдруг это как-то меняет дело
>>2251913 Если не нравится эта сорт оф базовая фича докера, пользуйся уже упомянутой фичей волюмсов. Хз зачем вы вообще интерпретируемый код прибиваете гвоздями к образу.
>>2251899 Не обязательно пересоибрать. Можно внутри контейнера поправить файлы и рестартнуться. Если авторемув флаг при запуске не стоит, то заработает. А учитывая, что сам через компз запускаешь, то даже если стоит, то можно легко удалить. В таком случае даже по ссш из иде можно внутрь контейнера подключиться и редачить файлы прямо там из редактора
Нужна помощь, советом. У нас с друзьями есть ламповый чятик в телеге Появилась идея, используя питон, распарсить его и подсчитать статистику (количество сообщений, среднюю длину, все дела) В телеге есть кнопка "выгрузить в html формате". В принципе, эти html можно парсить Но писать что-то самому как-то лениво, и выглядит сложно, могу и не успеть Мб кто слышал про какой-то более легкий способ / готовое решение Ну или как тогда сделать? резать по определенным тегам и потом обрабатывать каждое сообщение?
>>2252094 Если уж выгружаешь в хтмл, то максимально простой и ленивый способ - без парсинга прямо в консоли браузера выполнить однострочник на жиэс, который посчитает хоть небо, хоть Аллаха. Будет что-то вроде document.querySelectorAll(message selector).length // количество [...document.querySelectorAll(message selector)].map(el => el.textContent.length).reduce((a, b, _, all) => a + b / all.length) // средняя длина и т.д.
А если надо именно на змее практиковаться, то лучше тогда апи телеги дергай.
Анон, стоит ли давать уникальное имя каждому виртуальному окружению? Или тупо веде оставлять его как venv? project1->project1, project2->project1 vs project1->venv, project2->venv
Так, нубовопрос. Для полноценной работы pycharm разве нужен уже установленный питон? Разве он не качает каждый отдельный питон в своё виртуальное окружение?
>>2252270 Нужен ли предустановленный питон? Вопрос в этом. Конда сама всё делает - ты ее поставил у теюя у же есть питон, потом спокойно можешь создать ещё окружение с нужной тебе версией и библиотеками. Но мешать кондапроекты с venv'ом не очень хочется.
>>2252273 >А это окружение как ты создашь? Из нихуя родишь? Ну, теоретически, пайчарм может скачать указанную версия для интерпретатора, установить её, и потом уже используя это, сделать виртуальное окружение.
Окей. Есть чистый пайчарм. 1) Я ставлю нужную версию питона или использует python.exe конды. 2) Создаю проект с этой версией. 3) Работаю. Правильно?
Если мне нужен будет проект с другой версией питона, мне его надо ли самостоятельно ставить? Или используя базовый интерпретатор пайчарм сам всё сделает?
>>2252572 >Или питон попытается метод вызвать с таким же именем У тебя не может метод иметь то же имя, что и какой-то атрибут. Одно перезапишет другое.
Что-то вроде [('D', 0), ('F', 0), ('A', 1), ('B', 1), ('C', 1), ('E', 2)] А мне-то нужен словарь Есть какой-то безболезненный способ трансформации этого листа в словарь? (ну, убрать квадратные скобочки
>>2252777 Словарь не имеет порядка. Если ты запихнёшь свой список пар назад в словарь, то весь порядок потеряется опять. Можешь в сторону OrderedDict глянуть, если тебе прям обязательно словарь (доступ по ключам) нужен.
Так, знатоки асинхронности, подскажите, пожалуйста. Есть старый код, который выглядит как: def ms(ur): t = urllib.request.urlopen(url) s = BeautifulSoup(thepage, "html.parser") return s
Вопросы: 1. Можно ли это переписать через асинхронность? 2. Стоит ли это переписывать через асинхронность? 3. urlib и BeautifulSoup при переписывании еще понадобятся? Или надо смотреть в сторону aiohttp?
>>2252962 Ты можешь реквесты писать асинхронно, а суп нет, так как это парсер. Да и имеет смысм переписать только если ты хочешь пачку страниц сразу получить, а потом уже их обработать.
Вкат в django
Аноним31/12/21 Птн 14:03:06№2253031127
С наступающим, аноны. В общем слышал от некоторых программистов что в python и js можно и нужно вкатываться через фреймворки сразу. Знаю основы программирования на C#, ООП понимаю, есть ли смысл вкатываться сразу в джанго, не изучая чистый python?
>>2252980 >если ты хочешь пачку страниц сразу получить, а потом уже их обработать. Хочется получать ссылки со страниц и сохранять их. Стоит ли для начала формировать список ссылок, а потом их сохранять? Или делать это на лету сразу после получения?
Аноны, как сделать прокидывание аргументов в функцию более красивым?
Допустим, у меня есть файл app.py, в котором у меня 40 функкций, возвращающих от одной до четырех переменных. Все это я импортирую в другой файл, например main.py, в котором тоже есть дофига функций, аргументами которых служат ретурны импортированных функций. В каждой функции может быть по 5-8 таких аргументов, поэтому меня получается примерно такая структура:
>>2254055 Не делать функции, принимающие десяток аргументов и возвращающих тупл длиной с <insert cuckold joke here>. Скорее всего данные, которыми ты оперируешь, что-то объединяет, и это что-то можно описать классом, или, на худой конец, словарем.
>>2254055 Принимать параметры через args, внутри функции слайсить нужные наборы в отдельные кортежи и потом эти коржеты перевадать как аргументы опять же через args. Либо передавать всё через kwargs, но тогда надо делать маппинг, где ключом будет строкое имя функции, а значение сама функция.
>>2253933 Предлагаешь твою хуйню в мозгу моделировать? Ее даже воспроизвести не получится. Ставишь брейкпоинты, запускаешь в дебаге, находишь ошибку, чинишь, писоешь, какоешь.
>>2254109 Сразу искать ссылки, не? Зачем этот бессмысленный поиск изображения, если ты его не используешь никак, кроме как вручную достаешь ссылку из родителя?
>>2254111 У меня есть файл с ссылками на нужные страницы (with open('C:\Test.txt', 'r') as file:). На каждой странице разное число нужных мне файлов, картинок, и прочих pdf-ок. Мне нужно их сохранить на диск. Те примеры, которые есть, они подразумевают, что у нас просто есть список ссылок, который превращается в таски, которые потом гонятся. Но у меня тут 2 цикла - один для прогона по страницам, второй по прогонам по файлам каждой из страницы. И несколько не понятно как это должно выглядеть. Как вложенная асинхронность?
>>2254116 что ты имеешь в виду под вложенной асинхронностью? асинхронность имеет смысл натягивать только на io операции - сеть, или сохранение на диск, исходи из этого, циклы тут не при чем Добавляешь таски на скрейпинг страниц, они добавляют таски на загрузку-сохранение картинок в ту же очередь. Руками распределять таски по 3 как в примере не надо, просто задаешь размер пула воркеров при создании ивентлупа. Посмотри на классы asyncio.Queue и функцию asyncio.create_task
Далее, проблему с несохранением это все вряд ли исправит, так что просто поставь брейкпоинт и не еби себе мозг.
Алсо, если ты это для сохранения картинок с двачей делаешь, что у него есть api, что значительно удобнее и быстрее.
>>2254127 >что ты имеешь в виду под вложенной асинхронностью? Что мне надо асинхронно получать доступ к нужным страницам. В свою очередь каждая страница асинхронно скачивает файлы. Или я здесь ошибаюсь? >Добавляешь таски на скрейпинг страниц, У меня сделано так. Но меня терзают сомнения, что что-то не то. with open('C:\Test.txt', 'r') as file: --async with aiohttp.ClientSession() as session: ----futures = [take_image(session, line, number) for number, line in enumerate(file)] ----loop = asyncio.new_event_loop() ----loop.run_until_complete(asyncio.wait(futures)) >Посмотри на классы asyncio.Queue и функцию asyncio.create_task Хорошо. >так что просто поставь брейкпоинт и не еби себе мозг. Дебажить можно долго. А если что-то упускаешь, так и вообще вечно. Когда есть у кого можно проконсультироваться, всё идёт быстрее. > с двачей делаешь Не с двачей.
>>2254136 Мысли не страницами и файлами, а тасками. Таска на скрейп страницы добавляет таски на скачивание файлов. В ту же очередь. Если все сделаешь правильно, необходимость создавать ивентлуп внутри такжой таски отпадет, будет один ивентлуп на все таски.
>>2248924 (OP) Линуксовопрос. Я что-то не понимаю. Почему у GdkX11.X11Window есть set_title, но нет get_title? И как быть? Вот я делаю: from gi.repository import Gdk root=Gdk.get_default_root_window() А дальше поменять заголовок окна я могу. А вот узнать его из питона не могу. Хм...
>>2254356 Переделай app.py так, чтобы у тебя там не было ни одной функции, возвращающей сразу кучу переменных. В main.py не передавай никаких результатов, передавай только список функций из app.py, например. Если непременно надо передать список аргументов, то и передавай список (или словарь, или объект какой-нибудь специального класса), а не кучу переменных. Вместо return1, return10 и тому подобного используй нормальные имена переменных. А вообще создаётся впечатление, что ты хочешь странного. Если бы объяснил, зачем - было бы можно что-то советовать, а так хз.
>>2254356 Очевидно, в app_func1, ... , app_func6 нужно возвращать не return a, b, c, d А нужно return [a, b, c, d], либо {'a': a, 'b': b, 'c': c, 'd': d}
Объясните, анончики, что такое асинхронность. Я когда-то работал с сишным mpi; я правильно понимаю, что асинхронность - это когда потоками занимаешься не ты явно, а язык?
>>2254474 У меня упрощенный пример, в самой программе переменные называются не return1-10, у них нормальные названия.
Суть программы в следующем: У меня есть набор функций, которые обращаются к удаленной БД, запрашивают необходимые данные и форматируют их. В каждой функции несколько ретурнов, потому что один и тот же набор данных мне нужно форматировать по-разному - списком, строкой, жсоном и т.д., то есть у функции получаются ретурны в духе uniq_parentlog_dict, uniq_parentlog_str и т.д. Всего таких функций у меня порядка 40 - они запрашивают данные из разных таблиц БД и по-разному их форматируют, привести их к одному виду практически невозможно.
Далее, есть набор функций, которые принимают вот эти ретурны в качестве аргументов. Таких функций порядка 20 и работают они просто - открывают текстовый файл-заготовку, считывают оттуда все содержимое, а затем заменяют в этом содержимом плейсхолдеры на отформатированные данные из аргументов:
>>2254573 Ну и почему твои "ретурны" не могут передаваться в виде словаря с плейсхолдером в качестве ключа, например? А что если плейсхолдера нет? Такое может быть? Тогда что? Отформатированные данные просто будут выкинуты? А как на счёт того, чтобы не производить все возможные варианты форматирования раньше, чем они понадобятся? Встретился плейсхолдер - отформатировали данные, вставили. Встретился плейсхолдер ещё раз - взяли уже отформатированные данные из кэша или отформатировали ещё раз.
>>2254612 Не, плейсхолдеры всегда железно есть. Файлы в /app/templates статические, не изменяются.
>Ну и почему твои "ретурны" не могут передаваться в виде словаря с плейсхолдером в качестве ключа, например? Вот это вот я не совсем понял, можешь объяснить? Как это будет выглядеть?
>>2254242 Блин, я нифига не понимаю, использую Wnck - глючит шопездец (всё окно приложения начинает мигать). Пытаюсь использовать xlib - там хз вообще что такое и как это использовать. Непонятно, как создать инстанс дисплея или окна. В Gdk нужных методов нет. Ну неужели придётся xprops через пайп подключать? И это хвалёный питон с кучей библиотек? Пайпы так-то можно и в баше использовать.
>>2254618 Ну подскажите, заебался я уже с этим питоноам. Ну вот захожу в https://docs.gtk.org/gdk4/index.html , ввожу там в поиск get_default_root_window, а там просто нет такого. Класс окна? А хз, где его искать. Получить экран? А хз как. Получить дисплей? А хз. Никак. Уже целый день бьюсь над элементарной задачей - получить заголовок сраного окна. И не понимаю, как её решать. Куча исходников, ни один не работает. Ну кроме пайпа на xprop, но это уж совсем уж пц какой-то будет. Неужели в питоне всё делается через такой вот геморрой? Это же пиздец. Я уж хз сколько времени на изучение этого языка потратил, а до сих пор банальные вещи сделать не могу.
Я понимаю, что это, конечно, сорта... но мне очень интересно, чем отличаются aiogram, pyTelegramBotAPI и python-telegram-bot? Что, чем и когда лучше других?
С нг анчоусы. Мне нужно: прочитать из бд > положить на диск > прочитать с диска > записать в бд
Пробую делать через csv reader/writer, НО этот пидор вместо NULL, ставит просто пустое поле, им соответственно во втроую бд пишутся просто "", а не NULL, как заставить его писать NULL, без использования pandas?
>>2254548 >не return a, b, c, d >А нужно return [a, b, c, d], Петушара, ты нахуя собрался возвращать лист вместо тюпла? Что тебе мешает сразу весь тюпл вернуть в одну переменную?
>>2254055 Вод для таких как ты, умные люди придумали ООП, чтобы не ебаться со 100500 функциями, их аргументами и ретернами. Скорее всего весь твой набор 40 функций можно запихнуть в 2-3 класса в виде методов, что существенно упростит работу и структурирует исходный код
Аноны, хочу тут потихоньку начать осваивать фласк. У меня есть скриптовое приложение с консольным интерфейсом, и я хочу перетащить его в веб. Отсюда возник вопрос - а вообще, когда я разрабатываю что-то, мне нужно сразу в архитектуре приложения учитывать, что у него будет веб-интерфейс? Или там фласк (в данном случае) - это просто слой поверх уже существующей логики?
Аноны, как отправить куки (csrf token) в get запросе, чтоб сервак меня не посылал с ответом page expired, а выполнял запрос? Такая конструкция не пашет:
url1 = 'https://mifirm.net/imei' url2 = 'https://mifirm.net/formfind_check' payload = {'formfind_imei': '000000000000000'} s = requests.Session() r = s.get(url1) x = requests.post(url2, data=payload, cookies=r.cookies) print(x.text)
>>2255012 Слышь, питух, хули ты на людей раскукарекался? Твоё место возле параши, не забыл ещё? >>2255344 Иногда лист работает быстрее кортежа, представь себе. Никакой принципиальной разницы тут нет. Вполне нормально вернуть dict или set вместо соответствующих frozenset/frozendict, и точно так же нет никакой трагедии в list вместо tuple.
Как самому скомпилировать на линуксе IDLE? Сорсы лежат вместе с питоном - что с ними делать? makefile для make -> make install есть лишь в общей папке, но он IDLE не устанавливает. Во всех инструкциях из репозиториев качают готовое, но мне нужна старая версия, которой там нет.
Как сделать так чтобы при завершении питон-проги, строго выполнялось определенное действие (например писал некая информация в левый файл), вне зависимости от того, успешно прога завершилась или упала с ошибкой. Напрашивается повесить некий коллбек on_exit, только как? Такое можно сделать в пистоне? Городить кукую-нибудь хуйню с try-except-finally на высоком уровне?
>>2255368 Минуточку, в прошлом посте же говорил, что >Разницы в производительности что лист что кортеж тут нет никакой. А теперь лист быстрее уже? Ну что ж, citation needed, как говорится, Неси бенчи, раз сам себе противоречишь.
И, если у тебя трудности с чтением - я спросил, давно ли туплы перестали распаковываться, потому что ты порекомендовал изменить тупл на лист с аргументом >Чтобы потом его распаковать
По-моему, кто-то запизделся. Иди почитай что-нибудь из шапки, если не понимаешь как работет синтаксис распаковки и типы из стдлибы. Потому что пока что выглядишь как вкатун, пробежавший инфоцыганский курс и возомнивший себя д'Артаньяном.
Учу Питон уже около 3-х лет с перерывами, могу максимум написать какой-нибудь скрипт для вычисления дискриминанта из выражения. Всё это время я чувствую, что учу и делаю всё как-то не так, прогресса нет совсем. Сейчас учу по книжке Кори Альхофа "Сам себе программист", всё по-классике: функции, модули, списки, кортежи и т.д., а хули мне со всем этим делать я до сих пор не понял. Как вы обучаетесь, ваши советы?
>>2255540 У тебя хуёвая цель, ты учишь язык, ради того чтобы учить. Прекрати читать книжки и пиши код. Для начала ебани что-нибудь на фласке, например вывод прогноза погоды, если сразу сложно, разложи на части, сначала получи и запиши прогноз погоды в бд, потом выводи в веб.
>>2255551 Кто мы-то, мне вообще пихуй, это у того шиза один пост опровержительней другого, вот пусть закапыват себя дальше, посмеемся. Никаких бенчей офк не будет, потому что он пиздобол
>>2255535 >Минуточку, в прошлом посте же говорил Это не я (>>2255096) отвечал, дебич. >ты порекомендовал изменить тупл на лист с аргументом Я не рекомендовал изменить тупл на лист, это ты придумал. Я предлагал возвращать список или словарь, ну можно и кортеж, мне похуй. Это уже ты доебался до листа вместо кортежа. >По-моему, кто-то запизделся. По-моему, тебе делать нехуй, как срать в треде и доёбываться до такой хуйни.
>>2255598 >Я не рекомендовал изменить тупл на лист >Я предлагал возвращать список >в изначальном коде возвращался тупл Убедил, ты не шиз, ты в суперпозиции "предлагал, но не рекомендовал".
>>2255535 >Минуточку, в прошлом посте же говорил, что >>Разницы в производительности что лист что кортеж тут нет никакой. И что? Ну кто-то написал так. Я написал иначе. И что? Твой мозг не может вместить в себя анализ двух утверждений? Я не знаю, при чём тут чей-то прошлый пост, я в своём единственном посте в этой ветке написал: 1) Иногда лист работает быстрее кортежа, представь себе. 2) Никакой принципиальной разницы тут нет. Если ты не способен осознать то, что тут написано простым русским языком, я тут бессилен. Разумному человеку сказанного достаточно. >А теперь лист быстрее уже? Ну что ж, citation needed, как говорится, Неси бенчи, раз сам себе противоречишь. Ща всё брошу и буду кому-то что-то доказывать. Больше мне заняться нечем. Чтобы что? Чтобы я потратил полчаса на поиск кода, а ты потом твердил, что мои пруфы не пруфы или в конце-концов даже признал, что я прав? И что мне это даст? >И, если у тебя трудности с чтением - я спросил, давно ли туплы перестали распаковываться, потому что ты порекомендовал Ты бредишь! Ничего я не рекомендовал, кроме того, чтобы некий питух вернулся обратно на парашу, с которой он по какой-то причине посмел вылезти в приличный тред. >изменить тупл на лист с аргументом Что блядь? Я даже вникать не хочу, что ты тут пишешь. >По-моему, кто-то запизделся. О да, ты запизделся. >Иди почитай что-нибудь из шапки, если не понимаешь как работет синтаксис распаковки и типы из стдлибы. Потому что пока что выглядишь как вкатун, пробежавший инфоцыганский курс и возомнивший себя д'Артаньяном. Что ты несёшь, упоротый? >>2255566 Так ты и есть шиз. Какой один пост опровержительней другого, когда я в этой ветке всего один пост написал, не считая этого? >>2255566 >Никаких бенчей офк не будет, потому что Потому что у меня других дел хватает. Скажи спасибо, что я вообще упомянул об этом, мог бы и не упоминать. >>2255598 >Это не я (>>2255096) отвечал И не я.
Если нужно возвращать несколько значений из функции то это онли кортеж, так как тот же mypy пошлет вас нахуй с такими приколами. А если у вас на проекте нет проверки типов, то ваш проект помойное говно. Спасибо за внимание.
>>2255661 Могу вернуть кортежем, могу списком, могу словарем, могу кастомным типом или датаклассом, и аннотации всё это указать. И линтер нахуй меня не пошлёт. Если это работает и не создаёт лишних строк кода и операций, то где твой бог теперь?
>>2255668 Списком ты не сможешь вернуть так как в типе не укажешь количество возвращаемых из функции значений, а если значения еще разные по типам то тебе придется писать Union, а потом по коду расставлять костыли на проверки isinstance. Тут уже тебя на ревью пошлют нахуй.
>>2255646 Ебать порвало. >Скажи спасибо, что я вообще упомянул об этом Спасибо, что упомянул о том, что из функции можно возвращать список вместо тупла. Хуй знает, правда, зачем.
>>2255668 Если делаешь петпроекты для души - на здоровье, в противном случае тебе перезвонят.
>>2255670 >в типе не укажешь количество возвращаемых из функции значений На то я и возвращаю список? А в кортеже я типа указываю? Т.е. ты хочешь сказать, что если возвращаю кортеж элементов, мне не надо писать -> Tuple[str, str, ...]? Ок)) Я могу вообще всё в Iterable засунуть и мне опять же будет похуй, как и интерпретатору. >>2255671 >в противном случае тебе перезвонят Слава богу, что как-то за 8 месяцев меня ещё не пидорнули с текущей работы, а то двач послушать, то вообще брать не должны были.
>>2255678 >А в кортеже я типа указываю То есть ты любишь вернуть заранее неизвестное колоичество заранее неизвестно чего? Да уж, твоим коллегам не позавидуешь.
>>2255681 >>2255682 Круто, т.е. это теперь я опять тупой/тролль/шиз, хотя мне сверху пишут, что я не могу вернуть списком, а только кортежем, т.к. якобы не могу указать количество возвращаемых значений из функции, хотя и там и там мне надо указывать. Пишите докстринги, не будьте батхёртами.
>>2255702 Охуенно. И вот этот человек кичится тем, что его не увольняют.
Если до сих пор не понял, то у тебя только что получился List[Union[dict, str]] Ценность такого тайпхинта нулевая, ты не знаешь ни количество элементов, ни тип каждого из них. То ли str, то ли dict, хуй его знает. Может, там вообще пустой список будет.
>>2255707 Спасибо, ты просил пример из доки, тебе привели, ты же не хотел через Union. >Ценность такого тайпхинта нулевая, ты не знаешь ни количество элементов, ни тип каждого из них. >To specify a variable-length tuple of homogeneous type, use literal ellipsis, e.g. Tuple[int, ...]. Зато тут я всё знаю, конечно же.
>>2255710 >ты просил пример из доки, тебе привели Твоя дислексия прогрессирует, не запускай ее. Я просил, цитирую: >аналогичного примера >на длину и тип каждого элемента которого ты до сих пор не привел.
>Зато тут я всё знаю, конечно же Цветной текст в браузере обозначает ссылку. Если нажать на таковую из моего предыдущего поста, то откроется документация на конкретном разделе, в котором описано, как описать тупл, его длину и тип каждого элемента. Чего ты до сих пор не сделал со своими списками с юнионами, после которых надо проверки длины и типа городить.
ИТ стремительно устаревает Вместе с тобой. Стек, который был актуален лет 5-7 назад, сейчас уже мало чего стоит. Постоянно появляются новые парадигмы, языки программирования, фреймворки, библиотеки и т.д. Если ты самостоятельно не обучаешься, можно быстро выпасть из обоймы. В то время как конкуренция на рынке только ожесточается и на место одного разработчика претендует прокачанные, владеющие актуальными технологиями молодые специалисты (та же история в DevOps, системном администрировании, тестировании и т.д.). И нет, рынок не слаб: полно бестолковой молодёжи, но и сильных специалистов с опытом работы хватает. Золотое Эльдорадо безграничных зарплат всё больше отступает, ИТ становится скорее рутиной, чем строительством будущего.
Увы, некоторые ИТ-специальности и должности тоже трансформируются, видоизменяются и уходят в облако, аутсорсинг, задачи из серии М2М. Сложные системы выходят на новый уровень автоматизации и тем самым сокращают потребность в инженерах и разработчиках. Поэтому нужно быть гибким и обучаемым, чтобы легко менять свой профиль внутри отрасли.
И вроде бы — что плохого в непрерывном обучении и развитии для человека с интеллектом? Но обучение и самообразование выходит за границы рабочего дня и ты, чтобы оставаться тем же крутым профессионалом, вечерами пилишь свой пет-проект, ковыряя новинки Go, Java, JS (или что ты там предпочитаешь) и попутно изучая что-то совершенно новое, чтобы привнести это в рабочий проект, развивать его, делать максимально конкурентным. А это ещё один повод присмотреться к венерианским суткам, они больше подходят для качественного айтишника.
>>2255716 >Цветной текст в браузере обозначает ссылку. Если нажать на таковую из моего предыдущего поста, то откроется документация на конкретном разделе, в котором описано, как описать тупл, его длину и тип каждого элемента. Чего ты до сих пор не сделал со своими списками с юнионами, после которых надо проверки длины и типа городить. Помоги с дислексией, папиши пример с туплом с его длиной и типом каждого элемента, как в документации, а то я не умею её читать и кликать по цветному тексту.
>>2255724 И я всё равно не вижу разницы с списком (кроме синтаксиса), т.к. твой кортеж также может вернуть пустой список/словарь, и даже может вернуть не 2 значения.
>>2255730 Нет, не может. Прочитай еще раз пример из документации. Да, технически может, но любая иде даже без линтеров сразу на это начнет плеваться. В отличие от.
>>2255718 >Но обучение и самообразование выходит за границы рабочего дня и ты, чтобы оставаться тем же крутым профессионалом, вечерами пилишь свой пет-проект, ковыряя новинки Go, Java, JS (или что ты там предпочитаешь) и попутно изучая что-то совершенно новое, чтобы привнести это в рабочий проект, развивать его, делать максимально конкурентным. А это ещё один повод присмотреться к венерианским суткам, они больше подходят для качественного айтишника.
Это какие-то шараги с жестким таймтрекингом? Свободно пилю на работе петы и дрочу другие языки, а дома занимаюсь своими делами никак не связанные с кодингом.
>>2255744 То, что ты страдаешь дислексией уже более-менее понятно, но боюсь, к полному диагнозу также добавится рукожопость. Пучарм на такое ругается даже без дополнительной настройки, прямо из коробки. На фото - комьюнити пучарм, любитель такой ругани.
>>2255918 Меня взяли мидлом, при том что коммерческого опыта проганья на питоне было около полу года, и то я в основном писал всякую скриптовую хуйню для автоматизации, и только начинал изучать джангу, а до этого был аналитиком. На текущем месте пилю веб-приложения (сначала тока бэк, сейчас и бэк и фронт) для копроративного пользования. Бэк django, ninja, neo4j, graphql, mssql, фронт сначала делал через тэмплейты, потом на ванильном жсе, сейчас на vue 3.
тот самый обычный говнокодер на проекте где нет настроенных линтеров и нормального ревью
>>2255940 >и то я в основном писал всякую скриптовую хуйню для автоматизации Тут я спизданул немного, т.к. ещё etl-процессы пилил и работал немного с nifi, airflow и postgresql, и взяли в том числе из-за этого, т.к. планируем в этом году переезд на greenplum.
Всем привет. Делаю тут проектик в курсике одном. Программа, которая получает урл страницы и локально её скачивает в общем. Можете подсказать, че тут от меня хотят, лел. Я не могу понять вот про этот сис экзит. Че за коды возврата? Там ссылка у них на википедию, но тоже чет не особо понял. Что значит "утилита должна возвращать правильный код"? Я прочитал, что типа если всё норм, то код 0, а всё остальное не понял. Потом, "должны учитываться все возможные сетевые проблемы", это типа какие? Ну вот я могу проверять, что типа если у ответа код не 200, а чё ещё делать?
>>2255975 conn timeout conn refused tls handshake failed dns discovery failure not existent domain и так далее, все то, что тебе пишет браузер, когда ходишь по подозрительным ссылкам, вбиваешь их вручную, или не оплатил инторнеты
>>2256032 Окей, а это как вообще ловится? Типа это не в респонсе, а просто отдельное исключение какое-то реквестст сделает?
Ну и про сис нихера не понял всё-таки. Как это работать должно? Типа я сам эти коды выдумываю? Просто чтоб потом в скрипте их обрабатывать? Типа если код 1 - пишу что там страница не найдена, код 2 - нет доступа к файлу итд?
>>2256064 >это как вообще ловится Да, вылетит эксепшн прямо на хттп-методе (для сравнения, при хттп 400+ метод выполнится, эксепшн выбросится дальше, в raise_for_status(), если ты его юзаешь)
Про код выхода я тоже хз, что именно хотят. Если нет какой-то конкретики, я б завершался с кодом = http status, если 400+ в запросе, или с кодом = 1, 2, 3... если вот эти сетевые проблемы.
>>2256130 Как вариант - читать документацию глазами, а писать код руками. Если узким местом окажется мозг, то применить широтно-импульсную модуляцию чтение/практика, с постепенным увеличением ширины фронта практики.
Сап. Как на питончике накатать скрипт, который может с дискорд аккаунта посылать сообщения в определенный чат на сервере? Я пробовал гуглить, но по запросу выдает только гайды по настройке встроенных (как я понимаю) ботов дискорда, а мне нужен бот со стороны аккаунта. Какие либы юзать?
>>2256657 Скорее в плане самоучителя, просто никак не определюсь по чему учиться. Лернжабаскрипт четенький красивый, с задачками, неужели божественному питону не запилил похожий сайтец?
>>2256662 Запили площадку под названием Степик, где люди выкладывают обучающий текст, картинки, видео (на Ютубе, но встраивается в страницу сайта) и организуют задачки с автопроверкой для учащихся (курсы по разным языкам, есть и не по IT). Эти задачки похожи на то, что есть у Кодеварс или Литкода (но более колхозно пока что на мой вкус).
Вот у Кантора, который и написал лерн джава скрипт, вот этого и не хватает - задачек с автопроверкой. Материала у него много, материал хороший, но без проработки каждой темы на 5-10 задачах (с возрастающей сложностью) ты ничего не запомнишь и не усвоишь.
А если ты про сайт-справочник по Питону... https://pythonz.net/ не плохой как справочник, но такого подробного сайта как у Кантора про js, но про Питон я не видел.
Приветики. Я из соседнего треда пришел (qa). Пять лет промакачил куашником ручником, дорос до 250. Свалил с работы чтобы перекатиться в автокуа. Прошел укус питона сейчас, берусь за селениум/pytest. И вот я думаю, а может нахуй их и дрочить джангу? В общеайтишных делах я хорошо шарю, а девы имеют более высокий потолок развития. Сложно ли вообще устроится джуном питонистом сейчас? Какой порог вхождения, учитывая бэкграунд? Сколько по времени будет дорасти (я понимаю что очень размыто, но все-равно) до 250-300 хотя бы? В aqa мне придется год-два до этого обратно подниматься. Мб действительно спекнуться, пока совсем старым не стал.
>>2248924 (OP) Сап, анончики. Недавно начал давить питона оп литературе которую вы скинули. Сейчас занимаюсь по самоучителю для детей, так-как считаю такие самоучители лучшими для вката. Только что выполнил задание, по написанию программы для рассчета лунной массы. Я молодец. А вам спасибо.
>>2256820 >>2256821 Я пока сидел, немного доработал: re_call = None while True: re_call = str(re_call) if (re_call == 'да'): break weight = input('Сколько ты весишь на Земле? ') wei_plus = input('Какая у тебя прибавка веса в год? ') times = input('На сколько лет вперед считать твой Лунный вес? ') weight = float(weight) wei_plus = float(wei_plus) times = int(times) times = times + 1 moon_w = 0 moon_w = float(moon_w) for i in range(1, times): weight = weight + wei_plus moon_w = weight * 0.165 print ('На Луне ты будешь весить ',moon_w, ' кг когда пройдет ', i, 'год') import time time.sleep(5) re_call = input('Рассчеты закончены? ') if (re_call == 'да'): print('Благодарю за использование этого конвертера! ') import time time.sleep(5) break elif (re_call == 'нет'): print('Продолжаем... ') import time time.sleep(5) elif (re_call != 'да', re_call != 'нет'): while (re_call != 'да', re_call != 'нет'): re_call = input('Напиши либо "да", либо "нет"... ') if (re_call == 'да'): print('Благодарю за использование этого конвертера! ') import time time.sleep(5) break elif (re_call == 'нет'): print('Продолжаем... ') import time time.sleep(5) break Теперь у меня нормальные выходы из циклов. Куда там import time сунуть? Посмотрю что будет.
>>2256840 Лол, очень непривычно вкатываться из лампового бэйсика во что-то нормальное. Тоесть, while внтури другого while не торт? Или в моем случае можно было избежать? Таким образом, я пытался получить в процессе "использования" однозначности вводимых ответов. "Защита от дурака". Цикл while всегда True? или Elif? В сраном учебнике для них обоих показывали возможность ставить там условия, как я сделал, кстати, все отлично работает у меня. На следуюющих выходных займусь доработкой, чтобы для рассчетов принимались только числовые значения.
>>2256840 Все, я убрал лишнее из while и поставил ему православное True. Спасибо анончик. Теперь буду ждать следующих выходных и допишу защиту от некорректного ввода числовых данных.
>>2256844 >Цикл while всегда True? или Elif Оба. Выполняемое условие всегда True, потому что ты передаешь ему кортеж >re_call != 'да', re_call != 'нет' Даже если оба условия False, то получится проверка вида if (False, False): А непустой кортеж приводится к True.
>>2256604 Вопрос в решении задачи. Если такое не с руки решать, то пойду в другой тред (машоб), но вообще эту задачу мне не к спеху и не обязательно решать.
Условие задачи:
Марсело решил открыть новое кафе и будет импортировать необходимый кофе из Бразилии. Он хочет объединить три раунда, а именно: Lazy Sunday Morning, Refreshing, All night quiz. Для приготовления этих смесей необходимо использовать кофейные зерна с 4 различными видами кофеина. В миксе Lazy Sunday Morning должно быть не более 25% кофейных зерен III и IV сортов. 75% -Refreshing должны составлять кофейные зерна II и III типов. По крайней мере, 60% всего All night quiz состоит из кофейных зерен IV типа.
Цены за различные сорта кофе:
I тип - $ 2,50 за 500 фунтов
II тип - $ 2,75 за 500 фунтов
III - $ 2,00 за 500 фунтов
IV - $ 3,50 за 300 фунтов
Из одного фунта (полкилограмма) кофейных зерен можно приготовить 30 чашек кофе. Lazy Sunday Morning продается за 1,25 доллара, Refreshing продается за 1,50 доллара, и, наконец, All night quiz продается за 1,75 доллара. Постройте модель, которая максимизирует прибыль Марсело, и решите модель, которую вы построили на Python."
Пример с производством 4 видов товаров из 2 ресурсов в задаче из примера с этого сайта выглядит похожим на мою задачу, но не могу перенести логику моей задачи в этот пример.
>>2256874 Спасибо. Возьму себе на будущее для изучения. Просто на данный момент, я только освоил циклы, до функций еще не дошел, хоть и использовал вызов функций time. Поэтому решал задание теми средствами, которые знаю. Я буду вас время от времени развлекать вас своим кодом.
>>2256884 в том варианте не объявлено ни одной функции, все в том же духе, что и у тебя в твоем вызовы не только time.sleep(), но и input(), print(), range(), float(), int() так что тот пример не про функции, а скорее про организацию логики и сокращение дублирования кода
>>2256872 Нихуя не понятно и вычитать суть задачи сложно. Формулировал ее какой-то соевый хипстопорридж, очевидно. Измени Марселя на Ивана, доллары на рубли, фунты на килограммы, и вот это говно >три раунда, а именно: Lazy Sunday Morning, Refreshing, All night quiz на бульбу, моркву и свеклу. Будет и задача понятнее, и кафе нажористее.
А так - да, выглядит как обычная линейная функция, машоб не нужен, разве что только тебе нравится тратить время на обучение модели и получение точности навроде 76%.
>>2256899 Вот я и понял, что это линейная функция, но не понял как для нее условия прописать в PuLP. В примере на сайте все понятно, а тут какое-то новый уровень сложности.
>>2256872 Ну да, надо записать функцию прибыли (т.е. профит - косты) и максимизировать ее с учетом линейных ограничений. Такую хуйню даже эксель может решить.
Я на питоне с таким не работал, но уверен, что должны быть готовые либы. Надо просто нагуглить доку и в путь.
>>2256738 Твой бекграунд вообще ничего не значит в dev. Сиди в aqa. Плюс стеки совсем разные, у aqa там куча своего узкоспециализированного. При перекате в dev на тебе будут смотреть ещё худе чем на скиллбоксового даунича, примеры можешь на ютубе посмотреть и в aqa треде постили, типо вопросики "а почему вы сразу в dev не пошли?".
С другой стороны в aqa вроде как ценится опыт ручником, ну и плюс у тебя уже понимание требований и прочей тестировочной теории. В aqa есть куда расти ещё, потом про нагрузочное узнаешь ещё какую хуету, java core ещё выучи и вообще паладином энерпрайза станешь.
>>2257595 Спасибо. Знаю что хэды в крупных компаниях сша могут безумные деньги получать (до 300k/y), но до такого дорасти практически невозможно мне кажется. А программистом сеньором лутать свои 6-7к мне кажется явно полегче. (как поднимать тому же aqa выше пятерки/m, или ручнику выше 3.5/m - я не представляю). C другой стороны, это уже достаточно большие деньги, но будет обидно если через 2-3 года я пойму, что все, потолок, а прыгать в девы будет уже поздно.
Пишу тут скрипт, который должен сохранять html страницу, потом пробегать по ней и вытаскивать нужную инфу в файл формата txt. Код прилагаю: https://ideone.com/XEmho0
Появляются проблемы следующего характера: Если я запускаю это в PyCharm, то вместо 5 секунд мои функции, как я написал в schedule, запускаются секунд через 30. Вторая проблема - когда я сделал .exe файл из .py, он не работает как хотелось бы. При запуске появляется консолька на долю секунды и закрывается. Ну и у меня еще скрипт должен создавать html и txt файлы, они не создаются очевидно Пооясните где я не прав, пожалуйста. Ну или если видите что я наговнокодил и что-то стоит поменять. Мне уже кажется сомнительным, что стоит сохранять страну в html, а не скрейпить напрямую нужную инфу.
По плану хотел чтобы обе функции работали каждые 15 минут, а 5 секунд поставил просто чтобы было нагляднее самому смотреть.
Я так и не поянл особо че делать. Что за коды возврата-то блэд? Я так понял сис экзит принимает просто сообщение, которое ничего не значит само по себе? То есть я могу это сообщение для пользователя туда и писать, а потом в скрипте, который импортирует эту функцию отлавливать исключение систем экзит и его сообщение распечатывать и в лог сувать, да? Но че тогда такое "правильный код возврата"?
>>2255671 >Спасибо, что упомянул о том, что из функции можно возвращать список вместо тупла. Дебил, хватит мне приписывать твои вскукареки. Иди на хуй, короче говоря, тупорылый дегенерат!
Аноны пояснить суть вашего спора. Чот я прочитал по диагонали и нихуя не понял.
Почему нельзя возвращать из функции лист? Зачем мне возвращать тупл, если я дуальше хочу его как лист использовать? Ну пусть даже я возвращаю обьёкт, ну и хуй с ним пусть полежит в листе?
>>2258331 Да ну еб вашу мать, еще один. Возвращай на здоровье, только забудь про поэлементную типизацию и возможность безопасно распаковать этот лист в переменные потом. Если оно тебе не надо, то хоть пятимерными листами кидайся.
>>2258331 Если пишешь код без тайп хинтинга и для себя, то никакой разницы нет (на самом деле и с ним с точки зрения работы программы разницы нет, но линтер будет ругаться и другому говнокодеру не будет понятно, что у тебя функция возвращает).
Привет, тредик. Почему, когда я запускаю скрипт через VS Code, процесс сам переходит в несуществующую папку (cd 'c:\\Users\...\\иС) и ищет там файл для запуска? В скрипте ходьба по директориям не используется, сам я cd не пишу. В гугле не нашел такой же хуйни.
>>2257730 Да я уже вкатился, я имел в виду вкат именно в эту область, неправильно поставил вопрос. Постоянно вижу этот язык в топе разных рейтингов, но не знаю как там с востребованностью на рынке труда. Потратить время на изучение технологии, а потом понять, что она не нужна было бы неприятно.
>>2258285 Ну там написано статусы, которые кроме 200 И все возможные сетевые ошибки. То есть как я понимаю, мне надо отлавливать исключение и вызывать сис экзит, а потом отлавливать этот сис экзит? А то не буду же я вручную каждую возможную сетевую ошибку описывать, да?
>>2258672 >Теперь у r.a будет тип dict, а у r.b будет тип str. >a: dict >b: str Никак не мутирую инстанс класса и явно ему передаю a = {1: 2} и b = 'hello'. >print(isinstance(r['a'], dict)) #True >print(isinstance(r['b'], str)) #True Даа, как же так работает...
>>2258374 У меня в продукте есть код, который запускают консольную программу, она по рестапи общается с сервером и возвращает джейсон. Этот джейсон паристся и возвращается из функции. Там вполне может и список словарей быть. Валидация джйсон схемы происходит в консольной программе. Значит список всегда валидный возвращается. Без жёстких тайпхинтов типа ограничивать длину списка (откуда я знаю какой длины будет список, который сервер отправит) и содержимое (зачем мне в анотациях дублировать джйсонсхему, которая и так нормально проверяется в другом месте плюс какая схема применяется зависит от аргументов и эндпоинта так что мне ещё и на одну функция надо будет юнион разных схем повесить фигня какя-то выходит если так делать) Что проекте сделано не так и как это исправить?
>>2258932 Вижу не понял. Вот смотри. Есть консольная утилита для общения с бэкендом. Типа awscli или kubectl. И есть обёртка над этой утилитой на питоне в виде библиотеки, которую можно импортнуть и запускать эту консольную утилиту передавай ей нужные параметры как параметры командной строки и получая результат из stdout в виде одного джейсона. В обычном режиме утилита печатает всякие таблицы в человекочетаемом виде, а нам надо именно в джейсоне чтобы потом можно было с этим результатом в программе работать. Утилита сама общается с бэкендом и всё валидирует. Джейсоны, которые либа читает из stdout этой утилиты уже валидны. И либа заранее не знает что она там прочитает. Поэтому там где возвращается список в джейсоне функция парсинга stdout так и возвращает список. И нет там никакого тайпхинта на список определёной длины т.к. бэкенд может любую длину вернуть. И что ты предлагаешь делать? Какой тайпхинт на такую функцию поставить?
>>2258935 Никаким тайпхинтом ты это не проверишь, твоя утилита должна парсить твой жысон с бэкенда и писать в stdout, если он прошёл проверку при парсинге, или в stderr, если нет. Валидировать ты можешь через импорт жысон, ну либо создавать инстанс класса из того же пайдантика с заранее заданной схемой и передавая в конструктор свой жысон.
>>2258930 Этот код сломается после второго рефакторинга по уже описанным выше причинам и узнаешь ты об этом только когда все упадет в рантайме. Поэтому такой код проигрывает в стоимости поддержки, а все из-за каких-то сраных скобочек, которые тебе так сильно полюбились не к месту.
>>2258934 Чел, ты ведешь себя как персонаж мема "смотрите, я долбоеб". Ок, все поняли, что тебе насрать на существующие соглашения и практики. Тебя уже назвали долбоебом один раз и обосновали почему, но ты не приводя ни одного контраргумента просто продолжаешь свою шарманку "нО вЕдЬ кОд рАбОтАеТ жЕ, мЕнЯ жЕ еЩе нЕ уВоЛиЛи". Че ты еще хочешь-то тогда, переубедить кого-то как делать правильно, соглашения переписать? Тогда ты сайтом ошибся.
>>2258938 Не знаю чем ты занимаешься, код не упадёт ни после какого рефакторинга, только если ты сам его не захочешь уронить. >проигрывает в стоимости поддержки Ну да, F12 только избранные как ты могут нажимать. >существующие соглашения и практики Пеп8 тебя не обязывает в обязательной форме указывать типы.
>>2258940 Какого неудобного ответа? Майпай из коробки идёт в пайчарме/вскоде? Нет. При запуске скрипта они ругаются на скрипт при стандартной настройке? Нет. У меня пайчарм не тот? Комунити версия 2021.2. Пайлинт и фалке8 из коробки не ругается если только заранее код не прогнать и конфиг не настроить. Распаковка тапла и листа отличается? Нет.
>>2258938 Я никого не пытаюсь переубедить и никому не пытаюсь прививать правильные/не правильные практики программирования на питоне, если у людей есть голова на плечах, они сами решат, что правильно, а что нет, и из-за чего загоняться, а из-за чего нет.
>>2258936 >Никаким тайпхинтом ты это не проверишь, твоя утилита должна парсить твой жысон с бэкенда и писать в stdout, если он прошёл проверку при парсинге, или в stderr, если нет. Так и делаю. Если ты то же самое говоришь, то вопрос был не к тебе, а к тому жизу, что утверждает, что нельзя возвращать список из функции т.к. тайпхинты нормально не прикрутить
>>2258941>>2258943>>2258944>>2258945 >код не упадёт ни после какого рефакторинга Упадет, стоит добавить или удалить элемент в/из возвращаемого списка. Если бы там был тупл, иде сразу засветила бы варнингами как на моем скрине, в случае с листами - иди и обходи руками все использования функции, и не дай боже, если пропустишь хоть одно, никто ничего не скажет.
>Ну да, F12 только избранные как ты могут нажимать. О том и речь, ручная проверка < автоматическая от IDE и линтеров. Автоматическая, в зависимости от срока жизни продукта, может быть на порядки дешевле. Отсюда и разница в стоимости поддержки, о которой говорю.
>Пеп8 тебя не обязывает в обязательной форме указывать типы. Охуительные аргументы потекли. Не обязывает, дальше-то что? От этого внезапно переменные сталу лучше в список заворачивать в ретернах вместо туплов, или что? Поддерживаемость и читабельность кода улучшается?
>Майпай из коробки идёт в пайчарме/вскоде? Нет. Снова чини дислексию. Писал же, голый пч на скрине. Без ничего. Да, даже без майпая. Да, даже без линтера.
>При запуске скрипта они ругаются на скрипт при стандартной настройке Ругаются даже до запуска, скрин мой выше. Хотя это, конечно, же, фотошоп, а не твои кривые руки. Если варнинги и подсветка тебя не останавливает от запуска, то, возможно, тебе стоит сменить язык на жабу, там пока не сконпелируешь с правильными типами, ничего не запустится.
>нельзя возвращать список из функции т.к. тайпхинты нормально не прикрутить Соломенные чучела пошли в ход. Список из функции можно и нужно возвращать, если это какой-то массив данных, обычно это массив элементов одного типа. И это даже можно нормально типизировать. С этим никто, блять, не спорит, ну или пруф ми вронг. Речь выше шла о возврате фиксированного тупла с переменными (возможно) разного типа и распаковке этого тупла в переменные: >не return a, b, c, d >А нужно return [a, b, c, d], Ты зачем-то продолжаешь копротивляться, что даже в этом случае рукотворный лист из этих переменных лучше тупла, хотя это уже обоссали выше.
Алсо, конкретно ты >>2258935 занимаешься какой-то хуйней. Надо валидировать - ставишь jsonschema и юзаешь его. Надо преобразовывать словари в классы с полями - юзаешь pydantic. В жсонах в принципе нет структуры, аналогичной туплу, только массивы, поэтому там списки вполне натурально используются.
Напридумывали себе охуительных историй про то, что кто-то запретил списки возвращать, и сами спорят с этим, еще и вкатунов с толку сбивают своей шизой.
>>2258948 >Снова чини дислексию. Писал же, голый пч на скрине. Без ничего. Да, даже без майпая. Да, даже без линтера. Ваша ide не ide. Понял-принял, даже отвечать не буду.
>>2258949 Ну, значит, моя иде не иде. И всех остальных тоже. И на сайте жидбрейнса пиздят про работу с типами. Хуево наверное быть нами, лишнее в иде работает.
Т.е. два метода вспомогательные, да могут вызываться по отдельности, но основную работу делает третий метод, как правильно офрмлять такок отношение? Просто делать 3 метода в рамках класса и не парится, или уже делать это на этапе запуска? Или вобще использовать колдунства вроде указателей? Что есть почитать на тему?
>>2258977 Если класс Response из твоего фреймворка/либы поддерживает метод json() - используй его, код будет более читаемым. Собственно, обычно под капотом этих методов и лежит дефолтный json.loads()
За эту неделю я прошел 3 собеса из 3, думаю вот куда пойти работать.
На одну вакансию уже было подано больше 30+ заявок(как говорит djinn).
Собеседование было таким -
Что такое ООП(Инкапсуляций,абстракция,полиформизм) С какими паттернами имел дело? Найди мне палиндром Что такое итератор - генератор Имел дело с БД?
Все ты взят, зп 800$
На всех собеседованиях зададут максимум 1 вопрос более менее, а остальные так, чисто пообщаться, как вообще их можно провалить, как эти 30+ человек провалили собеседование, я даже подумал, что фирма разводная какая-та, но нет вроде, на остальных собеседованиях все так-же - Пару вопросов, ты принят.
А на работе же душняк может быть? Ну это совсем не правильно проводить такие собесы, вдруг я не справлюсь с работой, то потом виноват буду?
>>2259486 > Что такое ООП(Инкапсуляций,абстракция,полиформизм) > С какими паттернами имел дело? > Что такое итератор - генератор Это же вопросы на несколько часов ответа
Хз как можно допустим затянуть ответ на итератор-генератор, лично я ответил так - Генератор представляет собой итератор, но не является им, синтаксически используется немного в других местах, сам итератор имеет просто метод некст, который вычисляет следующее значение при обращение.
>>2259541 Ну с тем же итератором мы можем расширить какой-то обьект, с генератором так сделать не получится. Так-же у нас есть генераторное включение, но вот итераторного не может быть.
Для примера создал бы класс с итератором.
А если серьезно, то я смогу обьяснить где это используется и зачем, но вот конкретно между генератором и итератором же нет ничего такого разного, они похожи, генератор делает тоже самое что и итератор, но имеет ключевое слово yield и обе штуки используются для обхода огромных данных
Гайз, мега сложный вопрос(нет)... есть список к примеру ['users', 'id', 'city'] и значение к примеру - хуй надо сделать словарь вида - {'users': {'id':{'city': 'хуй'}}} как это сделать
>>2260015 >Пукать гринтекстом Парсишь строку на наличие символов, допустимой длины, начальных символов. Просто же. На перле это проще реализовать было бы
Малеха закрепился в базовом питоне, думаю, какой взять пет-проект. Щас сидел срал и скроллил двач с телефона, в голову пришла идея взять апи двача и написать консольную обертку - отобразить список тредов, зайти в/загрузить тред, почитать сообщения, написать ответ. Потом подучу фласк и оберну все в вебморду.
>>2260695 А ты другим не дашь потыкаться? Ну ок. Алсо, вебморда к апи двача, в то время как сам двач ей и является кажется тупиковой идеей для пета. Сделай прост свою борду, и то больше практического толка будет.
>>2260700 Да, это чисто для себя потыкать. Вообще я просто хочу более-менее научиться работать с апи - ничего лучше, кроме двачика в качестве практики не придумал. Просто не знаю, если есть варианты получше - то подскажи. Интересует вот эта отправка запросов туда-сюда, форматирование данных, отображение и т.д. До этого максимум с чем работал - тягал данные из БД.
>>2260702 >если есть варианты получше - то подскажи Попробуй апи гитхаба или гитлаба разобрать. Проект там например скачать или дернуть из него любой файл по выбору. Дофига чего можно придумать. И навыки хорошо прокачаешь и в реальных проектах может пригодится.
суп анончики, у меня есть вопрос по aiogram, довольно глупый как и я тащемта, сильно только не бейте . Бот просто в качестве тренировки и опробования знаний, почерпнутых из книжек и интернета по пайтону так что я совсем нуб. Есть основной скрипт (файл main.py) в котором формируется меню и отлов нажатий на кнопки. И есть отдельный модуль (dialog.py), в котором с помощью конечных автоматов формируется длинный диалог и хранение в памяти ответов пользователя. Вопрос: как запустить диалог из отдельного модуля? в интернете что то не очень много материалов по FSM статью mastergroosha читал
Что щас лучше для вкатыша - пердолить датафреймы в пандах или джейсоны в бекенде грузить? Где зарплаты жирнее? Так сложилось что мне пока приходилось максимум писать хелловорлд на фастапи - все остальное время писал ДАТА ПАЙПЛАЙНЫ. Даже МЛ трогать не нужно было. Имеет смысл грести в сторону бека или и так сойдет?
>>2261080 И там и там можно сказать одинаково. Иди куда нравится, градаций особых нет, кроме как на двачах, кто как хитровыебанно устроится столько и будет получать.
>>2261080 >пока приходилось максимум писать хелловорлд на фастапи >Где зарплаты жирнее? Вот прям сидят и ждут вкатуна, чтоб ему 200к платить. Тебе не поебать куда вкатываться?
Описал две функции, через schedule задал, когда должна выполняться первая. Как сделать так, чтобы вторая ВСЕГДА выполнялась через какое то время после первой? Если я задаю через schedule таймер второй функции, то рано или поздно они будут выполняться в один момент Например, в 3 минуту. schedule.every(1).minutes.do(ХХХХ) schedule.every(3).minutes.do(YYYY)
>>2261170 >Как сделать так, чтобы два линейных уравнения не пересеклись на графике У вас в младшей школе учат программировать, не пройдя базовую алгебру?
Сап вкатач. Такая ситуация – на днях собешусь не совсем на свою роль. Собес на Django программиста с годом опыта, а я самоучка с незначительным опытом ковыряния python кода в коммерции (написание скриптов чтобы данные в csv с одного формата в другой переводить и всякие веб-скраперы), перекатившийся в джаву. Со своим текущим опытом оцениваю свои шансы как "реальные", поэтому хотелось бы выбить джоб оффер. Для этого мне нужно лишь закрыть специфичные для python+django пробелы.
Tl;dr: Анон с годом опыта, расскажи о специфичных вещах которые ты узнал или начал делать в рамках своей работы. Какие вопросы на эту вакансию обычно задают? с этим вопросом утром еще в гугл полезу
>>2261603 Обычно внутреннее устройство питона. Мультитрединг, ивент луп, гил, конвой эффект, ио операции, лоулевел цпу баунд вычисления, интерпроцесс коммуникация, примитивы синхронизации, разница второго и третьего питона, внутреннее устройство дэфолтных функий, как работает врап и лру кэш из фанктулз, что делают контекст менеджеры, чем отличается генератор от итератора, ограничения гивента и селари, возможные проблемы при использовании орм, оптимизация запросов в бд, как работать с миграциями, протокол хттп, какой хейдер отвечает за оригинальный айпи проксированого реквеста, на какие методы надо ставить цсрф токен, какие типы данных поддерживает джисон схема, какие преимущества и недостатки лонголинга, разница пост и пут, идемпотентные методы, принципы солид, асид, рест, кап тиорема, особенности ноуэскьэль баз, какие бывают алгоритмы распределения нагрузки. Это с большего, что я вспомнил с последних собесов
>>2261603 От себя тоже добавлю. Общие: С какой последней версией питона работал? Можешь ли вкратце рассказать об изменениях в последних версиях языков? Откуда узнаешь про новые фичи/обновления языка, сопутствующие технологии и их аналоги? Что такое гил и зачем он? Приходилось ли использовать декораторы? Писал ли свои и зачем? Зачем использовать генераторы и итераторы? Есть ли в питоне интерфейсы (и для чего они в теории используются?) Есть ли в питоне перегрузка методов? Классы и множественное наследование - нужно ли это использовать и почему? Используешь ли аннотацию типов?
Бек: Какие основные хттп-методы знаешь? Какие когда используешь? Что нельзя передавать через гет? Что используют для защиты от xss? Как концептуально работает авторизация? Чем она отличается от аутентификации? Что такое орм и зачем она используется? Что такое маршрутизатор? Что такое шаблонизатор? Что знаешь о паттерне MVC? Что такое гуникорн? Знаешь ли что-то про rest/json api/graph ql? Что такое брокер сообщений?
Мимо-присутствую на технических собеседованиях питонистов
>>2261851 3.10 Обо всех - нет, но матч паттерн в стиле раста помню С телеграмов, с хабра, прочих ресурсов куда захожу Хуйня из под коня, которая укоренилась и ряд разработчиков тебе даже защищают его. Глобальный лок, который останавливает выполнение потока и переводит процесс на другой. Нужен якобы для упрощения работы в многопоточном режиме. Конечно. Например декоратор авторизации, декоратор форма, да дохуя каких. Есть, но не в привычном виде. Например более-менее похожи на интерфейсы zope interface сук, всегда проигрывал с этой зопы. Для того же, для чего интерфейсы вообще нужны, определить сигнатуру метода класса и заставить реализовать метод. Ну да, это магические методы, например __add__ Вопрос риторический. У множественного наследования есть проблема, например при ромбовидном наследовании могу побоычные эффекты произойти. Да, но не тотально в каждом методе.
А есть еще и не основные? get - запрос ресурса, post - создание ресурса, put - модифимкация ресурса, delete- удаление, options - проверка на то, какие методы поддерживает апи То, что не должно быть видно чужим людям: пароль, токен и т.д csrf токен Ой, вот тут лень думать. Аутентификация - вроде проверка личности, что ты это ты. Авторизация - получение прав в соответствии с твоей учеткой "Удобная" вещь для работы с бд, запросами. Только практически всегда проигрывает в работе правильным сырым запросам. Маршрутизатор - ? Че? Роутинг что-ли? Шаблонизатор? Пиздец, вот на этот вопрос даже отвечать не хочу. Что за тупые определения спрашиваются? Ничего Прослойка между нджинксом и приложением. Сервак, принимающий запрос Знаю, все, кроме graph ql - нормальный способ построения взаимодействия между беком и фронтом. Приблуда, занимающаяся передачей сообщений по определенному формату между пользователями брокера.
>>2261611 >внутреннее устройство питона >гил >лоулевел цпу баунд вычисления >интерпроцесс коммуникация >разница второго и третьего питона
>лру кэш из фанктулз >лру кэш из фанктулз >лру кэш из фанктулз
>идемпотентные методы >принципы солид
Вот это можно смело выбросить. Из разряда "а ты знаешь это? Нет? Так, ясно. Да, это мы так просто спрашиваем, ты с этим у нас вряд ли столкнешься, но на результат собеса повлияет. Даже если и столкнешься, то, а не важно. Следующий вопрос"
На собесе как-то спрашивали о внутренней работе питона. Дошли до того, как реализован список питона на С. Я сказал, что список - константный указатель, а значение - смещение указателя, потом спросил, а нахуя это спрашиваете, мы там свои списки на сях будем писать? Мне сказали нет, но ведь это интереснее чем про json разговаривать.
>Ой, вот тут лень думать Ты побазарь мне так на собесе, епт
>Только практически всегда проигрывает в работе правильным сырым запросам Чем проигрывает? По очками что ли? Или решением судей?
>Че? Роутинг что-ли? Что спросили, на то и отвечай
>Шаблонизатор? Пиздец, вот на этот вопрос даже отвечать не хочу. Что за тупые определения спрашиваются? Это мы решаем, епт, что спросить. Самый умный дохера, я смотрю? Деревья на листочке повертеть захотел? Мы там с тебя быстро 3 шкуры спустим
>Ничего Хоть честно. Тогда встречный вопрос: зачем ты вообще на Джанго пошел? Писал бы себе дальше скрипты для ИП Кабан Кабаныч
>нормальный способ построения взаимодействия между беком и фронтом Ты эту "нормальность" определяешь?
>Приблуда, занимающаяся передачей сообщений по определенному формату между пользователями брокера. По русскому что у тебя было? Фиг ли сам же термин в его определении используешь?
>>2262018 >Деревья на листочке повертеть захотел? Мы там с тебя быстро 3 шкуры спустим Сразу нахуй послан. А потом пиздуешь дальше работать и перерабатывать дома
Вот у я наговнокодил какой-то класс. Например класс ОКНО, он имеет методы ЗАКРЫТЬ ОТКРЫТЬ В_ИСХОДНОЕ, работа с обьектом класса всегда должна начинатся с метода В_ИСХОДНОЕ, стоит ли прописать запуск этого метода сразу в __init__?
>>2262007 Я бы тебя ещё попытал, но пока выглядишь сильным мидлом. 200к тебе цена. 250 если с доп вопросами справишься. Как сборщик мусора с гилом работает знаешь? Вообще какие проблемы от сборщика мусора появляются? Как ngnx с гуникорном общается? Я как гуникорн с приложением? Зачем он нужен? Почему нельзя без него? Как он обрабатывает входные запросы? Асинхронность на каком уровне добавляется? Сколько опыта? Другие языки знаешь? Коммерческий опыт с ними есть? Медиум с литкода за 10 минут решишь? Напишешь фабрику, которая принимает n и возвращает генератор, который всегда возвращает n самых больших чисел из тех, на которых его вызывали?
Проблемы сборщика, что он не отдает операционке высвобождаемую память, точнее отдает, но не часто, там какой-то механизм деления на большие и маленькие сегменты памяти. Маленькие сегменты в больших. Когда освобождается память из маленького сегмента, она остается во владении процесса, а не отдается операционке. И только при освобождении всех маленьких сегментов - большой сегмент памяти отдается операционке
Ну вообще без гуникорна можно, если напрямую cgi использовать через апач какой-нибудь. А если имеется не именно wsgi, в вообще зачем сервак, то он он взаимодействует по протоколу с приложением.
Фабрику могу написать, но не сейчас. Сейчас у меня работа
>>2262074 >Ну вообще уже допы довольно жесткие. Это уже сеньёрские темы.
По поводу сборщика мусора ожидал ответ про трёхуровневую модель и зацикленные ссылки. Не понял что ты ответил. Кажется ты пытался вспомнить трёхуровневую модель, но вспомнил только 2 уровня. Плюс проблема сборщика муссора в том, что при возможно параллельном доступе из двух тредов в один участок памяти сборщик мусор должен уметь с таким работать. В питоне это невозможно из-за гила и поэтому сборщик мусора однопоточный. В джаве например при большой нагрузке и неудачном конфиге окружения код может прекращать выполнение всех тредов на 1-2 секунды чтобы собрать мусор. Если например это произайдёт в момент грэйсфул шатдауна микросервиса с пятисекундным таймаутом, то у долгих запросов останется только 3-4 секунды чтобы завершиться и могут повылетать хттп ошибки юзеру или исключения в бэке. Питон лишён такой просадки по перфомансу за счёт ненастоящего мультитрединга.
По гуникорн тоже не то. Если говоришь, что можно, то уточни явные недостатки. И про асинхронность не сказал. Как раз гуникорн и конторолирует количество воркеров и асинхронные ли они. Без него очень тяжко
В общем крепкий мидл. Не знаю твой опыт, но предлагаю искать оферы от 200к. Если у тебя сейчас меньше, и опыта всего пару лет, то есть смысл разослать резюме.
>>2262095 >Не понял что ты ответил Я про то, что выделяя память, после освобождения сборщиком она не возвращается сразу операционке, а остается во владении некоторое время. Про внутренний подсчет ссылок и то, что цикличесике ссылки подсчет ссылок не умеет удалять, а только сборщик - знал, но что-то не подумал про это.
У меня 3 года на перле и 3 года на питоне. Зп 180, пока не в поиске.
>>2262103 На апворке с красивым профилем скорее всего да. Можно попробовать окологалерные биржи типа топтала. Сам не эксперт. Никогда так не работал
>Я про то, что выделяя память, после освобождения сборщиком она не возвращается сразу операционке, а остается во владении некоторое время. А понял. Тогда стоит уточнить когда это преимущество или недостаток. Сам с ходу могу только придумать, что oomkiller может убить контейнер если пересоздавать большой объект. Старый после удаления не освободил до конца память, новый пытается занять столько же, программа упёрлась в лимиты контейнера и контейнер крашнулся. Не самый частый юзкейс, но как особенность знать полезно. >Про внутренний подсчет ссылок и то, что цикличесике ссылки подсчет ссылок не умеет удалять, а только сборщик - знал, но что-то не подумал про это. Это кажется более полезным знанием. Оно всё таки к утечкам приводит. Лучше сразу всё по пунктам выкладывай, а потом про каждый подробнее если время интервью позволяет.
>У меня 3 года на перле и 3 года на питоне. Зп 180, пока не в поиске. Ты похоже сам знаешь как дальше развиваться. Но если потренишься и повезёт, то на 40-50к апнуть зепку реально.
Вообще настройки для проекта обычно хранят в отдельном файле (каком-нибудь .env), но почему бы не храниться настройки в отдельной таблице БД? Так по идее даже удобнее - можно менять настройки не останавливания приложение, просто нужен какой-то механизм который будет их обновлять при записях в базу. Как такое сделать?
Подскажите по фласку. У меня есть модели Users, Perms и UsersPerms. Юзер понятно, Perm - список доступов в разделы, UserPerm - здесь связи отображаются. Связь такая User <->UserPerm <-> Perm Поле в юзере такое user_perm = db.relationship('UsersPerms, backref='user') Т.е. юзер может в несколько разделов иметь доступ Как реализовать с помощью FlaskPrincipal, чтоб авторизация была по user_perm?
Знатоки фласка, подскажите, пожалуйста. Есть проект со структурой: Project1 |_run.py |_main.py |_static |_template
В main.py указано flask(__name__, static_folder = /root/folder1/Project1/static, template_folder=/root/folder1/Project1/template). В index.html из template ссылки на static даны в виде: <script src="{{ url_for('static', filename='jquery.min.js') }}"></script>
Но статика при загрузке приложения не подгружается почему-то. В чем может быть проблема?
>>2262520 Да ничем, напридумывают себе модульность какую-то, переиспользование кода, это делить его на функции, классы, хуйню, малафью. Просто заебенить цельный скрипт на 6к строк, где падает - заткнуть try-exceptами, да с elif-ами четверной вложенности, чтоб обои от стен отклеивались, ух бля.
пытаюсь записать звук через pyAudio, ошибка [Errno -9999] Unanticipated host error ОС: Windows 10, доступ к микрофону разрешён, но в списке приложение питона нет
>>2248924 (OP) Есть тут кто хорошо шарит в Celery? После падения одной из задач в группе, мы завершаем ( .revoke(terminate=True) ) остальные таски, чтобы они не жрали лишние ресурсы хоста, однако некоторые из этих тасков завершать принудительно нельзя (даже если они зафейлились они все равно должны отработать до конца и записать в базу определенный результат). Как нам это все осуществить? Массово завершить задачи не проблема через обработчик ошибок, но как нам защитить определенные таски от revok-а?
Начал фласк ковырять, там какие то uSWGI, точки сборки и всякая такая жесть. Где можно почитать что это такое? Потому как я читаю отдельные доки и оно вообще в кучу не собираеться и нет понятия как это работает.
>>2263477 делоешь папочку на проект вне этой папочки уровнем выше должен быть файл типа для создания объекта фласк (run.py, server.py или как хочешь назови) и импорта всего с этой папочки его и запускаешь без задней мысли (python server.py) или с задней мыслью со всякими там uwsgi, gunicorn и что там только нет, но это обычно для продакшна уже
Почему в питоне нет let стейтмента как в лиспе? Что-то похожее в пропосолах с 2010ого года лежит. Но это фигня мне каждый день нужна. Вот например вчера. Есть класс. В нём проперти. Функция с декоратором проперти, которая каждый раз лезет к базе с спрашивает от туда значение. И пишу код, который должен только 1 раз это знаечение получить, а не при каждом обращении к проперти лесть в базу. Делал так
x = self.x y = self.f(x) if x else None result = self.g(x, y) x_new = self.x if x_new: ____raise XXX return result
И вот каждый раз приходится засорять область видимости новыми локальными переменами. Сделал я это проперти контекст менеджером и смог писать так
with self.x as x: ____y = x if x else self.f(x) ____result = self.g(x, y) with self.x as x: ____if x: ________raise XXX return result
Стало получше. Но теперь я не могу пользоваться этим проперти за пределом контекста и пришлось писать отдельный метод, который просто лукап делает with self.x as x: ____return x
Получилось костыльно. А ведь хочется просто чтобы был оператор let, который как with as работал, но не с контекст менеджерами. Чтобы можно было 1 раз вызвать функцию, а потом с результатом работать не засоряя область видимости ненужными локальными переменными. Разве я много прошу?
>>2263807 Во первых лру кэш на проперти это константа т.к. он не принимает аргументов. А во вторых. Не подходит он там. Значение может меняться и я должен явно указывать когда ожиданию изменения значения.
>>2263820 Я кстати в этом коде пытался тот эксепшен из лямбды бросать передавая его как аргумент в функции клинапа в одну из функций и вызывать внутри эту лямбду по кондишену. Как же тяжело без сахара. Неужели так сложно его принять?
Запускаю python manage.py migrate в Джанго-проекте, он мне начинает серить ошибками на настройки - в settings.py настройки подтягиваются из .env-файла, но блять почему-то при команде migrate этого не происходит, какого хуя?
Как на джанге решаются подобные ситуации: идёт специальный реквест, на сервере должен запуститься длительный внешний процесс, скажем, обработка шебм в ffmpegе. Так вот, что нужно, чтобы моё джанго-приложение знало когда этот процесс завершится, а ещё лучше, чтоб могло видеть прогресс выполнения?
Я думал над таким вариантом: сделать асинхронный метод в приложении и каждые 5 сек смотреть прогресс из редиса, куда с другой стороны будет записывать этот прогресс другой сервис. Есть ли что-то лучше? Слышал про селери, оно тут подойдёт?
>>2264111 Да. Селари то что надо. Пост запрос должен возвращать код 202 и айди ревеста, джанго запускает селари таску и запоминает в базе соотвествие айди реквеста и таски. Потом клиент сам должен опрашивать эндпоинт с гет запросом и айди реквеста. На него повесь секундный тротлинг с возвратом 404 и проверку завершения селари таски. Когда завершиться возвращай 200 и результат. Асинхроность тут не нужна если у тебя всё остальное синхронное
>>2264111 celery Мы с Сбере им обмазались. Ощущения - атас. Малолетние дебилы конечно же будут писать про async, но детям невдомек, что существует ясная разница между IO и CPU
>>2264127 Это недостаточно. Без коментов авторов не понять где они ловят проблему, как дэбажат, на какие трейдовы пошли. Я ишьсы и ченджлоги пытался читать на офф гите, но они там устаревают быстро, малоинформативны и не структурированы
>>2255918 Работаю за 200к. До этого 1г питона был и хуева туча лет прогерства скриптования на всяком говне еще со средней школы. Так что думаю довольно легко вкатиться, раз берут такое говно как я.
Есть вопрос с celery и yandex queue. При отправке задачи через delay() он выполняет таск, а иногда не выполняет. При этом на сервере самого брокера никаких ошибок нет. Судя по логам он вообще не вызывает обработчик. Иногда вызывает, а иногда нет. На одних и тех же запросах.
>>2248924 (OP) Может ли мне кто-нибудь помочь с изучением вопроса и как правильно задать вопрос гуглу? Стоит задача: есть два файла, один-пустой белый квадрат в формате .bmp, другой-rar архив. Нужно: заменить байты .bmp, начиная с 55 (0x36) на байты .rar архива полностью.
@app.route("/") def hello(): return "<h1 style='color:blue'>Nginx can you hear me?</h1>"
if __name__ == "__main__": app.run(host='0.0.0.0') Изменил текст который должна выводить функция hello() и ngixn выводит только старое сообщение. Я не могу понять, flask нужно какой то командой запускать?
>>2265200 У тебя uwsgi сервит его, это уже готовый сетап. Можешь перезапустить через systemctl restart. Для разработки достаточно запускать через python myproject.py и перезапускать при изменениях.
>>2265239 Это получается если делаешь изменения, то прийдеться службу перезапускать? Не сильно удобно. Я понял если пишешь, запускаешь на девелоперском сервере и все.
>>2265317 И да, стартует он командой прямо в докерфайле, сервится через nginx. Без докер-композ или чего-то такого. Просто думаю может самому разобраться пока наша команда херню не сотворила
>>2265322 Либо как сервис и обмазываешься ансибал ставля всё без докера прямо на вм. Или делай образы и рядом через композ. Но композ херня для этого. Системд лучше докеровского демона умеет фейлы хендлить и настраивается гибче. Вместо композа можно докерсвормом обмазаться, но это извращение. Есть ещё экзотика типа ансибал для докера. У нас это колла-ансибал. Там и имэджи и плэйбуки одинаково джинджей кастомизируются и всё вместе легко через пайплайн билдитися и деплоится. Но для вашего случая это возможно оверкил.
>>2265326 Кстати у докера перфоманси сети падает если не хостовой неймспейс использовать. Поэтому если всётаки хочешь докер, то придётся без сетевого неймспейса делать и всякие костыли из-за этого городить. Ещё если лень с ансиблам разьираться, то ожно вручную на имедже всё настроить в запущенрй вмке, снять снапшот и использовать его как диплой имэдж продккта каждыф раз толтко один конфиг подбрасывая. Но это цде вариант не для пайплайна. Решение для бедных
Пишу небольшое по на питоне как одну из подзадач конкурсного проекта в данном этапе. Раньше никогда на лицензии используемых библиотек внимание не обращал, но сейчас возникла неуверенность в возможности использования некоторых либ. В частности, многие библиотеки подразумевают, например, что твой продукт использующий эти библиотеки будет иметь ту же лицензию, что и сама библиотека или что он тоже будет открытым. Очевидно, что мое по будет закрытым. Заказчик - одна из крупнейших компаний в рф. Могут ли они доебаться за лицензии библиотек? рак мозга, не умею формулировать вопросы
>>2264612 В общем, там с fifo очередью какая-то ебанина происходит. Чем меньше таймаут видимости, тем быстрее выполняются задачи. При этом таск куда-то пропадает нахуй отовсюду, но он как бы есть, да. Таск выполнился? Жди пока таймаут полностью пройдёт и только потом вытаскивай следующий. А может и не жди. Ебанина кака-то. Либо я тупой, либо лыжи не едут.
Нуфаг итт. При выводе текста типа ('Тест', var1,'.') То получается, что в выводе имеется пробел (который мне не нужен) между строкой и переменной и выглядит это 'Текст 5 .', а не "Тест5.". А при использовании знака "плюс" вместо запятой выдает ошибку.
Как это фиксить? Указывать тип переменной строку, чтоб она не считалась числом по дефолду, чтоб нормально работал вывод с плюсом?
>>2265381 То, как ты формулируешь задачу - долбоебизм костыли, чтобы заставить функцию принт работать так, как она не должна работать. То, что ты на самом деле хочешь сделать, называется форматирование строки. Дальше в гугл.
Нашел решение, можно через {0} .format() делать, тогда вся моя пунктуация сохранится такой, какой я ее в строке указал и переменные подставятся, какие я укажу в функции.
Сап, аноны. Не могу реализовать функции hit_time и hit_distance, разное перепробовал, проверки не проходят. Может кто-то помочь советом? Не отправлять на какие-то ресурсы учиться, а пояснить, где я ошибся
В асинкопитоне есть приоритизация задач эвент лупа из коробки? Или хотя бы либа, которая упрощает это. Есть группа тасок одна из которых должна выполняться только когда остальные ждут/завершены. Пока сделал костыль через PriorityQueue, но он мне не нравится.
>>2266239 Для чего спрашиваю. На сервер призодит куча сообщений от различных прльзователей. Эти сообщения отправляются через post на другой ресурс. Допустим, первое сообщение создаёт запись на другом ресурсе, последующие - добавляют данные к нему. Если первое сообщение пришло одновременно со вторым, то обрабатываются они одновременно, соответственно, создаются две записи, чего быть не должно. Потому возникла необходимость создания очередей, для их последовательной обработки. С другой стороны, это сильно уменьшит пропускную способность сервера.
Как быть в таком случае? У кого-нибудь был опыт решения подобных задач? Неуж-то никак нельзя обойтись без снижения производительности?
>>2266255 И ещё, насколько будет хорошей идеей использовать в качестве брокера собственную бд? Везде пишут что это не очень, при большом количестве запросов бд будет перегружена и тд. Но тем не менее.
Есть класс А, и класс Б. Ещё есть класс С(А,Б). Как сделать так чтоб при создании С, создавались и экземпляры А и Б? Например, А создаётся через функцию get_a(). Чтоб в методах класса С можно было обращаться к данным А через self.
Сап, студент на связи, поясните дебилу, пожалуйста, насколько сложно/легко сделать хрень ( нейросетью стыдно называть), которая будет определять пол лица по чёткой фотографии? Что вообще можно сделать интересного на Питоне к курсовой?
>>2266720 Читай картинку по частям, по 1024 байт, например. В бд сделай array и appendай туда всё. Можешь пробовать сделать через conqurence, чтоб быстрей. Собрать примерно так же, по частям.
Я переписал пост, так как из-за обилия звездочек и жирного шрифта текст утратил смысл.
Доброго времени. Нуфаг итт в треде. На счет параметров функций вопрос у меня.
Правильно ли я понимаю, что в параметр-кортеж звездочки не ставлю, иначе текст станет жирным и хер поймешь, что сказать хотел падают одиночные значения после объявленных переменных (если есть), а уже в параметр-словарь падают данные вида ключ:значение?
И получается, что сперва выводятся объявленные переменные (то есть, a=10) и ей подобные, затем кортеж, включая строки, а не только числа, а уже потом словарь, с данными в виде ключ:значение?
И если нарушить порядок, то это работать не станет, даже если сперва пойдет параметр, а за ним уже параметр и аргументы при вызове функции?
И получается, что параметр-кортеж это всегда кортеж, который похож на массив, но без возможности добавить в него новое значение, после ввода данных? А параметр-словарь это всегда слоаврь, где данные записаны в виде ключ:содержимое?