Вы видите копию треда, сохраненную 30 июля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2234309 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
Ох, там огромный пайплайн из селери-тасков, на одном из этапов мы запускаем параллельно несколько тасков и передаем их айдишники в следующий таск, какой-то из них может упасть но по итогу ошибка будет обрабатываться только после того как все они выполнятся, а надо бы завершать их как только 1 упадет, чтоб ресурсы не жрать и пользователя меньше ждать заставлять
Абамка-абизьянка тред.
Вот примерно такое говно у меня получилось. Вроде работает, но лишь QA покажет насколько это норм
Нужно придерживаться 78-80, потому что человеческий глаз не воспринимает строки длиннее стольки символов
40 лет эволюции! Как еще дополнительных глаз не наросло у наследственных ойтишнеков.
Веселуха начнется когда будешь оркестрировать кучу разных контейнеров, ебаться с репликами баз, нодами и нагрузкой
Кабаныч скажет, значит будешь
Посоны, я научился итерироваться по строчке!
@
Веселуха начнется, когда будешь делать 9000кк рпс и отдавать петабайты статики.
Патамушта
Ты на что рассчитываешь, когда кидаешь скрин с неправильным результатом? Что у всех в треде твои исходники имеются что ли?
Я работаю над крайне засекреченным приложением. Сурс код кидать нежелательно
Вручную сделать декоратор? Как-то топорно получается. Неужели нет простого способа это сделать. Зачем это надо? Ко мне идут запросы с других апи, не с пользователей, а апи. Для них авторизацию крутить что-ли, это же ебанизм.
В доке всё написано
Поддержка асинхронности или типа того.
В питоне асинхронность реализована просто уебищно, практически скопировав это дерьмо с js. Пихают, естественно, везде где только можно, в синхронном языке блядь. Все эти awat async и прочие блевотные названия из js. Concurens использовать гораздо приятнее.
Не бывает синхронных и асинхронных языков.
https://en.wikipedia.org/wiki/Async/await#History
Первым придумал микрософт, а потом все у него спиздили, ололо.
>практически скопировав это дерьмо с js.
Который давно является lingua franca в плане асинка. Забавно
>Все эти awat async и прочие блевотные названия из js.
Чел...
>Concurens
Чел))
Ну а ты думал? Питон молодой ведь язык, не успели нормальных иде изобрести еще.
https://ideone.com/V0T0lV
Класс для получения рандомных значений из больших файлов. Что хуево сделано, кроме того, что велосипед?
Алсо, как тут правильно организовать файловые эксепшены?
Жди сабинтрепретаторов
Pyright
А зачем вообще делать какой-то отдельный велосипед с чтением строк, если можно readlines()?
Ну и можно будет заюзать with open('file.txt', 'r') as fp:
и избавиться от бессмысленного деструктора
И зачем разделять bigfile и не bigfile?
Pycharm - Help - Contact Support/Submit a Bug Report/Submit Feedback
Чтобы не читать файл в 500мб полностью, очевидно же.
А маленький можно и читать, чтобы не дрочить i/o.
Ну чел, всё равно у тебя в конструкторе читается сразу весь файл. yieldов или чего-то такого не видно
Читается и строится массив оффсетов, потом по запросу читается по рандомному оффсету.
Суть в эффективном использовании памяти. Предложи лучше.
В код не вникай, сразу отвечай
Ебани реализацию __enter__ и __exit__, в которых ты открываешь и закрываешь файл. А в коде юзай класс как контекстный менеджер. Тогда и файловые эксепшены обработаешь
Схуяли это?
Выносишь свои строчки до open в enter, из del в exit. Остальное оставляешь там же.
Потому что файл открыт и по нему идет чтение в процессе работы.
Открывать и закрывать каждый раз ради того, чтобы завернуть в контектст менеджер это хуевая идея, по-моему.
Тебе чо мешает внутри менеджера все свои дела сделать, чтобы по итогу файл нормально закрылся?
Циклы и if-ы там не запрещены
Ну вникни уже в код, блять. Ты уже второй начинаешь бессмысленно спорить, не разобравшись.
with YobaRandom('list.txt') as yoba:
___huinya1 = yoba.choice()
___huinya2 = yoba.choice()
Ты какой-то дурачёк, видимо. По тому коду, что ты прикрепил, нихуя не мешает использовать контекстный менеджер. Если ты там ракету в космос запускаешь, то тащи подробный код
Потому что я его инициализирую на старте и потом буду использовать.
Нет смысла заворачивать ВЕСЬ КОД в контекстный менеджер только чтобы использовать контекстный менеджер, это хуйня.
Не стоит аж так серьезно воспринимать его необходимость. Да, это удобно, когда тебе надо пару строчек завернуть в какую-то операцию, но не более.
>я его инициализирую на старте и потом буду использовать.
>Ну вникни уже в код, блять.
Вник, да, по тому ошмётку кода в то, как ты его использовать собрался
>Не стоит аж так серьезно воспринимать его необходимость
>как тут правильно организовать файловые эксепшены?
Ну и нахуя тебе тогда вообще об этом заботиться? Можешь вообще файл не закрывать например
Легко сказать бля
ОТКУДА его достать-то? Где он нахуй ставится я вообще не ебу. у меня только АПИшка свагера, фронтенда с формочками у меня под рукой нет
Потому что есть целесообразность и уместность.
Но некоторые почему-то впадают в крайности. Одни заворачивают каждый отдельный доступ к файлу или запрос в базу в менеджеры, другие заворачивают вообще всё в менеджеры и сидят там.
Это суть небольшое удобство для некоторых ситуаций, не стоит возводить его в правило.
В питоне нет деструкторов, это не C++, __del__ про другое и закрывать там файл неправильно.
Ты по смыслу хочешь модель с деструкторами, но именно для этого в питоне как раз и нужны контекстные менеджеры.
Возможно тебе нужен контекстный менеджер для каждого YobaRandom, возможно тебе нужен контекстный менеджер для управления кучей YobaRandom. Если ты работаешь одновременно с кучей файлов, например.
ХОтя есть вариант изобрести свой собственный велосипедный контекстный менеджер, имитирующий настоящий. Чем ты и хочешь заняться.
Надо пользоваться venv и всё будет как у здоровых людей.
Если ты работаешь через ssh, то плагины надо перекидывать на сервер в соотвествующей вкладке. Тогда и будет работать
У меня есть интеграция с несколькими сторонними сервисами, каждому я прописал по 10-15 различных запросов.
Есть идеи или примеры как их сделать красивее и универсальнее? С учётом sessions и тд. Чтоб где-нибудь можно было прописать urls-ы, headers, payloads и тд. И где их лучше прописывать? Прямо в коде или где-то отдельным файлом?
Используются токены авторизации, которые хранятся в базе как есть, хто тоже правильно или лучше закодировать?
Куча примеров как сделать апи, но почти нет как адекватно организовывать запросы к этим апи, когда их много. Как это называется? Я просто недавно в вебе
Ну блядь изи же
Пишешь базовый класс, в котором подготавливаешь урл/заголовки/авторизацию/логирование/парсеры ответа/запрос и базовую обработку ошибок.
Наследуешься и привязываешь нужные параметры.
Статичные вещи, типа урлов - храни в конфиге. Авторизацию - в секретах или переменных окружения. Остальное можешь хоть в классе забить. Токены в бд, если они периодически меняются - норм. Если нет, стоит в секреты вынести
Просто это довольно тривиальные вещи, подумал, может есть какая-нибудь готовая либа под это дело, а я тут велосипеды делаю
От request.Request наследуйся. Определи свой таймаут, хоста, заголовки и т.д
Сделай свой клиент, отнаследовавшись от requests.Session. Определи свой query, обработку, подготовку запроса.
Потом просто Лепишь потомков от своего request.Request и оставляешь один клиент для сессии и все.
Делаешь request = MyRequest(...); result = MyClientSession().query(request)
Может что есть проще или умнее. Я примерно подобное делал. Расширять дочерние классы довольно легко
Почему надо? У нас 120 символов и это норм. 78 для дебилов.
Даже если код станет нечитаемым от переноса строк?
Да, наверное, так и буду делать.
Хочу чтоб потом было легко это менять всё. Одни сервисы просят токены, другие хеш-сумму запроса, третьи нестандартный oauth и прочие.
Пишешь одно, потом натыкаешься на ещё одного нестандартного и переписываешь всё заново.
Посмотрел уроков на ютубе методы, аргументы, функии, циклы хуе мое
А дальше что делать ? книжки читать?
Какую?
я не задушусь и заброшу ? Есть что то с задачками для нубов ?
Из охранников меня уволили на следующий день. Заболел в тот день, температура была 39, под камерами уснул.
Я хуею, пацаны
Работаю с одним проектом, там в celery-таске происходит ошибка, решил подебажить ее и спустя десяток минут таки осознал, что я и celery воркер работаем с разными файлами! Я сука вообще удалил нахуй все тело проблемной функции, а это мудло по-прежнему мне высирает ошибку с тем же трейсбеком на той же строчке (которой вообще уже нет блять). Это че за хуйня? КАК это блять может происходить? Проблема именно с celery-таском, когда ставлю логирование в верх модуля то при обычном импортировании оно конечно же срабатывает
Запускаю все в докерк-композе если вдруг это как-то меняет дело
А на днях, я линять начал. Старая шерсть с меня сыплется, хоть в дом не заходи.. Зато новая растет - чистая -шелковистая.
Если код таски не подключен к контейнеру как часть volume, а собран как часть образа, то нужно пересобрать докер образ.
Да, чтобы закешировалось и не менялось
Если не нравится эта сорт оф базовая фича докера, пользуйся уже упомянутой фичей волюмсов. Хз зачем вы вообще интерпретируемый код прибиваете гвоздями к образу.
> Хз зачем вы вообще интерпретируемый код прибиваете гвоздями к образу.
Очевидно, для воспроизводимости образов
Не обязательно пересоибрать. Можно внутри контейнера поправить файлы и рестартнуться. Если авторемув флаг при запуске не стоит, то заработает. А учитывая, что сам через компз запускаешь, то даже если стоит, то можно легко удалить. В таком случае даже по ссш из иде можно внутрь контейнера подключиться и редачить файлы прямо там из редактора
Питонисты, всем привет! С наступающим!
Нужна помощь, советом.
У нас с друзьями есть ламповый чятик в телеге
Появилась идея, используя питон, распарсить его и подсчитать статистику (количество сообщений, среднюю длину, все дела)
В телеге есть кнопка "выгрузить в html формате". В принципе, эти html можно парсить
Но писать что-то самому как-то лениво, и выглядит сложно, могу и не успеть
Мб кто слышал про какой-то более легкий способ / готовое решение
Ну или как тогда сделать? резать по определенным тегам и потом обрабатывать каждое сообщение?
Если уж выгружаешь в хтмл, то максимально простой и ленивый способ - без парсинга прямо в консоли браузера выполнить однострочник на жиэс, который посчитает хоть небо, хоть Аллаха. Будет что-то вроде
document.querySelectorAll(message selector).length // количество
[...document.querySelectorAll(message selector)].map(el => el.textContent.length).reduce((a, b, _, all) => a + b / all.length) // средняя длина
и т.д.
А если надо именно на змее практиковаться, то лучше тогда апи телеги дергай.
1.поставь десктопную телегу
2. сделай это
import pandas as pd
chatseries=pd.read_json('exported_chat.json')
chat = chatseries.messages.apply(pd.Series)
chat.to_csv('output-chat.csv')
3. Это все.
зачем ебаться с питоном для преобразования в эксель формат, когда сам эксель умеет читать жсоны?
Зачем тогда вообще экспортировать в его формат? len(messages) в 2к22 уже не модно?
потом в другой программе (тоже на питоне) загрузишь и проведешь анализ.
ты вообще здесь откуда? загугли "pandas jupyter notebook"
project1->project1, project2->project1 vs project1->venv, project2->venv
Конечно стоит. Вернешься ты к нему и по названию вспомнишь какой говнокод ты писал полгода назад
Для полноценной работы pycharm разве нужен уже установленный питон?
Разве он не качает каждый отдельный питон в своё виртуальное окружение?
Нужен ли предустановленный питон? Вопрос в этом.
Конда сама всё делает - ты ее поставил у теюя у же есть питон, потом спокойно можешь создать ещё окружение с нужной тебе версией и библиотеками.
Но мешать кондапроекты с venv'ом не очень хочется.
Так что вопрос ещё в силе.
>А это окружение как ты создашь? Из нихуя родишь?
Ну, теоретически, пайчарм может скачать указанную версия для интерпретатора, установить её, и потом уже используя это, сделать виртуальное окружение.
Окей.
Есть чистый пайчарм.
1) Я ставлю нужную версию питона или использует python.exe конды.
2) Создаю проект с этой версией.
3) Работаю.
Правильно?
Если мне нужен будет проект с другой версией питона, мне его надо ли самостоятельно ставить? Или используя базовый интерпретатор пайчарм сам всё сделает?
Мне стало интересно что делает твой проект ПИЗДЕР
>Или питон попытается метод вызвать с таким же именем
У тебя не может метод иметь то же имя, что и какой-то атрибут. Одно перезапишет другое.
Что-то я запутался малость
Есть задача - отсортировать словарь по возрастанию значений
Сделал, как описано тут
https://coderoad.ru/39635256/Сортировка-словаря-как-по-убыванию-так-и-по-возрастанию-в-Python
Если коротко, то получилось, но получился лист с парами словаря
Что-то вроде [('D', 0), ('F', 0), ('A', 1), ('B', 1), ('C', 1), ('E', 2)]
А мне-то нужен словарь
Есть какой-то безболезненный способ трансформации этого листа в словарь? (ну, убрать квадратные скобочки
А без конды как? Никак? Ахуеваю с долбаебов
Словарь не имеет порядка. Если ты запихнёшь свой список пар назад в словарь, то весь порядок потеряется опять. Можешь в сторону OrderedDict глянуть, если тебе прям обязательно словарь (доступ по ключам) нужен.
Дед, тебя даже вчерашний шторм не разбудил.
Словари упорядочены начиная с 3.6 де юре, де факто ее раньше
Брат, ты на три года от жизни отстал
Есть старый код, который выглядит как:
def ms(ur):
t = urllib.request.urlopen(url)
s = BeautifulSoup(thepage, "html.parser")
return s
Вопросы:
1. Можно ли это переписать через асинхронность?
2. Стоит ли это переписывать через асинхронность?
3. urlib и BeautifulSoup при переписывании еще понадобятся? Или надо смотреть в сторону aiohttp?
Ты можешь реквесты писать асинхронно, а суп нет, так как это парсер. Да и имеет смысм переписать только если ты хочешь пачку страниц сразу получить, а потом уже их обработать.
В общем слышал от некоторых программистов что в python и js можно и нужно вкатываться через фреймворки сразу. Знаю основы программирования на C#, ООП понимаю, есть ли смысл вкатываться сразу в джанго, не изучая чистый python?
Тогда выходит можно вообще вызвать аттрибут как метод если в нем функция хранится? Утиная оптимизация и тут работает?
from configparser import ConfigParser
Потрать один день на синтаксис и подводные камни, дальше делай, что хочешь. Почти в любом языке так.
>если ты хочешь пачку страниц сразу получить, а потом уже их обработать.
Хочется получать ссылки со страниц и сохранять их.
Стоит ли для начала формировать список ссылок, а потом их сохранять? Или делать это на лету сразу после получения?
Я олд
Папка в треде
Что такое сtr+C хоть знаешь? Штудируй вот это:
http://citforum.ru/programming/unix/signals/
https://docs.python.org/3/library/signal.html
https://www.geeksforgeeks.org/python-daemon-threads/
Как пройдешься, Папку поблагодарить не забудь
Ты ж в курсе что твое говно на пикриле не работает? (почти сразу же завершается). Нахер тебе это все в тредах запускать?
Уверен? У меня все заебись работает
Не работает. Отрабатывает без ошибок, но файлы не сохраняются.
https://ideone.com/ZyEAXm
Допустим, у меня есть файл app.py, в котором у меня 40 функкций, возвращающих от одной до четырех переменных.
Все это я импортирую в другой файл, например main.py, в котором тоже есть дофига функций, аргументами которых служат ретурны импортированных функций. В каждой функции может быть по 5-8 таких аргументов, поэтому меня получается примерно такая структура:
from app import *
def main_func1(return1, return10, return20, return21, return7, return13, return3)
,,,,,,,,
def main_func2(return21, return11, return9, return16, return19, return2, return8, return24)
........
return1, return2, return3, return4 = app_func1()
return5, return6, return7, return8 = app_func2()
return9, return10, return11, return12 = app_func3()
return13, return14, return15, return16 = app_func4()
return17, return18, return19, return20 = app_func5()
return21, return22, return23, return24 = app_func6()
f1(return1, return10, return20, return21, return7, return13, return3)
f2(return21, return11, return9, return16, return19, return2, return8, return24)
Как это можно переформатировать, чтобы глаза не кровоточили? PEP 8 охуевает от происходящего в файле.
>main_func1(return1, return10, return20, return21, return7, return13, return3)
>main_func2(return21, return11, return9, return16, return19, return2, return8, return24)
Не делать функции, принимающие десяток аргументов и возвращающих тупл длиной с <insert cuckold joke here>. Скорее всего данные, которыми ты оперируешь, что-то объединяет, и это что-то можно описать классом, или, на худой конец, словарем.
Принимать параметры через args, внутри функции слайсить нужные наборы в отдельные кортежи и потом эти коржеты перевадать как аргументы опять же через args.
Либо передавать всё через kwargs, но тогда надо делать маппинг, где ключом будет строкое имя функции, а значение сама функция.
бамп вопросу
Предлагаешь твою хуйню в мозгу моделировать? Ее даже воспроизвести не получится.
Ставишь брейкпоинты, запускаешь в дебаге, находишь ошибку, чинишь, писоешь, какоешь.
Алсо, проиграл с поиска изображений по цсс a[href] img, чтобы потом достать родительский a
Сразу искать ссылки, не? Зачем этот бессмысленный поиск изображения, если ты его не используешь никак, кроме как вручную достаешь ссылку из родителя?
У меня есть файл с ссылками на нужные страницы (with open('C:\Test.txt', 'r') as file:). На каждой странице разное число нужных мне файлов, картинок, и прочих pdf-ок. Мне нужно их сохранить на диск.
Те примеры, которые есть, они подразумевают, что у нас просто есть список ссылок, который превращается в таски, которые потом гонятся.
Но у меня тут 2 цикла - один для прогона по страницам, второй по прогонам по файлам каждой из страницы. И несколько не понятно как это должно выглядеть. Как вложенная асинхронность?
что ты имеешь в виду под вложенной асинхронностью?
асинхронность имеет смысл натягивать только на io операции - сеть, или сохранение на диск, исходи из этого, циклы тут не при чем
Добавляешь таски на скрейпинг страниц, они добавляют таски на загрузку-сохранение картинок в ту же очередь. Руками распределять таски по 3 как в примере не надо, просто задаешь размер пула воркеров при создании ивентлупа. Посмотри на классы asyncio.Queue и функцию asyncio.create_task
Далее, проблему с несохранением это все вряд ли исправит, так что просто поставь брейкпоинт и не еби себе мозг.
Алсо, если ты это для сохранения картинок с двачей делаешь, что у него есть api, что значительно удобнее и быстрее.
>что ты имеешь в виду под вложенной асинхронностью?
Что мне надо асинхронно получать доступ к нужным страницам. В свою очередь каждая страница асинхронно скачивает файлы.
Или я здесь ошибаюсь?
>Добавляешь таски на скрейпинг страниц,
У меня сделано так. Но меня терзают сомнения, что что-то не то.
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
Хорошо.
>так что просто поставь брейкпоинт и не еби себе мозг.
Дебажить можно долго. А если что-то упускаешь, так и вообще вечно. Когда есть у кого можно проконсультироваться, всё идёт быстрее.
> с двачей делаешь
Не с двачей.
Мысли не страницами и файлами, а тасками. Таска на скрейп страницы добавляет таски на скачивание файлов. В ту же очередь.
Если все сделаешь правильно, необходимость создавать ивентлуп внутри такжой таски отпадет, будет один ивентлуп на все таски.
Линуксовопрос. Я что-то не понимаю. Почему у GdkX11.X11Window есть set_title, но нет get_title?
И как быть?
Вот я делаю:
from gi.repository import Gdk
root=Gdk.get_default_root_window()
А дальше поменять заголовок окна я могу. А вот узнать его из питона не могу. Хм...
А как избавиться от этого?
return1, return2, return3, return4 = app_func1()
return5, return6, return7, return8 = app_func2()
return9, return10, return11, return12 = app_func3()
return13, return14, return15, return16 = app_func4()
return17, return18, return19, return20 = app_func5()
return21, return22, return23, return24 = app_func6()
Переделай app.py так, чтобы у тебя там не было ни одной функции, возвращающей сразу кучу переменных.
В main.py не передавай никаких результатов, передавай только список функций из app.py, например. Если непременно надо передать список аргументов, то и передавай список (или словарь, или объект какой-нибудь специального класса), а не кучу переменных.
Вместо return1, return10 и тому подобного используй нормальные имена переменных.
А вообще создаётся впечатление, что ты хочешь странного. Если бы объяснил, зачем - было бы можно что-то советовать, а так хз.
Очевидно, в app_func1, ... , app_func6 нужно возвращать не return a, b, c, d
А нужно return [a, b, c, d], либо {'a': a, 'b': b, 'c': c, 'd': d}
У меня упрощенный пример, в самой программе переменные называются не return1-10, у них нормальные названия.
Суть программы в следующем:
У меня есть набор функций, которые обращаются к удаленной БД, запрашивают необходимые данные и форматируют их. В каждой функции несколько ретурнов, потому что один и тот же набор данных мне нужно форматировать по-разному - списком, строкой, жсоном и т.д., то есть у функции получаются ретурны в духе uniq_parentlog_dict, uniq_parentlog_str и т.д. Всего таких функций у меня порядка 40 - они запрашивают данные из разных таблиц БД и по-разному их форматируют, привести их к одному виду практически невозможно.
Далее, есть набор функций, которые принимают вот эти ретурны в качестве аргументов. Таких функций порядка 20 и работают они просто - открывают текстовый файл-заготовку, считывают оттуда все содержимое, а затем заменяют в этом содержимом плейсхолдеры на отформатированные данные из аргументов:
def set_entity_names(unit_names, coin_names, refillable_names, gear_names):
____with open("app/templates/entityNames.txt", "r", encoding='utf-8') as file:
________data = file.read()
____imported_data = data.replace("template_unit", unit_names)
____imported_data2 = imported_data.replace("placeholder_coin", coin_names)
____imported_data3 = imported_data2.replace("placeholder_refillable_name", refillable_names)
____imported_data4 = imported_data3.replace("placeholder_gear_name", gear_names)
____f = open("output/enitityNames.txt", "w+", encoding='utf-8')
____f.write(imported_data4)
____f.close()
Это простой пример с 4 аргументами, есть функция с 12 аргументами.
Ну и почему твои "ретурны" не могут передаваться в виде словаря с плейсхолдером в качестве ключа, например?
А что если плейсхолдера нет? Такое может быть? Тогда что? Отформатированные данные просто будут выкинуты?
А как на счёт того, чтобы не производить все возможные варианты форматирования раньше, чем они понадобятся?
Встретился плейсхолдер - отформатировали данные, вставили. Встретился плейсхолдер ещё раз - взяли уже отформатированные данные из кэша или отформатировали ещё раз.
Не, плейсхолдеры всегда железно есть. Файлы в /app/templates статические, не изменяются.
>Ну и почему твои "ретурны" не могут передаваться в виде словаря с плейсхолдером в качестве ключа, например?
Вот это вот я не совсем понял, можешь объяснить? Как это будет выглядеть?
Блин, я нифига не понимаю, использую Wnck - глючит шопездец (всё окно приложения начинает мигать).
Пытаюсь использовать xlib - там хз вообще что такое и как это использовать. Непонятно, как создать инстанс дисплея или окна.
В Gdk нужных методов нет.
Ну неужели придётся xprops через пайп подключать?
И это хвалёный питон с кучей библиотек? Пайпы так-то можно и в баше использовать.
substitutes={}
substitutes['placeholder_coin']=coin_names
substitutes['placeholder_gear_name']=gear_names
...
def set_entity_names(substitutes):
____for key in substitutes:
________imported_data = imported_data.replace(key, substitutes[key])
Ну что-то типа того.
Хммм. То есть скармливать функции не аргументы как таковые, а сразу набор аргументов, завернутый в переменную?
Кстати, да.
Думает, что это часть форматирования строки https://pythontect.com/python-d-for-formatting-integer-inside-string/
Почему в Asp.net не вкатываешься если c# знаешь?
Ну подскажите, заебался я уже с этим питоноам.
Ну вот захожу в https://docs.gtk.org/gdk4/index.html , ввожу там в поиск get_default_root_window, а там просто нет такого. Класс окна? А хз, где его искать. Получить экран? А хз как. Получить дисплей? А хз. Никак.
Уже целый день бьюсь над элементарной задачей - получить заголовок сраного окна. И не понимаю, как её решать. Куча исходников, ни один не работает. Ну кроме пайпа на xprop, но это уж совсем уж пц какой-то будет. Неужели в питоне всё делается через такой вот геморрой? Это же пиздец. Я уж хз сколько времени на изучение этого языка потратил, а до сих пор банальные вещи сделать не могу.
На си та же фигня:
https://stackoverflow.com/questions/16258390/how-do-i-read-the-title-property-of-a-gdk-window
Но, блин, почему? Заголовки окон это что, какой-то секрет? Но ведь xprop выводит гораздо больше инфы без каких-либо дополнительных прав!
Бред какой-то.
Что, чем и когда лучше других?
прочитать из бд > положить на диск > прочитать с диска > записать в бд
Пробую делать через csv reader/writer, НО этот пидор вместо NULL, ставит просто пустое поле, им соответственно во втроую бд пишутся просто "", а не NULL, как заставить его писать NULL, без использования pandas?
Да, забыл добавить, можно конечно на уровне SELECT из бд сделать подстановка, но это какая-то уж совсем дрисня костыльная
>csv
Нахуя а главное зачем? Ты в Экселе эти файлы собираешься потом открывать? Сделай нормальный формат, типа паркета православного
Блять иди С дрочи, даунина. Как можно не знать таких элементарных вещей?
>не return a, b, c, d
>А нужно return [a, b, c, d],
Петушара, ты нахуя собрался возвращать лист вместо тюпла? Что тебе мешает сразу весь тюпл вернуть в одну переменную?
Вод для таких как ты, умные люди придумали ООП, чтобы не ебаться со 100500 функциями, их аргументами и ретернами. Скорее всего весь твой набор 40 функций можно запихнуть в 2-3 класса в виде методов, что существенно упростит работу и структурирует исходный код
скорость жи, в csv вжух и готово, без накладных расходов
Чтобы потом его распаковать, ебанашечка. Разницы в производительности что лист что кортеж тут нет никакой.
Его пишут на питоне, приколи?
Такая конструкция не пашет:
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)
s.post вместо requests.post тоже ничего не дает кста
Давно кортежи стали нераспаковываемыми?
А возвращать мутабельный список, когда можно вернуть иммутабельный кортеж - моветон.
Дык а я в чем отправил? cookies=r.cookies Куки взяты из get запроса и подставлены в post
Слышь, питух, хули ты на людей раскукарекался? Твоё место возле параши, не забыл ещё?
>>55344
Иногда лист работает быстрее кортежа, представь себе. Никакой принципиальной разницы тут нет. Вполне нормально вернуть dict или set вместо соответствующих frozenset/frozendict, и точно так же нет никакой трагедии в list вместо tuple.
А в чём отличие этого Starlite от Starlette?
Городить кукую-нибудь хуйню с try-except-finally на высоком уровне?
Минуточку, в прошлом посте же говорил, что
>Разницы в производительности что лист что кортеж тут нет никакой.
А теперь лист быстрее уже? Ну что ж, citation needed, как говорится, Неси бенчи, раз сам себе противоречишь.
И, если у тебя трудности с чтением - я спросил, давно ли туплы перестали распаковываться, потому что ты порекомендовал изменить тупл на лист с аргументом
>Чтобы потом его распаковать
По-моему, кто-то запизделся. Иди почитай что-нибудь из шапки, если не понимаешь как работет синтаксис распаковки и типы из стдлибы. Потому что пока что выглядишь как вкатун, пробежавший инфоцыганский курс и возомнивший себя д'Артаньяном.
Как вы обучаетесь, ваши советы?
У тебя хуёвая цель, ты учишь язык, ради того чтобы учить. Прекрати читать книжки и пиши код. Для начала ебани что-нибудь на фласке, например вывод прогноза погоды, если сразу сложно, разложи на части, сначала получи и запиши прогноз погоды в бд, потом выводи в веб.
НУЖНО ВЕРНУТЬ ТРИ ЧИСЛА
@
НА СЕРЬЁЗНЫХ ЩАХ ЗАТИРАЮТ ЧТО-ТО ПРОИЗВОДИТЕЛЬНОСТЬ
Вы там совсем ебанулись?
Кто мы-то, мне вообще пихуй, это у того шиза один пост опровержительней другого, вот пусть закапыват себя дальше, посмеемся. Никаких бенчей офк не будет, потому что он пиздобол
>Минуточку, в прошлом посте же говорил
Это не я (>>55096) отвечал, дебич.
>ты порекомендовал изменить тупл на лист с аргументом
Я не рекомендовал изменить тупл на лист, это ты придумал. Я предлагал возвращать список или словарь, ну можно и кортеж, мне похуй. Это уже ты доебался до листа вместо кортежа.
>По-моему, кто-то запизделся.
По-моему, тебе делать нехуй, как срать в треде и доёбываться до такой хуйни.
>Я не рекомендовал изменить тупл на лист
>Я предлагал возвращать список
>в изначальном коде возвращался тупл
Убедил, ты не шиз, ты в суперпозиции "предлагал, но не рекомендовал".
Удебил, я не шиз, пойду почитаю про типы и заодно про PyObject, а то не знаю как работает.
>Минуточку, в прошлом посте же говорил, что
>>Разницы в производительности что лист что кортеж тут нет никакой.
И что? Ну кто-то написал так. Я написал иначе. И что? Твой мозг не может вместить в себя анализ двух утверждений? Я не знаю, при чём тут чей-то прошлый пост, я в своём единственном посте в этой ветке написал:
1) Иногда лист работает быстрее кортежа, представь себе.
2) Никакой принципиальной разницы тут нет.
Если ты не способен осознать то, что тут написано простым русским языком, я тут бессилен. Разумному человеку сказанного достаточно.
>А теперь лист быстрее уже? Ну что ж, citation needed, как говорится, Неси бенчи, раз сам себе противоречишь.
Ща всё брошу и буду кому-то что-то доказывать. Больше мне заняться нечем. Чтобы что? Чтобы я потратил полчаса на поиск кода, а ты потом твердил, что мои пруфы не пруфы или в конце-концов даже признал, что я прав? И что мне это даст?
>И, если у тебя трудности с чтением - я спросил, давно ли туплы перестали распаковываться, потому что ты порекомендовал
Ты бредишь! Ничего я не рекомендовал, кроме того, чтобы некий питух вернулся обратно на парашу, с которой он по какой-то причине посмел вылезти в приличный тред.
>изменить тупл на лист с аргументом
Что блядь? Я даже вникать не хочу, что ты тут пишешь.
>По-моему, кто-то запизделся.
О да, ты запизделся.
>Иди почитай что-нибудь из шапки, если не понимаешь как работет синтаксис распаковки и типы из стдлибы. Потому что пока что выглядишь как вкатун, пробежавший инфоцыганский курс и возомнивший себя д'Артаньяном.
Что ты несёшь, упоротый?
>>55566
Так ты и есть шиз. Какой один пост опровержительней другого, когда я в этой ветке всего один пост написал, не считая этого?
>>55566
>Никаких бенчей офк не будет, потому что
Потому что у меня других дел хватает. Скажи спасибо, что я вообще упомянул об этом, мог бы и не упоминать.
>>55598
>Это не я (>>55096) отвечал
И не я.
Могу вернуть кортежем, могу списком, могу словарем, могу кастомным типом или датаклассом, и аннотации всё это указать. И линтер нахуй меня не пошлёт. Если это работает и не создаёт лишних строк кода и операций, то где твой бог теперь?
Списком ты не сможешь вернуть так как в типе не укажешь количество возвращаемых из функции значений, а если значения еще разные по типам то тебе придется писать Union, а потом по коду расставлять костыли на проверки isinstance. Тут уже тебя на ревью пошлют нахуй.
>в типе не укажешь количество возвращаемых из функции значений
На то я и возвращаю список?
А в кортеже я типа указываю?
Т.е. ты хочешь сказать, что если возвращаю кортеж элементов, мне не надо писать -> Tuple[str, str, ...]? Ок))
Я могу вообще всё в Iterable засунуть и мне опять же будет похуй, как и интерпретатору.
>>55671
>в противном случае тебе перезвонят
Слава богу, что как-то за 8 месяцев меня ещё не пидорнули с текущей работы, а то двач послушать, то вообще брать не должны были.
>А в кортеже я типа указываю
То есть ты любишь вернуть заранее неизвестное колоичество заранее неизвестно чего? Да уж, твоим коллегам не позавидуешь.
Да ты просто обычный говнокодер на проекте где нет настроенных линтеров и нормального ревью, не более того.
Да-да, всё так, и pylint/flake8 не настроен и весь код в папке на фтп храним, ты лучше знаешь.
https://docs.python.org/3/library/typing.html#typing.Tuple
Непосредственно в примере в официальной документации описано, как для тупла указывать тайпхинт на длину и тип каждого элемента. Жду аналогичного примера для списка.
from typing import List, TypeVar
T = TypeVar('T', dict, str)
def f() -> List[T]:
a = {1: 2}
b = "hello"
return a, b
f()
({1: 2}, 'hello')
Охуенно. И вот этот человек кичится тем, что его не увольняют.
Если до сих пор не понял, то у тебя только что получился
List[Union[dict, str]]
Ценность такого тайпхинта нулевая, ты не знаешь ни количество элементов, ни тип каждого из них. То ли str, то ли dict, хуй его знает. Может, там вообще пустой список будет.
Спасибо, ты просил пример из доки, тебе привели, ты же не хотел через Union.
>Ценность такого тайпхинта нулевая, ты не знаешь ни количество элементов, ни тип каждого из них.
>To specify a variable-length tuple of homogeneous type, use literal ellipsis, e.g. Tuple[int, ...].
Зато тут я всё знаю, конечно же.
>ты просил пример из доки, тебе привели
Твоя дислексия прогрессирует, не запускай ее. Я просил, цитирую:
>аналогичного примера
>на длину и тип каждого элемента
которого ты до сих пор не привел.
>Зато тут я всё знаю, конечно же
Цветной текст в браузере обозначает ссылку. Если нажать на таковую из моего предыдущего поста, то откроется документация на конкретном разделе, в котором описано, как описать тупл, его длину и тип каждого элемента. Чего ты до сих пор не сделал со своими списками с юнионами, после которых надо проверки длины и типа городить.
слишком толсто уже, завязывай
Не уйти ли из айти?
ИТ стремительно устаревает
Вместе с тобой. Стек, который был актуален лет 5-7 назад, сейчас уже мало чего стоит. Постоянно появляются новые парадигмы, языки программирования, фреймворки, библиотеки и т.д. Если ты самостоятельно не обучаешься, можно быстро выпасть из обоймы. В то время как конкуренция на рынке только ожесточается и на место одного разработчика претендует прокачанные, владеющие актуальными технологиями молодые специалисты (та же история в DevOps, системном администрировании, тестировании и т.д.). И нет, рынок не слаб: полно бестолковой молодёжи, но и сильных специалистов с опытом работы хватает. Золотое Эльдорадо безграничных зарплат всё больше отступает, ИТ становится скорее рутиной, чем строительством будущего.
Увы, некоторые ИТ-специальности и должности тоже трансформируются, видоизменяются и уходят в облако, аутсорсинг, задачи из серии М2М. Сложные системы выходят на новый уровень автоматизации и тем самым сокращают потребность в инженерах и разработчиках. Поэтому нужно быть гибким и обучаемым, чтобы легко менять свой профиль внутри отрасли.
И вроде бы — что плохого в непрерывном обучении и развитии для человека с интеллектом? Но обучение и самообразование выходит за границы рабочего дня и ты, чтобы оставаться тем же крутым профессионалом, вечерами пилишь свой пет-проект, ковыряя новинки Go, Java, JS (или что ты там предпочитаешь) и попутно изучая что-то совершенно новое, чтобы привнести это в рабочий проект, развивать его, делать максимально конкурентным. А это ещё один повод присмотреться к венерианским суткам, они больше подходят для качественного айтишника.
>Цветной текст в браузере обозначает ссылку. Если нажать на таковую из моего предыдущего поста, то откроется документация на конкретном разделе, в котором описано, как описать тупл, его длину и тип каждого элемента. Чего ты до сих пор не сделал со своими списками с юнионами, после которых надо проверки длины и типа городить.
Помоги с дислексией, папиши пример с туплом с его длиной и типом каждого элемента, как в документации, а то я не умею её читать и кликать по цветному тексту.
И я всё равно не вижу разницы с списком (кроме синтаксиса), т.к. твой кортеж также может вернуть пустой список/словарь, и даже может вернуть не 2 значения.
Нет, не может. Прочитай еще раз пример из документации.
Да, технически может, но любая иде даже без линтеров сразу на это начнет плеваться. В отличие от.
>Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy но народ на него жалуется
Чому?
Ок, пойду в жетбрейнс напишу, а то че-то уже год никак не могут сделать, а то на дваче сказали.
>Но обучение и самообразование выходит за границы рабочего дня и ты, чтобы оставаться тем же крутым профессионалом, вечерами пилишь свой пет-проект, ковыряя новинки Go, Java, JS (или что ты там предпочитаешь) и попутно изучая что-то совершенно новое, чтобы привнести это в рабочий проект, развивать его, делать максимально конкурентным. А это ещё один повод присмотреться к венерианским суткам, они больше подходят для качественного айтишника.
Это какие-то шараги с жестким таймтрекингом? Свободно пилю на работе петы и дрочу другие языки, а дома занимаюсь своими делами никак не связанные с кодингом.
То, что ты страдаешь дислексией уже более-менее понятно, но боюсь, к полному диагнозу также добавится рукожопость. Пучарм на такое ругается даже без дополнительной настройки, прямо из коробки.
На фото - комьюнити пучарм, любитель такой ругани.
А в жидбрейнс отправь конечно, пусть покринжуют.
Аноны, тяжело ли устроиться джуном по питону? Если работаете то чем конкретным заниметесь? Очень нуждаюсь в ответе.
Меня взяли мидлом, при том что коммерческого опыта проганья на питоне было около полу года, и то я в основном писал всякую скриптовую хуйню для автоматизации, и только начинал изучать джангу, а до этого был аналитиком.
На текущем месте пилю веб-приложения (сначала тока бэк, сейчас и бэк и фронт) для копроративного пользования. Бэк django, ninja, neo4j, graphql, mssql, фронт сначала делал через тэмплейты, потом на ванильном жсе, сейчас на vue 3.
тот самый обычный говнокодер на проекте где нет настроенных линтеров и нормального ревью
>и то я в основном писал всякую скриптовую хуйню для автоматизации
Тут я спизданул немного, т.к. ещё etl-процессы пилил и работал немного с nifi, airflow и postgresql, и взяли в том числе из-за этого, т.к. планируем в этом году переезд на greenplum.
Делаю тут проектик в курсике одном. Программа, которая получает урл страницы и локально её скачивает в общем.
Можете подсказать, че тут от меня хотят, лел. Я не могу понять вот про этот сис экзит. Че за коды возврата? Там ссылка у них на википедию, но тоже чет не особо понял. Что значит "утилита должна возвращать правильный код"? Я прочитал, что типа если всё норм, то код 0, а всё остальное не понял.
Потом, "должны учитываться все возможные сетевые проблемы", это типа какие? Ну вот я могу проверять, что типа если у ответа код не 200, а чё ещё делать?
conn timeout
conn refused
tls handshake failed
dns discovery failure
not existent domain
и так далее, все то, что тебе пишет браузер, когда ходишь по подозрительным ссылкам, вбиваешь их вручную, или не оплатил инторнеты
Окей, а это как вообще ловится? Типа это не в респонсе, а просто отдельное исключение какое-то реквестст сделает?
Ну и про сис нихера не понял всё-таки. Как это работать должно? Типа я сам эти коды выдумываю? Просто чтоб потом в скрипте их обрабатывать? Типа если код 1 - пишу что там страница не найдена, код 2 - нет доступа к файлу итд?
>это как вообще ловится
Да, вылетит эксепшн прямо на хттп-методе (для сравнения, при хттп 400+ метод выполнится, эксепшн выбросится дальше, в raise_for_status(), если ты его юзаешь)
Про код выхода я тоже хз, что именно хотят. Если нет какой-то конкретики, я б завершался с кодом = http status, если 400+ в запросе, или с кодом = 1, 2, 3... если вот эти сетевые проблемы.
Как вариант - читать документацию глазами, а писать код руками. Если узким местом окажется мозг, то применить широтно-импульсную модуляцию чтение/практика, с постепенным увеличением ширины фронта практики.
Ок, спасибо.
Какие либы юзать?
codewars и подобные площадки.
нибудь, обосрался
Есть ли похожие аналоги learnjavascript только для питона? Или вы реально только по Лутцу и остальным книжкам учились?
Скорее в плане самоучителя, просто никак не определюсь по чему учиться. Лернжабаскрипт четенький красивый, с задачками, неужели божественному питону не запилил похожий сайтец?
Запили площадку под названием Степик, где люди выкладывают обучающий текст, картинки, видео (на Ютубе, но встраивается в страницу сайта) и организуют задачки с автопроверкой для учащихся (курсы по разным языкам, есть и не по IT). Эти задачки похожи на то, что есть у Кодеварс или Литкода (но более колхозно пока что на мой вкус).
Вот у Кантора, который и написал лерн джава скрипт, вот этого и не хватает - задачек с автопроверкой. Материала у него много, материал хороший, но без проработки каждой темы на 5-10 задачах (с возрастающей сложностью) ты ничего не запомнишь и не усвоишь.
А если ты про сайт-справочник по Питону... https://pythonz.net/ не плохой как справочник, но такого подробного сайта как у Кантора про js, но про Питон я не видел.
Я бы тебе лучше порекомендовал курсы на Степике от БииГик. В Кодеварс задачки сильно разные и между собой чаще всего никак не связаны.
А так вроде норм.
И вот я думаю, а может нахуй их и дрочить джангу? В общеайтишных делах я хорошо шарю, а девы имеют более высокий потолок развития. Сложно ли вообще устроится джуном питонистом сейчас? Какой порог вхождения, учитывая бэкграунд? Сколько по времени будет дорасти (я понимаю что очень размыто, но все-равно) до 250-300 хотя бы? В aqa мне придется год-два до этого обратно подниматься. Мб действительно спекнуться, пока совсем старым не стал.
Сап, анончики. Недавно начал давить питона оп литературе которую вы скинули. Сейчас занимаюсь по самоучителю для детей, так-как считаю такие самоучители лучшими для вката. Только что выполнил задание, по написанию программы для рассчета лунной массы. Я молодец. А вам спасибо.
>асинхронность - это когда потоками занимаешься не ты явно, а язык?
Нет. У тебя может быть асинхронный однопоточный код. И use google, Luke, объяснений в интернетах как грязи - https://medium.com/velotio-perspectives/an-introduction-to-asynchronous-programming-in-python-af0189a88bbb
>>56821
Я пока сидел, немного доработал:
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 сунуть? Посмотрю что будет.
>>56821
Я пока сидел, немного доработал:
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 сунуть? Посмотрю что будет.
>while-while
>____import
>time.sleep
Для обучения сойдет, для серьезной разработки это пиздец.
>elif (re_call != 'да', re_call != 'нет')
>while (re_call != 'да', re_call != 'нет')
А вот тут даже в логике ошибка, это условие всегда True
Лол, очень непривычно вкатываться из лампового бэйсика во что-то нормальное. Тоесть, while внтури другого while не торт? Или в моем случае можно было избежать? Таким образом, я пытался получить в процессе "использования" однозначности вводимых ответов. "Защита от дурака". Цикл while всегда True? или Elif? В сраном учебнике для них обоих показывали возможность ставить там условия, как я сделал, кстати, все отлично работает у меня. На следуюющих выходных займусь доработкой, чтобы для рассчетов принимались только числовые значения.
Все, я убрал лишнее из while и поставил ему православное True.
Спасибо анончик. Теперь буду ждать следующих выходных и допишу защиту от некорректного ввода числовых данных.
>Цикл while всегда True? или Elif
Оба. Выполняемое условие всегда True, потому что ты передаешь ему кортеж
>re_call != 'да', re_call != 'нет'
Даже если оба условия False, то получится проверка вида
if (False, False):
А непустой кортеж приводится к True.
Вопрос в решении задачи. Если такое не с руки решать, то пойду в другой тред (машоб), но вообще эту задачу мне не к спеху и не обязательно решать.
Условие задачи:
Марсело решил открыть новое кафе и будет импортировать необходимый кофе из Бразилии. Он хочет объединить три раунда, а именно: 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."
Я так понял, что подобные задачи решаются при помощи линейного программирования. Нашел эту ссылочку на тему - https://proglib.io/p/lineynoe-programmirovanie-praktika-resheniya-zadach-optimizacii-na-python-2020-11-26
Пример с производством 4 видов товаров из 2 ресурсов в задаче из примера с этого сайта выглядит похожим на мою задачу, но не могу перенести логику моей задачи в этот пример.
Хотя бы так
https://ideone.com/t20uyg
Гораздо лаконичнее и без ошибок в логике выхода из циклов.
Спасибо. Возьму себе на будущее для изучения. Просто на данный момент, я только освоил циклы, до функций еще не дошел, хоть и использовал вызов функций time. Поэтому решал задание теми средствами, которые знаю. Я буду вас время от времени развлекать вас своим кодом.
в том варианте не объявлено ни одной функции, все в том же духе, что и у тебя
в твоем вызовы не только time.sleep(), но и input(), print(), range(), float(), int()
так что тот пример не про функции, а скорее про организацию логики и сокращение дублирования кода
Нихуя не понятно и вычитать суть задачи сложно. Формулировал ее какой-то соевый хипстопорридж, очевидно.
Измени Марселя на Ивана, доллары на рубли, фунты на килограммы, и вот это говно
>три раунда, а именно: Lazy Sunday Morning, Refreshing, All night quiz
на бульбу, моркву и свеклу. Будет и задача понятнее, и кафе нажористее.
А так - да, выглядит как обычная линейная функция, машоб не нужен, разве что только тебе нравится тратить время на обучение модели и получение точности навроде 76%.
Вот я и понял, что это линейная функция, но не понял как для нее условия прописать в PuLP. В примере на сайте все понятно, а тут какое-то новый уровень сложности.
Учился Python в бою. На петпроектах.
Ну да, надо записать функцию прибыли (т.е. профит - косты) и максимизировать ее с учетом линейных ограничений. Такую хуйню даже эксель может решить.
Я на питоне с таким не работал, но уверен, что должны быть готовые либы. Надо просто нагуглить доку и в путь.
Твой бекграунд вообще ничего не значит в dev. Сиди в aqa. Плюс стеки совсем разные, у aqa там куча своего узкоспециализированного. При перекате в dev на тебе будут смотреть ещё худе чем на скиллбоксового даунича, примеры можешь на ютубе посмотреть и в aqa треде постили, типо вопросики "а почему вы сразу в dev не пошли?".
С другой стороны в aqa вроде как ценится опыт ручником, ну и плюс у тебя уже понимание требований и прочей тестировочной теории. В aqa есть куда расти ещё, потом про нагрузочное узнаешь ещё какую хуету, java core ещё выучи и вообще паладином энерпрайза станешь.
Спасибо. Знаю что хэды в крупных компаниях сша могут безумные деньги получать (до 300k/y), но до такого дорасти практически невозможно мне кажется. А программистом сеньором лутать свои 6-7к мне кажется явно полегче. (как поднимать тому же aqa выше пятерки/m, или ручнику выше 3.5/m - я не представляю).
C другой стороны, это уже достаточно большие деньги, но будет обидно если через 2-3 года я пойму, что все, потолок, а прыгать в девы будет уже поздно.
Стоит
Спасибо
Никто не знает?
Код прилагаю: https://ideone.com/XEmho0
Появляются проблемы следующего характера:
Если я запускаю это в PyCharm, то вместо 5 секунд мои функции, как я написал в schedule, запускаются секунд через 30.
Вторая проблема - когда я сделал .exe файл из .py, он не работает как хотелось бы. При запуске появляется консолька на долю секунды и закрывается. Ну и у меня еще скрипт должен создавать html и txt файлы, они не создаются очевидно
Пооясните где я не прав, пожалуйста. Ну или если видите что я наговнокодил и что-то стоит поменять. Мне уже кажется сомнительным, что стоит сохранять страну в html, а не скрейпить напрямую нужную инфу.
По плану хотел чтобы обе функции работали каждые 15 минут, а 5 секунд поставил просто чтобы было нагляднее самому смотреть.
в коде никто расписание не задаёт, кладут в планировщик и запускают по расписанию
Я так и не поянл особо че делать. Что за коды возврата-то блэд? Я так понял сис экзит принимает просто сообщение, которое ничего не значит само по себе? То есть я могу это сообщение для пользователя туда и писать, а потом в скрипте, который импортирует эту функцию отлавливать исключение систем экзит и его сообщение распечатывать и в лог сувать, да? Но че тогда такое "правильный код возврата"?
Ну ёбана там же русским по белому написано, если ответ http отличается от 200, сообщить об этом пользователю.
>Спасибо, что упомянул о том, что из функции можно возвращать список вместо тупла.
Дебил, хватит мне приписывать твои вскукареки. Иди на хуй, короче говоря, тупорылый дегенерат!
С возвращением! У нас тут все готово и все в сборе, тебя не хватало. Бухал что ли эти три дня? А чего остановился тогда?
Почему нельзя возвращать из функции лист? Зачем мне возвращать тупл, если я дуальше хочу его как лист использовать? Ну пусть даже я возвращаю обьёкт, ну и хуй с ним пусть полежит в листе?
Да ну еб вашу мать, еще один.
Возвращай на здоровье, только забудь про поэлементную типизацию и возможность безопасно распаковать этот лист в переменные потом. Если оно тебе не надо, то хоть пятимерными листами кидайся.
Если пишешь код без тайп хинтинга и для себя, то никакой разницы нет (на самом деле и с ним с точки зрения работы программы разницы нет, но линтер будет ругаться и другому говнокодеру не будет понятно, что у тебя функция возвращает).
А ведь тут ты неправ.
А этот указал на твою ошибку: >>55707
Но, я только что почитал про mypy. До этого вообще не знал, что это такое. И вообще, я таксист. Но вот что я нашёл:
from typing import TypedDict
class MahClass(TypedDict):
a: dict
b: str
def f():
a = {1: 2}
b = 'hello'
return MahClass(a=a, b=b)
r = f()
Теперь у r.a будет тип dict, а у r.b будет тип str.
Ну или как-то так, я этот код не проверял.
как сделать чтобы не писать на каждую кнопку отдельную функцию?
при нажатии любой кнопки вываливается ошибка
Да я уже вкатился, я имел в виду вкат именно в эту область, неправильно поставил вопрос. Постоянно вижу этот язык в топе разных рейтингов, но не знаю как там с востребованностью на рынке труда. Потратить время на изучение технологии, а потом понять, что она не нужна было бы неприятно.
Пока таски выполняются ему похуй
Лучше скачай себе убунту с магазина приложений Виндовс и делай через Windows Subsystem for Linux и venv
>eval
Братан - это пиздец. Постарайся как угодно извращаться, но не использовать этого никогда. В совсем крайнем случае
https://docs.python.org/3/library/ast.html#ast.literal_eval
Потому что он выполняет то, что получит. Без вопросов.
>Теперь у 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
Даа, как же так работает...
У меня в продукте есть код, который запускают консольную программу, она по рестапи общается с сервером и возвращает джейсон. Этот джейсон паристся и возвращается из функции. Там вполне может и список словарей быть. Валидация джйсон схемы происходит в консольной программе. Значит список всегда валидный возвращается. Без жёстких тайпхинтов типа ограничивать длину списка (откуда я знаю какой длины будет список, который сервер отправит) и содержимое (зачем мне в анотациях дублировать джйсонсхему, которая и так нормально проверяется в другом месте плюс какая схема применяется зависит от аргументов и эндпоинта так что мне ещё и на одну функция надо будет юнион разных схем повесить фигня какя-то выходит если так делать) Что проекте сделано не так и как это исправить?
Ничего не понял, pydantic решает 90% вопросов, связанных с сериализацией твоих жысонов.
Ты даже если ноне возвращать будешь, то код будет работать. Тайпхинты не помогут. Тут надо линтером пройтись
Вижу не понял. Вот смотри. Есть консольная утилита для общения с бэкендом. Типа awscli или kubectl. И есть обёртка над этой утилитой на питоне в виде библиотеки, которую можно импортнуть и запускать эту консольную утилиту передавай ей нужные параметры как параметры командной строки и получая результат из stdout в виде одного джейсона. В обычном режиме утилита печатает всякие таблицы в человекочетаемом виде, а нам надо именно в джейсоне чтобы потом можно было с этим результатом в программе работать. Утилита сама общается с бэкендом и всё валидирует. Джейсоны, которые либа читает из stdout этой утилиты уже валидны. И либа заранее не знает что она там прочитает. Поэтому там где возвращается список в джейсоне функция парсинга stdout так и возвращает список. И нет там никакого тайпхинта на список определёной длины т.к. бэкенд может любую длину вернуть. И что ты предлагаешь делать? Какой тайпхинт на такую функцию поставить?
Никаким тайпхинтом ты это не проверишь, твоя утилита должна парсить твой жысон с бэкенда и писать в stdout, если он прошёл проверку при парсинге, или в stderr, если нет. Валидировать ты можешь через импорт жысон, ну либо создавать инстанс класса из того же пайдантика с заранее заданной схемой и передавая в конструктор свой жысон.
Этот код сломается после второго рефакторинга по уже описанным выше причинам и узнаешь ты об этом только когда все упадет в рантайме. Поэтому такой код проигрывает в стоимости поддержки, а все из-за каких-то сраных скобочек, которые тебе так сильно полюбились не к месту.
>>58934
Чел, ты ведешь себя как персонаж мема "смотрите, я долбоеб". Ок, все поняли, что тебе насрать на существующие соглашения и практики. Тебя уже назвали долбоебом один раз и обосновали почему, но ты не приводя ни одного контраргумента просто продолжаешь свою шарманку "нО вЕдЬ кОд рАбОтАеТ жЕ, мЕнЯ жЕ еЩе нЕ уВоЛиЛи". Че ты еще хочешь-то тогда, переубедить кого-то как делать правильно, соглашения переписать? Тогда ты сайтом ошибся.
Чем я блядь занимаюсь
Алсо раз уж вспомнил тот скрин, то игнорирование неудобного ответа детектед, в ответном скрине все работает, криворучка.
Не знаю чем ты занимаешься, код не упадёт ни после какого рефакторинга, только если ты сам его не захочешь уронить.
>проигрывает в стоимости поддержки
Ну да, F12 только избранные как ты могут нажимать.
>существующие соглашения и практики
Пеп8 тебя не обязывает в обязательной форме указывать типы.
>>58940
Какого неудобного ответа? Майпай из коробки идёт в пайчарме/вскоде? Нет. При запуске скрипта они ругаются на скрипт при стандартной настройке? Нет. У меня пайчарм не тот? Комунити версия 2021.2. Пайлинт и фалке8 из коробки не ругается если только заранее код не прогнать и конфиг не настроить. Распаковка тапла и листа отличается? Нет.
Я никого не пытаюсь переубедить и никому не пытаюсь прививать правильные/не правильные практики программирования на питоне, если у людей есть голова на плечах, они сами решат, что правильно, а что нет, и из-за чего загоняться, а из-за чего нет.
>Никаким тайпхинтом ты это не проверишь, твоя утилита должна парсить твой жысон с бэкенда и писать в stdout, если он прошёл проверку при парсинге, или в stderr, если нет.
Так и делаю. Если ты то же самое говоришь, то вопрос был не к тебе, а к тому жизу, что утверждает, что нельзя возвращать список из функции т.к. тайпхинты нормально не прикрутить
>код не упадёт ни после какого рефакторинга
Упадет, стоит добавить или удалить элемент в/из возвращаемого списка. Если бы там был тупл, иде сразу засветила бы варнингами как на моем скрине, в случае с листами - иди и обходи руками все использования функции, и не дай боже, если пропустишь хоть одно, никто ничего не скажет.
>Ну да, F12 только избранные как ты могут нажимать.
О том и речь, ручная проверка < автоматическая от IDE и линтеров. Автоматическая, в зависимости от срока жизни продукта, может быть на порядки дешевле. Отсюда и разница в стоимости поддержки, о которой говорю.
>Пеп8 тебя не обязывает в обязательной форме указывать типы.
Охуительные аргументы потекли. Не обязывает, дальше-то что? От этого внезапно переменные сталу лучше в список заворачивать в ретернах вместо туплов, или что? Поддерживаемость и читабельность кода улучшается?
>Майпай из коробки идёт в пайчарме/вскоде? Нет.
Снова чини дислексию. Писал же, голый пч на скрине. Без ничего. Да, даже без майпая. Да, даже без линтера.
>При запуске скрипта они ругаются на скрипт при стандартной настройке
Ругаются даже до запуска, скрин мой выше. Хотя это, конечно, же, фотошоп, а не твои кривые руки.
Если варнинги и подсветка тебя не останавливает от запуска, то, возможно, тебе стоит сменить язык на жабу, там пока не сконпелируешь с правильными типами, ничего не запустится.
>нельзя возвращать список из функции т.к. тайпхинты нормально не прикрутить
Соломенные чучела пошли в ход. Список из функции можно и нужно возвращать, если это какой-то массив данных, обычно это массив элементов одного типа. И это даже можно нормально типизировать. С этим никто, блять, не спорит, ну или пруф ми вронг.
Речь выше шла о возврате фиксированного тупла с переменными (возможно) разного типа и распаковке этого тупла в переменные:
>не return a, b, c, d
>А нужно return [a, b, c, d],
Ты зачем-то продолжаешь копротивляться, что даже в этом случае рукотворный лист из этих переменных лучше тупла, хотя это уже обоссали выше.
Алсо, конкретно ты >>58935 занимаешься какой-то хуйней. Надо валидировать - ставишь jsonschema и юзаешь его. Надо преобразовывать словари в классы с полями - юзаешь pydantic. В жсонах в принципе нет структуры, аналогичной туплу, только массивы, поэтому там списки вполне натурально используются.
Напридумывали себе охуительных историй про то, что кто-то запретил списки возвращать, и сами спорят с этим, еще и вкатунов с толку сбивают своей шизой.
>код не упадёт ни после какого рефакторинга
Упадет, стоит добавить или удалить элемент в/из возвращаемого списка. Если бы там был тупл, иде сразу засветила бы варнингами как на моем скрине, в случае с листами - иди и обходи руками все использования функции, и не дай боже, если пропустишь хоть одно, никто ничего не скажет.
>Ну да, F12 только избранные как ты могут нажимать.
О том и речь, ручная проверка < автоматическая от IDE и линтеров. Автоматическая, в зависимости от срока жизни продукта, может быть на порядки дешевле. Отсюда и разница в стоимости поддержки, о которой говорю.
>Пеп8 тебя не обязывает в обязательной форме указывать типы.
Охуительные аргументы потекли. Не обязывает, дальше-то что? От этого внезапно переменные сталу лучше в список заворачивать в ретернах вместо туплов, или что? Поддерживаемость и читабельность кода улучшается?
>Майпай из коробки идёт в пайчарме/вскоде? Нет.
Снова чини дислексию. Писал же, голый пч на скрине. Без ничего. Да, даже без майпая. Да, даже без линтера.
>При запуске скрипта они ругаются на скрипт при стандартной настройке
Ругаются даже до запуска, скрин мой выше. Хотя это, конечно, же, фотошоп, а не твои кривые руки.
Если варнинги и подсветка тебя не останавливает от запуска, то, возможно, тебе стоит сменить язык на жабу, там пока не сконпелируешь с правильными типами, ничего не запустится.
>нельзя возвращать список из функции т.к. тайпхинты нормально не прикрутить
Соломенные чучела пошли в ход. Список из функции можно и нужно возвращать, если это какой-то массив данных, обычно это массив элементов одного типа. И это даже можно нормально типизировать. С этим никто, блять, не спорит, ну или пруф ми вронг.
Речь выше шла о возврате фиксированного тупла с переменными (возможно) разного типа и распаковке этого тупла в переменные:
>не return a, b, c, d
>А нужно return [a, b, c, d],
Ты зачем-то продолжаешь копротивляться, что даже в этом случае рукотворный лист из этих переменных лучше тупла, хотя это уже обоссали выше.
Алсо, конкретно ты >>58935 занимаешься какой-то хуйней. Надо валидировать - ставишь jsonschema и юзаешь его. Надо преобразовывать словари в классы с полями - юзаешь pydantic. В жсонах в принципе нет структуры, аналогичной туплу, только массивы, поэтому там списки вполне натурально используются.
Напридумывали себе охуительных историй про то, что кто-то запретил списки возвращать, и сами спорят с этим, еще и вкатунов с толку сбивают своей шизой.
>Снова чини дислексию. Писал же, голый пч на скрине. Без ничего. Да, даже без майпая. Да, даже без линтера.
Ваша ide не ide. Понял-принял, даже отвечать не буду.
Ну, значит, моя иде не иде. И всех остальных тоже. И на сайте жидбрейнса пиздят про работу с типами. Хуево наверное быть нами, лишнее в иде работает.
class Zalupa:
____def Drochit():
________None
____def NeDrochit():
________None
____def Run(a):
_________Drochit()
_________NeDrochit()
Т.е. два метода вспомогательные, да могут вызываться по отдельности, но основную работу делает третий метод, как правильно офрмлять такок отношение? Просто делать 3 метода в рамках класса и не парится, или уже делать это на этапе запуска? Или вобще использовать колдунства вроде указателей? Что есть почитать на тему?
Если класс Response из твоего фреймворка/либы поддерживает метод json() - используй его, код будет более читаемым. Собственно, обычно под капотом этих методов и лежит дефолтный json.loads()
Дам пару примеров.
За эту неделю я прошел 3 собеса из 3, думаю вот куда пойти работать.
На одну вакансию уже было подано больше 30+ заявок(как говорит djinn).
Собеседование было таким -
Что такое ООП(Инкапсуляций,абстракция,полиформизм)
С какими паттернами имел дело?
Найди мне палиндром
Что такое итератор - генератор
Имел дело с БД?
Все ты взят, зп 800$
На всех собеседованиях зададут максимум 1 вопрос более менее, а остальные так, чисто пообщаться, как вообще их можно провалить, как эти 30+ человек провалили собеседование, я даже подумал, что фирма разводная какая-та, но нет вроде, на остальных собеседованиях все так-же - Пару вопросов, ты принят.
А на работе же душняк может быть? Ну это совсем не правильно проводить такие собесы, вдруг я не справлюсь с работой, то потом виноват буду?
> Что такое ООП(Инкапсуляций,абстракция,полиформизм)
> С какими паттернами имел дело?
> Что такое итератор - генератор
Это же вопросы на несколько часов ответа
Ну мб поэтому я и джун
Хз как можно допустим затянуть ответ на итератор-генератор, лично я ответил так - Генератор представляет собой итератор, но не является им, синтаксически используется немного в других местах, сам итератор имеет просто метод некст, который вычисляет следующее значение при обращение.
Вот и все
Ну а дальше? В чем преимущества каждого, в чем минусы? Приведите примеры актуального применения.
Ну вот он тебе и говорит, что он джун. Он отвечает на эти вопросы на уровне джуна и его берут на джуна.
Он наверное ожидал вопросы про машинный код и черно-красные деревья.
Ну с тем же итератором мы можем расширить какой-то обьект, с генератором так сделать не получится. Так-же у нас есть генераторное включение, но вот итераторного не может быть.
Для примера создал бы класс с итератором.
А если серьезно, то я смогу обьяснить где это используется и зачем, но вот конкретно между генератором и итератором же нет ничего такого разного, они похожи, генератор делает тоже самое что и итератор, но имеет ключевое слово yield и обе штуки используются для обхода огромных данных
Генератор для генерации, итератор для итерации. (ВНЕЗАПНО)
Это разная хуйня вообще, но реализована на одном протоколе итерации.
Попробуй обойди генератором большой объем, и проверь сколько памяти потратишь на это.
>зп 800$
o-la-la
Тебе хоть платят или ты платишь?
>вдруг я не справлюсь с работой, то потом виноват буду?
Конечно ты виноват. Всегда.
Как ты готовился?
Пишу свой чатик на джанго, хочу чтобы юзеры могли пукать гринтекстом друг в друга. Как на Дваче, в общем.
['users', 'id', 'city'] и значение к примеру - хуй
надо сделать словарь вида -
{'users': {'id':{'city': 'хуй'}}}
как это сделать
>Пукать гринтекстом
Парсишь строку на наличие символов, допустимой длины, начальных символов. Просто же. На перле это проще реализовать было бы
from functools import reduce
lst=['users', 'id', 'city']
reduce(lambda x,y: {y:x}, ['хуй']+lst[::-1])
Почитай про функциональное программирование и его элементы в питоне.
Раньше в питоне были map, reduce, filter изкоробки, но в третьем питоне изкоробки остался только map, остальное надо импортить из стандартной либы.
Почему в базу данных атрибут 'category' добавляется, как 'category_id'? Все остальные без id.
>лично я ответил так - Генератор представляет собой итератор
генератор - это фабрика итераторов
У тебя в классе News есть класс Meta. Скорее всего в нём это указано, кинь посмотреть.
С джангой не работал, оказывается это дефолтное её поведение.
https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey
Погуглил за тебя, кста.
Это вроде какой-то нескучный фастапи, тоже на starlette как и фастапи
Потом подучу фласк и оберну все в вебморду.
Насколько ебанутая идея?
Скорее всего, анон. Но надо же с чего-то начинать.
А ты другим не дашь потыкаться? Ну ок. Алсо, вебморда к апи двача, в то время как сам двач ей и является кажется тупиковой идеей для пета. Сделай прост свою борду, и то больше практического толка будет.
Да, это чисто для себя потыкать. Вообще я просто хочу более-менее научиться работать с апи - ничего лучше, кроме двачика в качестве практики не придумал. Просто не знаю, если есть варианты получше - то подскажи. Интересует вот эта отправка запросов туда-сюда, форматирование данных, отображение и т.д. До этого максимум с чем работал - тягал данные из БД.
>если есть варианты получше - то подскажи
Попробуй апи гитхаба или гитлаба разобрать. Проект там например скачать или дернуть из него любой файл по выбору. Дофига чего можно придумать. И навыки хорошо прокачаешь и в реальных проектах может пригодится.
asciimatics
Есть основной скрипт (файл main.py) в котором формируется меню и отлов нажатий на кнопки. И есть отдельный модуль (dialog.py), в котором с помощью конечных автоматов формируется длинный диалог и хранение в памяти ответов пользователя.
Вопрос: как запустить диалог из отдельного модуля?
в интернете что то не очень много материалов по FSM статью mastergroosha читал
Менеджер продукта.
Вычитал что надо в main прописать функцию регистрации хендлеров из модуля (dialog). Я прописал, но ничего не вышло. ну и бамп вопросу.
Где зарплаты жирнее?
Так сложилось что мне пока приходилось максимум писать хелловорлд на фастапи - все остальное время писал ДАТА ПАЙПЛАЙНЫ. Даже МЛ трогать не нужно было.
Имеет смысл грести в сторону бека или и так сойдет?
И там и там можно сказать одинаково. Иди куда нравится, градаций особых нет, кроме как на двачах, кто как хитровыебанно устроится столько и будет получать.
>пока приходилось максимум писать хелловорлд на фастапи
>Где зарплаты жирнее?
Вот прям сидят и ждут вкатуна, чтоб ему 200к платить. Тебе не поебать куда вкатываться?
Если я задаю через schedule таймер второй функции, то рано или поздно они будут выполняться в один момент
Например, в 3 минуту.
schedule.every(1).minutes.do(ХХХХ)
schedule.every(3).minutes.do(YYYY)
>Как сделать так, чтобы два линейных уравнения не пересеклись на графике
У вас в младшей школе учат программировать, не пройдя базовую алгебру?
Почему быстрее? Я еще не наговнокодил, никуда не спешу
Со своим текущим опытом оцениваю свои шансы как "реальные", поэтому хотелось бы выбить джоб оффер. Для этого мне нужно лишь закрыть специфичные для python+django пробелы.
Tl;dr: Анон с годом опыта, расскажи о специфичных вещах которые ты узнал или начал делать в рамках своей работы. Какие вопросы на эту вакансию обычно задают? с этим вопросом утром еще в гугл полезу
Обычно внутреннее устройство питона. Мультитрединг, ивент луп, гил, конвой эффект, ио операции, лоулевел цпу баунд вычисления, интерпроцесс коммуникация, примитивы синхронизации, разница второго и третьего питона, внутреннее устройство дэфолтных функий, как работает врап и лру кэш из фанктулз, что делают контекст менеджеры, чем отличается генератор от итератора, ограничения гивента и селари, возможные проблемы при использовании орм, оптимизация запросов в бд, как работать с миграциями, протокол хттп, какой хейдер отвечает за оригинальный айпи проксированого реквеста, на какие методы надо ставить цсрф токен, какие типы данных поддерживает джисон схема, какие преимущества и недостатки лонголинга, разница пост и пут, идемпотентные методы, принципы солид, асид, рест, кап тиорема, особенности ноуэскьэль баз, какие бывают алгоритмы распределения нагрузки. Это с большего, что я вспомнил с последних собесов
это пиздец
От себя тоже добавлю.
Общие:
С какой последней версией питона работал?
Можешь ли вкратце рассказать об изменениях в последних версиях языков?
Откуда узнаешь про новые фичи/обновления языка, сопутствующие технологии и их аналоги?
Что такое гил и зачем он?
Приходилось ли использовать декораторы? Писал ли свои и зачем?
Зачем использовать генераторы и итераторы?
Есть ли в питоне интерфейсы (и для чего они в теории используются?)
Есть ли в питоне перегрузка методов?
Классы и множественное наследование - нужно ли это использовать и почему?
Используешь ли аннотацию типов?
Бек:
Какие основные хттп-методы знаешь? Какие когда используешь?
Что нельзя передавать через гет?
Что используют для защиты от xss?
Как концептуально работает авторизация? Чем она отличается от аутентификации?
Что такое орм и зачем она используется?
Что такое маршрутизатор?
Что такое шаблонизатор?
Что знаешь о паттерне MVC?
Что такое гуникорн?
Знаешь ли что-то про rest/json api/graph ql?
Что такое брокер сообщений?
Мимо-присутствую на технических собеседованиях питонистов
От себя тоже добавлю.
Общие:
С какой последней версией питона работал?
Можешь ли вкратце рассказать об изменениях в последних версиях языков?
Откуда узнаешь про новые фичи/обновления языка, сопутствующие технологии и их аналоги?
Что такое гил и зачем он?
Приходилось ли использовать декораторы? Писал ли свои и зачем?
Зачем использовать генераторы и итераторы?
Есть ли в питоне интерфейсы (и для чего они в теории используются?)
Есть ли в питоне перегрузка методов?
Классы и множественное наследование - нужно ли это использовать и почему?
Используешь ли аннотацию типов?
Бек:
Какие основные хттп-методы знаешь? Какие когда используешь?
Что нельзя передавать через гет?
Что используют для защиты от xss?
Как концептуально работает авторизация? Чем она отличается от аутентификации?
Что такое орм и зачем она используется?
Что такое маршрутизатор?
Что такое шаблонизатор?
Что знаешь о паттерне MVC?
Что такое гуникорн?
Знаешь ли что-то про rest/json api/graph ql?
Что такое брокер сообщений?
Мимо-присутствую на технических собеседованиях питонистов
3.10
Обо всех - нет, но матч паттерн в стиле раста помню
С телеграмов, с хабра, прочих ресурсов куда захожу
Хуйня из под коня, которая укоренилась и ряд разработчиков тебе даже защищают его. Глобальный лок, который останавливает выполнение потока и переводит процесс на другой. Нужен якобы для упрощения работы в многопоточном режиме.
Конечно. Например декоратор авторизации, декоратор форма, да дохуя каких.
Есть, но не в привычном виде. Например более-менее похожи на интерфейсы zope interface сук, всегда проигрывал с этой зопы. Для того же, для чего интерфейсы вообще нужны, определить сигнатуру метода класса и заставить реализовать метод.
Ну да, это магические методы, например __add__
Вопрос риторический. У множественного наследования есть проблема, например при ромбовидном наследовании могу побоычные эффекты произойти.
Да, но не тотально в каждом методе.
А есть еще и не основные? get - запрос ресурса, post - создание ресурса, put - модифимкация ресурса, delete- удаление, options - проверка на то, какие методы поддерживает апи
То, что не должно быть видно чужим людям: пароль, токен и т.д
csrf токен
Ой, вот тут лень думать. Аутентификация - вроде проверка личности, что ты это ты. Авторизация - получение прав в соответствии с твоей учеткой
"Удобная" вещь для работы с бд, запросами. Только практически всегда проигрывает в работе правильным сырым запросам.
Маршрутизатор - ? Че? Роутинг что-ли?
Шаблонизатор? Пиздец, вот на этот вопрос даже отвечать не хочу. Что за тупые определения спрашиваются?
Ничего
Прослойка между нджинксом и приложением. Сервак, принимающий запрос
Знаю, все, кроме graph ql - нормальный способ построения взаимодействия между беком и фронтом.
Приблуда, занимающаяся передачей сообщений по определенному формату между пользователями брокера.
Да в целом неплохо.
>внутреннее устройство питона
>гил
>лоулевел цпу баунд вычисления
>интерпроцесс коммуникация
>разница второго и третьего питона
>лру кэш из фанктулз
>лру кэш из фанктулз
>лру кэш из фанктулз
>идемпотентные методы
>принципы солид
Вот это можно смело выбросить. Из разряда "а ты знаешь это? Нет? Так, ясно. Да, это мы так просто спрашиваем, ты с этим у нас вряд ли столкнешься, но на результат собеса повлияет. Даже если и столкнешься, то, а не важно. Следующий вопрос"
На собесе как-то спрашивали о внутренней работе питона. Дошли до того, как реализован список питона на С. Я сказал, что список - константный указатель, а значение - смещение указателя, потом спросил, а нахуя это спрашиваете, мы там свои списки на сях будем писать? Мне сказали нет, но ведь это интереснее чем про json разговаривать.
>post - создание ресурса
Анус ставишь?
>чужим людям
Че? Кто этих "чужих" определяет?
>csrf токен
Все что могешь?
>Ой, вот тут лень думать
Ты побазарь мне так на собесе, епт
>Только практически всегда проигрывает в работе правильным сырым запросам
Чем проигрывает? По очками что ли? Или решением судей?
>Че? Роутинг что-ли?
Что спросили, на то и отвечай
>Шаблонизатор? Пиздец, вот на этот вопрос даже отвечать не хочу. Что за тупые определения спрашиваются?
Это мы решаем, епт, что спросить. Самый умный дохера, я смотрю? Деревья на листочке повертеть захотел? Мы там с тебя быстро 3 шкуры спустим
>Ничего
Хоть честно. Тогда встречный вопрос: зачем ты вообще на Джанго пошел? Писал бы себе дальше скрипты для ИП Кабан Кабаныч
>нормальный способ построения взаимодействия между беком и фронтом
Ты эту "нормальность" определяешь?
>Приблуда, занимающаяся передачей сообщений по определенному формату между пользователями брокера.
По русскому что у тебя было? Фиг ли сам же термин в его определении используешь?
>post - создание ресурса
Анус ставишь?
>чужим людям
Че? Кто этих "чужих" определяет?
>csrf токен
Все что могешь?
>Ой, вот тут лень думать
Ты побазарь мне так на собесе, епт
>Только практически всегда проигрывает в работе правильным сырым запросам
Чем проигрывает? По очками что ли? Или решением судей?
>Че? Роутинг что-ли?
Что спросили, на то и отвечай
>Шаблонизатор? Пиздец, вот на этот вопрос даже отвечать не хочу. Что за тупые определения спрашиваются?
Это мы решаем, епт, что спросить. Самый умный дохера, я смотрю? Деревья на листочке повертеть захотел? Мы там с тебя быстро 3 шкуры спустим
>Ничего
Хоть честно. Тогда встречный вопрос: зачем ты вообще на Джанго пошел? Писал бы себе дальше скрипты для ИП Кабан Кабаныч
>нормальный способ построения взаимодействия между беком и фронтом
Ты эту "нормальность" определяешь?
>Приблуда, занимающаяся передачей сообщений по определенному формату между пользователями брокера.
По русскому что у тебя было? Фиг ли сам же термин в его определении используешь?
НА ИНТЕРВЬЮ СПРАШИВАЮТ СОСЁШЬ ЛИ ХУЙ И ДЕЛАЕШЬ ЛИ БОЧКУ
@
ОТВЕЧАЕШЬ ДА
@
ПОСЛЕ ИНТЕРВЬЮ НЕ ЖМУТ РУКУ
Закудатал, не прошло и 5 минут.
>Деревья на листочке повертеть захотел? Мы там с тебя быстро 3 шкуры спустим
Сразу нахуй послан. А потом пиздуешь дальше работать и перерабатывать дома
Я бы тебя ещё попытал, но пока выглядишь сильным мидлом. 200к тебе цена. 250 если с доп вопросами справишься. Как сборщик мусора с гилом работает знаешь? Вообще какие проблемы от сборщика мусора появляются? Как ngnx с гуникорном общается? Я как гуникорн с приложением? Зачем он нужен? Почему нельзя без него? Как он обрабатывает входные запросы? Асинхронность на каком уровне добавляется? Сколько опыта? Другие языки знаешь? Коммерческий опыт с ними есть? Медиум с литкода за 10 минут решишь? Напишешь фабрику, которая принимает n и возвращает генератор, который всегда возвращает n самых больших чисел из тех, на которых его вызывали?
>В_ИСХОДНОЕ
Подозреваю стейт у него меняет? Ставь этот начальный стейт явным образом в __init__
Братан, я просто рандом, который мимо проходил и ответил на вопросы. Я не тот вкатун в джангу, который начал.
Знаю. По ответам понятно, что не вкатун. Думал ты хотел потрениться на реальных вопросах с собесов раз начал отвечать. Ну ок.
Ну вообще уже допы довольно жесткие.
Проблемы сборщика, что он не отдает операционке высвобождаемую память, точнее отдает, но не часто, там какой-то механизм деления на большие и маленькие сегменты памяти. Маленькие сегменты в больших. Когда освобождается память из маленького сегмента, она остается во владении процесса, а не отдается операционке. И только при освобождении всех маленьких сегментов - большой сегмент памяти отдается операционке
Ну вообще без гуникорна можно, если напрямую cgi использовать через апач какой-нибудь. А если имеется не именно wsgi, в вообще зачем сервак, то он он взаимодействует по протоколу с приложением.
Фабрику могу написать, но не сейчас. Сейчас у меня работа
>Ну вообще уже допы довольно жесткие.
Это уже сеньёрские темы.
По поводу сборщика мусора ожидал ответ про трёхуровневую модель и зацикленные ссылки. Не понял что ты ответил. Кажется ты пытался вспомнить трёхуровневую модель, но вспомнил только 2 уровня. Плюс проблема сборщика муссора в том, что при возможно параллельном доступе из двух тредов в один участок памяти сборщик мусор должен уметь с таким работать. В питоне это невозможно из-за гила и поэтому сборщик мусора однопоточный. В джаве например при большой нагрузке и неудачном конфиге окружения код может прекращать выполнение всех тредов на 1-2 секунды чтобы собрать мусор. Если например это произайдёт в момент грэйсфул шатдауна микросервиса с пятисекундным таймаутом, то у долгих запросов останется только 3-4 секунды чтобы завершиться и могут повылетать хттп ошибки юзеру или исключения в бэке. Питон лишён такой просадки по перфомансу за счёт ненастоящего мультитрединга.
По гуникорн тоже не то. Если говоришь, что можно, то уточни явные недостатки. И про асинхронность не сказал. Как раз гуникорн и конторолирует количество воркеров и асинхронные ли они. Без него очень тяжко
В общем крепкий мидл. Не знаю твой опыт, но предлагаю искать оферы от 200к. Если у тебя сейчас меньше, и опыта всего пару лет, то есть смысл разослать резюме.
>Не понял что ты ответил
Я про то, что выделяя память, после освобождения сборщиком она не возвращается сразу операционке, а остается во владении некоторое время.
Про внутренний подсчет ссылок и то, что цикличесике ссылки подсчет ссылок не умеет удалять, а только сборщик - знал, но что-то не подумал про это.
У меня 3 года на перле и 3 года на питоне. Зп 180, пока не в поиске.
На апворке с красивым профилем скорее всего да. Можно попробовать окологалерные биржи типа топтала. Сам не эксперт. Никогда так не работал
>Я про то, что выделяя память, после освобождения сборщиком она не возвращается сразу операционке, а остается во владении некоторое время.
А понял. Тогда стоит уточнить когда это преимущество или недостаток. Сам с ходу могу только придумать, что oomkiller может убить контейнер если пересоздавать большой объект. Старый после удаления не освободил до конца память, новый пытается занять столько же, программа упёрлась в лимиты контейнера и контейнер крашнулся. Не самый частый юзкейс, но как особенность знать полезно.
>Про внутренний подсчет ссылок и то, что цикличесике ссылки подсчет ссылок не умеет удалять, а только сборщик - знал, но что-то не подумал про это.
Это кажется более полезным знанием. Оно всё таки к утечкам приводит. Лучше сразу всё по пунктам выкладывай, а потом про каждый подробнее если время интервью позволяет.
>У меня 3 года на перле и 3 года на питоне. Зп 180, пока не в поиске.
Ты похоже сам знаешь как дальше развиваться. Но если потренишься и повезёт, то на 40-50к апнуть зепку реально.
А где ты настройки доступа к бд с настройками будешь хранить?
Как ты будешь определять, что это среда - стейдж/локально/прод/тест?
У меня есть модели 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>
Но статика при загрузке приложения не подгружается почему-то.
В чем может быть проблема?
Ты чего подорвался?
>praktikum
>aleksanderbekin
Вот мы смеялись над ромой-прыгуном, а он взял псевдоним и даже смог поступить на вышку, впечатляет.
Бля, ну неужели на десятом импорте у него не появилось мысли, что он, может быть, что-то неправильно в этой жизни делает
ты че пёс он математик датасайентист
Да ничем, напридумывают себе модульность какую-то, переиспользование кода, это делить его на функции, классы, хуйню, малафью. Просто заебенить цельный скрипт на 6к строк, где падает - заткнуть try-exceptами, да с elif-ами четверной вложенности, чтоб обои от стен отклеивались, ух бля.
[Errno -9999] Unanticipated host error
ОС: Windows 10, доступ к микрофону разрешён, но в списке приложение питона нет
Так а че почитать про классы в питоне ДОКУМЕНТАЦИЮ ЛЕНИВОЕ ГОВНО, и посоветуйте что либо для веб в питоне, подкасты, книги, каналы
Есть тут кто хорошо шарит в Celery?
После падения одной из задач в группе, мы завершаем ( .revoke(terminate=True) ) остальные таски, чтобы они не жрали лишние ресурсы хоста, однако некоторые из этих тасков завершать принудительно нельзя (даже если они зафейлились они все равно должны отработать до конца и записать в базу определенный результат). Как нам это все осуществить? Массово завершить задачи не проблема через обработчик ошибок, но как нам защитить определенные таски от revok-а?
запилить таски которые ревокать низя в отдельную группу?
делоешь папочку на проект
вне этой папочки уровнем выше должен быть файл типа для создания объекта фласк (run.py, server.py или как хочешь назови) и импорта всего с этой папочки
его и запускаешь без задней мысли (python server.py) или с задней мыслью со всякими там uwsgi, gunicorn и что там только нет, но это обычно для продакшна уже
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 раз вызвать функцию, а потом с результатом работать не засоряя область видимости ненужными локальными переменными. Разве я много прошу?
Во первых лру кэш на проперти это константа т.к. он не принимает аргументов. А во вторых. Не подходит он там. Значение может меняться и я должен явно указывать когда ожиданию изменения значения.
Я кстати в этом коде пытался тот эксепшен из лямбды бросать передавая его как аргумент в функции клинапа в одну из функций и вызывать внутри эту лямбду по кондишену. Как же тяжело без сахара. Неужели так сложно его принять?
Ставлю анус что проект из докера запускается
Так вот, что нужно, чтобы моё джанго-приложение знало когда этот процесс завершится, а ещё лучше, чтоб могло видеть прогресс выполнения?
Я думал над таким вариантом: сделать асинхронный метод в приложении и каждые 5 сек смотреть прогресс из редиса, куда с другой стороны будет записывать этот прогресс другой сервис.
Есть ли что-то лучше? Слышал про селери, оно тут подойдёт?
Да. Селари то что надо. Пост запрос должен возвращать код 202 и айди ревеста, джанго запускает селари таску и запоминает в базе соотвествие айди реквеста и таски. Потом клиент сам должен опрашивать эндпоинт с гет запросом и айди реквеста. На него повесь секундный тротлинг с возвратом 404 и проверку завершения селари таски. Когда завершиться возвращай 200 и результат. Асинхроность тут не нужна если у тебя всё остальное синхронное
celery
Мы с Сбере им обмазались. Ощущения - атас. Малолетние дебилы конечно же будут писать про async, но детям невдомек, что существует ясная разница между IO и CPU
Это для лошков каких-то. Мы с пацанами просто долбимся каждые 2 секунды на серв и все нах. Ты типо дохуя особенный, я гляжу?
Нет. Это отдельный процесс. Он 100 параллельный и менеджится ос. Так что даже гил на него не влияет.
Посоветуйте лучше что почитать чтобы разбираться в селари. На офсайте только доки и полтора гайда. Хочется знать подводные камни и бест практис.
)))
Берешь любой проект с селери и изучаешь
Мякота начинается когда ты таски в пайплайны организуешь и ошибки пытаешься отлавливать
Это недостаточно. Без коментов авторов не понять где они ловят проблему, как дэбажат, на какие трейдовы пошли. Я ишьсы и ченджлоги пытался читать на офф гите, но они там устаревают быстро, малоинформативны и не структурированы
Работаю за 200к. До этого 1г питона был и хуева туча лет прогерства скриптования на всяком говне еще со средней школы.
Так что думаю довольно легко вкатиться, раз берут такое говно как я.
При отправке задачи через delay() он выполняет таск, а иногда не выполняет. При этом на сервере самого брокера никаких ошибок нет. Судя по логам он вообще не вызывает обработчик. Иногда вызывает, а иногда нет. На одних и тех же запросах.
С чем это может быть связано?
Может ли мне кто-нибудь помочь с изучением вопроса и как правильно задать вопрос гуглу? Стоит задача: есть два файла, один-пустой белый квадрат в формате .bmp, другой-rar архив. Нужно: заменить байты .bmp, начиная с 55 (0x36) на байты .rar архива полностью.
bytearray смотри
Настроил все по этой инструкции https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04-ru
Nginx сработал один раз и вывел то что нужно.
Но потом я пытался изменить в файле myproject.py
from flask import Flask
app = Flask(__name__)
@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 нужно какой то командой запускать?
У тебя uwsgi сервит его, это уже готовый сетап. Можешь перезапустить через systemctl restart.
Для разработки достаточно запускать через python myproject.py и перезапускать при изменениях.
Это получается если делаешь изменения, то прийдеться службу перезапускать? Не сильно удобно. Я понял если пишешь, запускаешь на девелоперском сервере и все.
Я же говорю - это готовый сетап для прода.
Для разработки сервер не нужен вообще, у фласка есть свой встроенный, чего достаточно.
Спасибо, бро
И да, стартует он командой прямо в докерфайле, сервится через nginx. Без докер-композ или чего-то такого.
Просто думаю может самому разобраться пока наша команда херню не сотворила
В самом джанге который? Хорошо, а как быть с celery workers который запускается отдельно от джанги.
Либо как сервис и обмазываешься ансибал ставля всё без докера прямо на вм. Или делай образы и рядом через композ. Но композ херня для этого. Системд лучше докеровского демона умеет фейлы хендлить и настраивается гибче. Вместо композа можно докерсвормом обмазаться, но это извращение. Есть ещё экзотика типа ансибал для докера. У нас это колла-ансибал. Там и имэджи и плэйбуки одинаково джинджей кастомизируются и всё вместе легко через пайплайн билдитися и деплоится. Но для вашего случая это возможно оверкил.
Кстати у докера перфоманси сети падает если не хостовой неймспейс использовать. Поэтому если всётаки хочешь докер, то придётся без сетевого неймспейса делать и всякие костыли из-за этого городить. Ещё если лень с ансиблам разьираться, то ожно вручную на имедже всё настроить в запущенрй вмке, снять снапшот и использовать его как диплой имэдж продккта каждыф раз толтко один конфиг подбрасывая. Но это цде вариант не для пайплайна. Решение для бедных
рак мозга, не умею формулировать вопросы
Я вообще не хочу докер, который они ставят по одному на каждый вм. Ладно, буду думать.
В общем, там с fifo очередью какая-то ебанина происходит. Чем меньше таймаут видимости, тем быстрее выполняются задачи. При этом таск куда-то пропадает нахуй отовсюду, но он как бы есть, да. Таск выполнился? Жди пока таймаут полностью пройдёт и только потом вытаскивай следующий. А может и не жди.
Ебанина кака-то. Либо я тупой, либо лыжи не едут.
При выводе текста типа ('Тест', var1,'.')
То получается, что в выводе имеется пробел (который мне не нужен) между строкой и переменной и выглядит это 'Текст 5 .', а не "Тест5.".
А при использовании знака "плюс" вместо запятой выдает ошибку.
Как это фиксить? Указывать тип переменной строку, чтоб она не считалась числом по дефолду, чтоб нормально работал вывод с плюсом?
То, как ты формулируешь задачу - долбоебизм костыли, чтобы заставить функцию принт работать так, как она не должна работать.
То, что ты на самом деле хочешь сделать, называется форматирование строки. Дальше в гугл.
ф-строки лучше. Но я просто в str() оборачиваю, ф-строки для задротов, плюсы для работяг.
Я правильно понял, что это более современный вариант plt.rcParams['...']?
https://pastebin.com/u0A5jUz2
И ещё, можно ли динамически создавать очереди в celery? Допустим, для каждого залогиненого пользователя делать свою очередь.
Брокер aws sqs
Для чего спрашиваю. На сервер призодит куча сообщений от различных прльзователей. Эти сообщения отправляются через post на другой ресурс.
Допустим, первое сообщение создаёт запись на другом ресурсе, последующие - добавляют данные к нему. Если первое сообщение пришло одновременно со вторым, то обрабатываются они одновременно, соответственно, создаются две записи, чего быть не должно.
Потому возникла необходимость создания очередей, для их последовательной обработки. С другой стороны, это сильно уменьшит пропускную способность сервера.
Как быть в таком случае? У кого-нибудь был опыт решения подобных задач? Неуж-то никак нельзя обойтись без снижения производительности?
нихуя не могу сообразить
Есть код, который переводит аудиофайл в матрицу:
mono_sound_to_cut = mono_sound[:1990000]
def get_parts(sound, size_to_cut=1000):
number_of_parts = int(len(sound)/size_to_cut)
return sound[:number_of_parts*size_to_cut
].reshape(number_of_parts, size_to_cut)
parts_size = 1000
mono_sound_matrix = get_parts(mono_sound_to_cut, size_to_cut = parts_size)
хочу написать функцию по переводу матрицы, которая получилась, обратно в аудио
И ещё, насколько будет хорошей идеей использовать в качестве брокера собственную бд? Везде пишут что это не очень, при большом количестве запросов бд будет перегружена и тд. Но тем не менее.
Класс А создаётся только через get_a()
Что вообще можно сделать интересного на Питоне к курсовой?
Я уже все понастраивал, перешерстил гугл.
В чем может быть проблема?
Читай картинку по частям, по 1024 байт, например. В бд сделай array и appendай туда всё. Можешь пробовать сделать через conqurence, чтоб быстрей.
Собрать примерно так же, по частям.
Не ври, тв даже не искал. Первая ссылка. imagefield
https://stackoverflow.com/questions/60926603/django-how-to-display-images-from-database-in-template
Доброго времени. Нуфаг итт в треде.
На счет параметров функций вопрос у меня.
Правильно ли я понимаю, что в параметр-кортеж звездочки не ставлю, иначе текст станет жирным и хер поймешь, что сказать хотел падают одиночные значения после объявленных переменных (если есть), а уже в параметр-словарь падают данные вида ключ:значение?
И получается, что сперва выводятся объявленные переменные (то есть, a=10) и ей подобные, затем кортеж, включая строки, а не только числа, а уже потом словарь, с данными в виде ключ:значение?
И если нарушить порядок, то это работать не станет, даже если сперва пойдет параметр, а за ним уже параметр и аргументы при вызове функции?
И получается, что параметр-кортеж это всегда кортеж, который похож на массив, но без возможности добавить в него новое значение, после ввода данных?
А параметр-словарь это всегда слоаврь, где данные записаны в виде ключ:содержимое?
Или я вообще нихуя не понял?
Неправильно думаешь
def func(a, b, c, args, kwargs):
...
params_dict = {a:1, b:2, c:3}
params_list = [1, 2, 3]
func(params_dict)
func (params_array)
и переменные заполняются сразу.
Почитай что значат args, kwargs, в частности что делают и *
Вы видите копию треда, сохраненную 30 июля 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.