Вы видите копию треда, сохраненную 1 августа 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2087217 (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
Датафреймы один в один повторяют их фунционал, но спарк же не хранилище, поматросил и бросил. Ладно там метадату хранить кокую-нибудь, но там что-то данные туда постоянна колхозят.
>Ну ты с своими микросекундами просто протянешь на пару недель дольше, а потом вся та же самая ебля с масштабированием. Это не та оптимизация, которая разительно что-то улучшает.
Асинхронность лучше масштабируется, чем треды.
Но главное, если у тебя задача завязана на операцию с низкой латентностью, чтением чего-то из далёкой сети, то в случае тредов плодится их огромное количество, они все висят и потребляют ресурсы. А асинхронные задачи много не забирают и там оптимальное переключение.
Конечно, всё ещё от тредов зависит, бывают специальные лекговесные реализации, в то время как переключение задач и работа планировщика в асинхронных архитектурах тоже жрёт ресурсы.
В питоне довольно дорогое переключение задач. Но при этом не проблема в одном процессе держать тысячи задач, сотню тысяч фьюч.
всем привет, сильно не пинайте, я только начинаю изучать пайтон, созрел тут один вопрос.
Я хочу в Телеграм написать бота, который будет отправлять запрос (скажем раз в 30 сек) находится ли какой-то пользователь онлайн (многие прячут эту инфу и вместо времени последнего посещения видно просто "был в сети недавно") и скидывать отчеты по периодам активности юзера. Возможно ли в теории создать такое приложение или же Телеграм блокирует такую идею в принципе?
спасибо всем отписавшимся
читай в апи телеги, там должно быть написано. возможно у обычного бота не будет такой возможности, тогда гугли telethon
Есть функция, которая считает всякую всячину, добавляет это в датафрейм, потом записывает в файл. Только из-за объёма данных и скрипт, и ноутбук сдыхают на полпути.
Если обрабатываемые данные делить на куски и передавать в функцию, то:
1) Можно ли в файл будет дозаписывать данные, чтобы на выходе всё таки получился один файл, а не N файлов на каждый кусок?
2) Стоит ли постоянно вызывать f.open/f.close для каждого куска? Или держать открытым файл, пока все куски данных не обработаются?
3) Что можно её придумать для оптимизации производительности?
Текстовые (до 5 слов в ячейке) и числовые (одно число типа float32).
Там получается что-то около 4 миллионов строк и до 800 столбцов.
>1) Можно ли в файл будет дозаписывать данные, чтобы на выходе всё таки получился один файл, а не N файлов на каждый кусок?
open(mode='a')
https://docs.python.org/3/library/functions.html#open
>2) Стоит ли постоянно вызывать f.open/f.close для каждого куска? Или держать открытым файл, пока все куски данных не обработаются?
Да. Или хотя бы fflush, но я не знаю, естьли он в питоне
https://docs.python.org/3/tutorial/inputoutput.html#tut-files
Спасибо.
>Да
Размытый ответ.
Открывать и закрывать на каждой итерации? Или один раз в самом начале работы и один раз в конце?
>Открывать и закрывать на каждой итерации?
На каждом батче, который опосаешься потерять. Если не жалко <10000, закрывай каждые 10000, если жалко каждую итерацию, закрывай каждуюитерацию.
Спасибо.
А последующие данные завязаны на результат обработки предыдущих?
Почему тебя не устраивает идея, чтобы было много файлов? Не 4 миллиона, но несколько сотен, например? Это в чём-то более правильно, и так ты можешь, например, удобно распараллелить вычисления.
Дозаписывать в файл можно, уже сказали об этом, режим "a" (дозапись или создание файла) или режим "r+" (чтение и запись, но нужно, чтобы файл уже существовал).
>А последующие данные завязаны на результат обработки предыдущих?
Нет, не завязаны.
>Почему тебя не устраивает идея, чтобы было много файлов?
Потому что их всё равно потом сводить в один для дальнейшего анализа, кластеризации и визуализации.
Меня, поэтому и интересует, чтение-запись насколько сильно нагружает память?
По-моему, ты что-то не то делаешь.
Прочитал строчку, прокрутил свое вычисление, записал строчку. Это не нагружает ничего.
Покажи код, штоле.
>Прочитал строчку, прокрутил свое вычисление, записал строчку. Это не нагружает ничего.
Ты не прав, нагружает и сильно.
Каждая файловая операция это системный вызов, а это дорого. Помимо того, что это насилие над файловой системой и диском, но здесь ОС может несколько сглаживать, но не всегда.
Но в любом случае, даже если ОС хорошо кеширует, системных вызовов это не отменяет.
Вот если речь о том, что 1000 раз в секунду надо записывать, то однозначно стоит оптимизировать. Если 10 раз в секунду, то в целом норм, обычная история.
Есть буферизация, плюс у ос там какие-то свои фичи.
Но он пишет, что прям пиздецки тормозит, это явно не в диске дело.
Я ради интереса посмотрел, если файл открывать с помощью with open, на линуксе, то действительно буферизует, то есть не на каждую операцию write системный вызов делается, а на каждые 8 кб. То есть питон сначала куда-то к себе в буфер кладёт, а как 8 кб накопится, так делает системный вызов и сбрасывает данные на диск.
Под линуксом системные вызовы через strace отлавливаются хорошо.
Соответственно работает довольно быстро. Это правда на мелких данных. Может стоит тест сделать на большие бинарные блоки.
>то прям пиздецки тормозит, это явно не в диске дело.
Я ж писал, кернель и просто питон после пары-тройки часов тупо сдыхает.
Команда top в консоли показывает, что за эти часы тупо расходование памяти достигает 100%, и вероятно, идёт дальше, поэтому всё заканчивается.
Это что-то типа промежуточной модели, которая пилится под каждую вьюху. Можно сделать один общий механизм связывания вьюх с их моделью представления, поэтому не надо дрочиться с контроллером, достаточно описать как получать из данных модели данные модели представления, и как обновление данных модели представления преобразовать в обновление данных модели.
Ну ты видимо свои данные где-то в памяти накапливаешь, поэтому память и заканчивается.
Надо, конечно, сбрасывать на диск периодически.
Вот насколько часто надо смотреть. Попробуй может тупо каждую строчку записывать. Но не открывать файл и не делать flush, а просто записывать.
Избыточность системных вызовов можно отследить с помощью strace
>strace python scrypt.py 2> log.txt
и там смотри системный вызов write. В конце строчки размер данных указывается, если порядка 4-8 кб, значит буферизация питона работает.
Если ты будешь на каждой итерации делать flush, то системный вызов неизмежен скорее всего, иначе это не flush. Открывать-закрывать файл на каждой итерации тем более нельзя.
Вообще, Если у тебя программа стабильная, то можно смело один раз открыть файл и потом туда писать.
У меня так сутками скрипты на питоне и ноде работают, и пишут в один файл всё.
Если расчёты падучие, открывай файл снаружи функции, оборачивай функцию в исключение, и после исключения закрывай файл.
Нет. Операционная система сама решает на эвристиках, что держать в кэше, но в общем случае можешь работать, будтовесь файл целиком лежит уже на диске и памяти не занимает.
Нет.
Если ты сделаешь
with open("file.txt', 'r') as file:
____data = file.read()
тогда да, весь файл прочитается целиком, весь террабайт, если у тебя файл в террабайт. Ты должен читать блоками или построчно.
Если ты пишешь в файл, то никакой дополнительной памяти, кроме небольших буферов на несколько килобайт, не выделяется. Но когда ты делаешь write, то ты в качестве параметра данные указываешь. А эти данные в памяти.
Предполагаю, что если ты открываешь файл в текстовом режиме и передаёшь в него огромную строку, то выделится сравнимого размера буфер, чтобы перекодировать его в какой-нибудь bytearray. Это предполагаю, надо смотреть и думать.
Запись-чтение файла это системный вызов ОС. Ты говоришь ОС, запиши вот этот буфер в файл. ОС записывает и всё, все забивают на этот буфер, можешь использовать его заново, он больше не нужен.
Если у тебя кончается память, то где-то утечка, ты видимо что-то не освобождаешь.
>Если у тебя кончается память, то где-то утечка, ты видимо что-то не освобождаешь.
А казалось бы! в питон пришёл, а не в си.
И самое странное, что раньше он работал нормально.
for i in range(0, len(list1), step_size):
как мне получить индекс i? Enumerate же здесь не используется?
Тупо новую переменнёю-счётчик добавить?
кто тебе запретит завернуть в enumerate?
i это уже сам по себе индекс. если ты имеешь в виду номер в последовательности, то можно просто int(i/step_size).
Честно говоря нихуя не понятно, постоянно в голову лезет логика БД, в ассоциации с фреймами.
Изменить текущий
df['твое_поле'] = df['твое_поле'].apply('твое_условие')
Создать новый с изменениями
new_df = df.apply(lambda x: 'твое_условие'(x) if x.name == 'твое_поле' else x)
Всё, сука, в документации есть
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
Нахуя вы на двач лезите, если в гугл не можете
Иди в какой-нибудь из прикрепленных тредов а лучше на хуй
Какое отношение этот вопрос к питону имеет?
Как твоя проблема соотносится с ЯП?
Репорт.
Вот есть классы и их объекты. Объекты не могут быть независимы от классов, они всегда должны принадлежать какому-либо классу?
Когда я пишу print('Hello') - это объект класса print? Объекты класса всегда обозначаются вызовом имени класса и указанием ()?
У классов есть методы. Методы это те же стандартные функции класса def, но с обязательным указанием параметра (self)?
class NewClass как оператор тоже является классом? Или это просто keyword и команда class не является классом?
Чем тип отличается от класса?
Блядь, как этой вообще нормально переварить?
Главное. Есть поле и метод, он может быть как у класса, так и у его инстанта, объекта. Можно создавать поля-методы как у класса так и у его объекта. И вызывать также. Это как переменные, области видимости, вот это все.
Например, класс Писька, можно сразу переходить к созданию полей и методов к его инстантам, объектам, через селф. А можно и у класса Писька. Погугли еще наследование, полиморфизм и инкапсуляцию. В целом ничего сложного.
Судя по посту, ты слишком мало знаешь, чтобы внятно обьяснить.
Кури дальше и потом приходи, если будет дальше непонятно.
Ссылка в шапке не рабочая.
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6
Да я всё время путаю, потому что идиотский дизайн. Нужен просто match, а для поиска в начале есть ^ или \A.
Неужели я неправильно решаю? Гляньте кто может, плис.
класс это просто конструкция
это не какая то обязательная хуйня.
принт это не класс, это функция
деф это метод, инструкция
тип это блядь тип.
для начала прочитай все книги лутца чтобы решать такие задачи
Хочу переводить время из строки в разные часовые пояса(пикрелйтед). Но почему-то при переводе в utc_local, часовой пояс меняется, но время остаётся без изменения( например до перевеода было 17:00, и после перевода осталось 17:00). ЧТЯДН?
Долбоебам говорят 20 лет уже, что если не нравиться кодить - не лезьте блядь, нет нахуй, потерпим, ну вот енджой ёр ворк теперь, еблан)
Бля, чтобы нравилось кодить нужно шарить по моему пиздец как
когда будешь уже ебанить на полуавтомате то не будет так тяжко.
а когда приходится постоянно разбираться и мудрить то тяжко.
Одно дело когда делаешь для себя, там можно отдохнуть, подумать, почиллить. а когда сроками ебут то это ебаная потогонка, особенно если возникают мелкие непонятные ошибки , на решение какой нибудь мелочевки можно потратить пару часов гугления, это не круто.
в любом случае мне кажется лучше ебаться с кодом за пекой чем в грязном гараже в масле купаться. Мне нравятся тачки и механика, я в этом понимаю , но блядь, как увижу очередной автосервис с грязью и маслом или же в своем гараже че то делаю с тачкой - да, норм, но блядь это тяжело физически и ОЧЕНЬ ГРЯЗНО. Чет нет желания на постоянку ебаться с этим.
Есть конечно сервисы где все чисто и пиздато, но они не в этой стране. А если в этой то это МСК мажор сервисы для мажоров где все устроены по блату.
>когда будешь уже ебанить на полуавтомате то не будет так тяжко.
Будет, всегда будут новые технологии, фреймворки, прочии говна. Если не в каком-нибудь сранном-легаси проекте работаешь, постоянно надо будет разбираться.
но уже легче разбираться когда много всяких ошибок и ситуаций сожрал и высрал
Ну не знаю чего он так пишет? Вон же переменная каунт сверху есть, разве она не глобальная?
Всмысле, а как мне считать тогда?
Уууууу, лох какой.
Ты хочешь, чтобы у тебя переменная была глобальной и считалась суммарно для всех запусков функции?
Тогда в функции напиши global count
Брали как питон-разраба. Бэк пилю на джанге. С фронтом обещали помочь, в итоге приходится разбираться с жс. Пилю веб-формы в табличном виде с возможностью вносить изменения. Данные тянутся из олап-куба, приходится разбираться в mdx-запросах, приходится агрегации многоуровневые пилить по каждому измерению, и всякие срезы делать. Сама таблица ещё должна быть динамическая, т.е. с сортировкой, фильтрами с возможностью задавать несколько значений, и много ещё чего, лень расписывать.
До этого была похожая задача, но сделал её коряво, ну т.е. часть логики костыльно зашил в js-скрипт на странице, хотя по хорошему это надо делать бэке и через ajax тянуть.
почему сделал коряво? сроки? как вкатился, как тебя взяли если для тебя это не совсем профиль?
платят круто? не так как копать бетон?
До этого занимался аналитикой, etl и автоматизацией на питоне в полушаражке. Вся работа заключалась в достать данные (спарсить, sql/nosql), обрабовать в питоне, куда-то залить/отправить. Всё это пилит скриптами, скрипты хранил в папочках, запускались через планировщик. Кароч всё на отъебись.
На новом месте взяли на испыталовку, соотвественно проект сдал, его отревьювели (наотъебись), в итоге сказали, что дальше работаю. Пришлось разбираться с битбакетом, докером, нжинкс, линтером и т.п.
Платят на уровне дс мидлла, хотя коммерческого опыта разработки у меня именно как питон-разраба не было. Нет куратора, т.е. старшего питон-разраба, я один в команде питонист, но есть старшие разрабы, у которых есть опыт в бэке/фронте, которые типа мне готовы помочь. Но вся помощь заключалась, что вот есть на гитхабе репозиторий, скачай и разбирайся, делай по аналогии и по пеппа8. Хотя проекты там вообще другого плана, и фронт там на реакте, а я не успеваю за месяц и бэк на питоне написать и с реактом разобраться.
Потому что не было норм проектов, либо за всякую хуйню, типа пиления процедурок и пакетов для бэк-офиса или продажников мне не интересно, тем более за 90к.
А тут предложили и питонить + зп охуенную. Ну я и повелся, тем более думал, что меня пидорнут по окончанию испыталова, но хотя бы на пару месяцев накоплю подушку и возьму отпуск. А в итоге взяли, и теперь мне хуево, т.к. команда нормальная, и рук хороший, но работа не нра, делаю чеоез силу и очень медленно, на стендапах приходится привирать, что уже что-то сделано, а в итоге я это делаю ночью или на след утро, либо нахожу тупые отмазы, почему мне нужно еще 1-2 дня.
Через тесты норм. Синиоры могут на одних только юнитах полную бизнес логику написать, без инфраструктуры. Но ты не осилишь.
Если у сойбоя вообще есть компьютер, то там 100% винда. На линуксах деды сидят.
Ноуп, на прыщах сидят красноглазики пердолики.
деды сидят на том, что им всучат.
Я помню работал в комп сервисе, пришел короче парень типа - блядь, винда чет глючит, бсодит. Я погонял день его комп, ниче не бсодило.
Говорю ему - могу переставить виндовс лицензия. тогда 3к стоило а пиратки мы не ставили чтобы не выебали.
Он такой - дорого бля.
Я ему говорю - ну тогда сам поставь или вон блядь скачай линукс бесплатный и поставь. ЕСТЕСТВЕННО ЧТО Я ШУТКАНУЛ.
И что ты думаешь?
Этот хуй пришел на следующий день что игры бля не работают, смотрю а он реально линукс накатил, лол.
В гугле народ только из файлов читает, либо я гуглить не умею
Делаю запрос на api, возвращается json вида
{
"id": "text"
}
Как этот text в консоль вывести?
кстати рили похож был, может его сын внебрачный
Всё, разобрался, всё было элементарно
>До этого занимался аналитикой, etl и автоматизацией на питоне в полушаражке. Вся работа заключалась в достать данные (спарсить, sql/nosql), обрабовать в питоне, куда-то залить/отправить. Всё это пилит скриптами, скрипты хранил в папочках, запускались через планировщик. Кароч всё на отъебись.
Лол, мою сейчас работу описал. Только "фронт" на powerbi. Но это тупиковая хуйня. Думаю учить dwh/какой-нибудь airflow, чтобы потом на должность типа DE перекатываться; либо идти по ветке дата сайентиста. Не знаю что выбрать.
Какие у тебя были знания жс/джанго до этого? Думаешь потом в веб перекатываться?
В модели есть колонка date_creat = db.Column(db.DateTime, default=datetime.utcnow())
Но время при этом получается одинаковое у всех записей с момента старта сервера.
Если при сохранении записи явно пишу date_creat=datetime.utcnow(), то все нормально.
Оно и должно так работать или я что-то не так делаю?
Лол, ну у тебя просто значение текущего времени ставится в дефолт во время прогона этого кода и всё, как если бы ты на часы посмотрел и вручную датувремя вколотил. Какая-то лямбда-хуямбда или sql-функция нужна для этого. Не знаю как в питоне ебаном это делается.
>default=
default вызывается один раз при инициализации. Пиши так
date_creat = db.Column(db.DateTime, default=None):
default = default or datetime.utcnow()
Это будет работать как
if default is None:
____default = datetime.utcnow()
else:
____default = default
Скобки не нужны справа от datetime.utcnow
Просто
db.Column(db.DateTime, default=datetime.utcnow)
Я не из книги, я из руби. Там просто не может быть таких контринтуитивных решений.
Вот это лучшее. Оказывается я вызвал метод, а нужно было его передать без вызова.
>контринтуитивных решений
Что контринтуитивного в том, что в функцию передаются значения? Это же не фп с lazy evaluation. Если хочешь передать функцию, то передавай функцию. Её, правда, ещё вызвать придётся отдельно.
Ты долбоеб прост.
А мне повезло с коллективом и зп ровно на столько, на сколько не повезло с проектом и задачами.
Ебать ты токсичный!
Я работаю слесарем, по кодингу нет вакансий
Сама задача: Выведите на экран все числа в интервале от 1500 до 2700 включительно, которые равны 7 и имеют среди своих множителей число 5.
https://dumpz.org/cn6nf6dEnCAQ - мой высер. Кратность 7 я смог выразить, а вот как найти числа с множителями 5 не могу. Надеюсь на вашу помощь, анончики
>Сама задача: Выведите на экран все числа в интервале от 1500 до 2700 включительно, которые равны 7 и имеют среди своих множителей число 5.
В промежутке от 1500 до 2700 нет чисел равных 7
Задачу скинь нормально
>которые кратны 7 и имеют среди своих множителей число 5
Это одно и то же условие двумяразными словами?
[num for num in range(1500,2700+1) if num % 35 == 0]
Я думаю, тут скорее неочевидность того, что - и sub этодва название одного и того же.
>Это одно и то же условие двумяразными словами?
Мне так тоже сначала показалось, но вроде нет. Кратные числа, это же которые делят число без остатка. То есть x%7==0.
А множитель это просто множитель. Их может быть сколько угодно.
К примеру, x= a b c * 5. В этом, собственно и проблема. Вот почему я и не могу выразить второе условие, а ты, получается написал для кратности 35.
Я не исключаю, что я поехавший. Математику не учил с 10 класса, готовился к егэ по своей гуманитарной параше, вышку по которой уже заканчиваю. Все приходится вспоминать заново. Признаю, технари дали пососать гуманитариям.
>А множитель это просто множитель. Их может быть сколько угодно.
>К примеру, x= a b c * 5. В этом, собственно и проблема
Если 5 является множителем числа в твоей терминологии, то это значит, что число без остатка делится на 5.
Дай нормальную оригинальную формулировку задачи. Это уебанство писать одинаковые термины разными словами.
>К примеру, x= a b c * 5
Разве такое число не разделится без остатка на 5? Получится a ✴ b ✴ c
Допускаю, что это может быть важно, если 5 и 7 были делителями друг друга, нотут они вообще простые.
Да, лучше сразу ебни, потом еще хуже будет.
Да дважды чекни divmod
Короче очень опасный, неуютный, при этом не то чтобы особо выразительный язык, джаваскрипт и то получше. Понимаю теперь почему для всякой руби/петухоно/пхп петушьи Go выглядит как пиздатый и современный язык.
Пиздец вы нежные, могу спокойно писать по ссх в виме, только подсветки синтаксиса достаточно, а тут иде за тебя не напишет и уже обосрался.
Дело не в иде, лол, а в том что нужно ментальную нагрузку в голове держать что какая переменная означает и что тебе могли передать в качестве аргумента. В нормальных языках с правильной системой типов такая проблема даже не стоит и человек просто пишет то что ему нужно корректно и без задней мысли
Покажи на скринах как это выглядит в Питоне и в "нормальных языках". А то не очень понятен твой бугурт.
Джва дня пердоля типы, чтобы просто начать кодировать.
Через первый скрипт базу данных можно наполнить за 6 часов, через второй за 3. Какую часть базы наполнит каждый скрипт за один час?
Никакую, ведь наполнение базы должно быть атомарной операцией и наполнение базы на какую-либо часть не имеет смысла.
А зачем вам неконсистентные данные в базе?
Ок, давай свой ответ на свой вопрос, только ради христа пусть это будет не 1/6 и 1/3, соответственно, иначе я нихуя не понял.
Очень низкая стрессоустойчивость у вас, младой чловек.
Использовать можно только +, -, , *, // и %. int() тоже можно
С if решается в три строчки. Три дня бился, в итоге порешал как на пике, но в лекции указывается, что проблема с округлением в большую сторону решается иначе. На примере белорусской деноминации, берется изначальная сумма и из нее вычитается 1 рубль. Потом проводим деноминацию и прибавляем рубль. Но как применить этот способ в данном случае не понимаю.
>На примере белорусской деноминации, берется изначальная сумма и из нее вычитается 1 рубль. Потом проводим деноминацию и прибавляем рубль. Но как применить этот способ в данном случае не понимаю.
Вычитаешь рулон в метрах, прибавляешь рулон в рулонах.
class Custom(object):
...
class Custom2(Custom):
...
type(Custom) -> <type 'type'>
type(Custom2) -> <type 'type'>
???
Я знаю что это. Это мне не нужно.
На ум приходит только идея со словарем, но это скорее крайняя мера. При помощи pytz костылями получилось преобразовать в MSK+0300, что не очень катит. Наверняка же есть какое-то готовое решение, но я не смог его нагуглить
Суть бота в чём: через инлайн отправляю сообщение кому-нибудь в чат, к сообщению прикреплена кнопка чтобы получить inline_message_id, по нажатию кнопки делается пост-запрос на api который возвращает текст, далее автоматически этот текст заменяет тот что я отправил.
1) Если кто-то один уже отправил сообщение и нажал кнопку, то второй ничего не может делать пока апи не пришлёт ответ первому
2) Если один нажмёт на кнопку второго, то в текст второго придёт замена из последнего запроса первого
Эти вот два момента я не понимаю, вроде есть догадки что по первому пункту надо копать в асинхронность, то во втором полный затык
Чот представил как петрович бегает по цеху и орёт :"ПИДОРЫ КТО ОПЯТЬ МОЁ КНУОПКУ НАЖАЛ?"
Дизайн уровня /b
А без кнопки это принципиально реализовать нельзя, я пытаюсь понять сейчас как делать фильтрацию по user.id
Если тебе просто нужен каждый раз новый результат, ну генерируй какой-нибудь UUID/SID каждый раз ёбана. Если результат персанифицированый нужен, то что-то придётся вкладывать в запрос.
Результат каждый раз новый, бот просто не понимает что с ним работает не один человек
только начал учить циклы
Было бы все так просто. Тут нужны ЧИСЛА, состоящие из четных цифр. То есть 232 четное, но условию не удовлетворяет, в ней находится 3.
бля ну ебана чо ты как хлебушек, вложеный цикл делай
[[m for m in str(n)] for n in range(500)]
Делаешь список из чисел от 100 до 500 потом через цикл прогоняешь по длине элемента если list[0][0] % 2 == 0 то продолжаешь, если нет - то стопаешь внутренний цикл и переходишь к следующему числу (элементу спсика). Если list[0][0] % 2 == 0 и итератор внутреннего цикла равен длине элемента, то аппендишь элемент к списку, который будешь отправлять на вывод.
У тебя тут получается сразу и вложенные списки и вложенные циклы, а ты говоришь, что "только начал учить циклы" лол.
Алсо я сам нубик, может чего напутал, но задачка у тебя выше уровня "только начал учить циклы".
спасибо, но я 10 минут назад узнал, что такое while и for, вложенный цикл слишком сложно для меня, да и задача наверняка подразумевает какое-то простое решение. Не пойму простого решения сейчас, буду сосать еще больше в будущем
Да это все сраные курсы udemy. Половину задач из их домашних заданий я решаю по 1,5 часа потому что их решение состоит в том, о чем в самих лекциях не говорили. Задачу выше вообще дали решать объяснив лишь про while. Про for не было ни слова, я час ебался и честно сидел и искал чего же я не понимаю. Как это вообще можно решить только через while Хорошо, что эти говнокурсы я спиратил. Придется походу яндекс практикум покупать.
За помощь спасибо, я правда половину не понял, но буду сидеть разбираться.
Не подскажешь как ты учишься? Литература или курсы какие?
Решай на Степике лучше. Там и теорию дают и по каждому моменту теории 10 задачек сверху. Могу ссылки дать.
Я по этим курсам иду и прошел не сильно дальше тебя (до функций, дальше как раз вложенные списки и матрицы лул).
Первый пункт починил, остался второй
Синнхроный код, когда идет последовательное выполнение инструкций кода. Ну мы все знаем как это.
Асиннхроный код, когда можно запускать эти все инструкции одновременно, чтобы было быстрей, и не ждать пока закончится одно и начнется другое. Тут если можно уточните плис.
Процесс и потоки, разница там кароче есть. Поток, часть процесса, у них единая оперативная память как я понял. И можно все это запускать асиинхронно.
Не понял вот что. Про параллелизм. Это одно и тоже что и асиннхроность или нет. Ну есть вообщем еще вопросы по этой теме.
Тоже хочу понять.
Как это понимаю я.
Есть хотящий срать питонист. Чтобы ему посрать, напишем простой алгоритм. Например:
1) Сесть на унитаз;
2) Снять трусы;
3) Выдавить какаху;
4) Подтереть попу;
5) Смыть.
Синхронный код всё это будет последовательно, в рамках одного процесса.
Асинхронный код это может сделать так, что садясь на унитаз (1 поток), процесс не будет заблочен им, и соответственно не дожидаясь его полного выполнения, можно начинать снимать трусы (2 поток) и (теоретически) давить какаху (3 поток).
Параллельный код это если бы мы могли этот алгоритм разбить на части, которые могут выполняться в своих процессах и со своей памятью почти одновременно. Ну т.е. теоретически садиться на унитаз и снимать трусы можно параллельно, так же как давить какаху и смывать.
*Что с ссылкой на книжки?
На питоне при асинхронном программировании async/await под asyncio главная сущность это Task. Это аналог потока в многопоточном программировании.
Всё работает в одном процессе, никакой параллельности нет. Причём если в многопотоке параллельности мешает GIL, а вообще она должна бы быть, то в асинхронности и не должна.
Разница между многопоточностью в том, кто переключает потоки-задачи. В многопотоке машина непредсказуемо переключает, в асинхронности только по твоему разрешению.
Это всё про питон. На других платформах свою нюансы.
Есть центральный процессор. У процессора есть задачи. Есть таблица текущих задач. Есть планировщик вызывающий программное прерывание процессора, для переключения с задачи на задачу. В таблице хранится куча данных, нужных чтобы продолжить задачу с места на котором она остановилась. Называется контекст. При переключении контекста в процессор загружается уйма информации. Переключение контекста затратная операция. Но его не избежать потому что процессор вынужден обслуживать тысячи задач попеременно. Так работает вытесняющая многозадачность на процессоре с одним ядром. Но бывает что у мощного процессора достаточно времени чтобы обслуживать одну задачу, которая например читает данные из сети. Если код задачи синхронный - это означает что задача будет крутить команду NOP на процессоре пока ждет ответа от сетевой карты. Это растранжиривание времени процессора во-первых и медленная работа программы во-вторых. Поэтому придумали асинхронные задачи. Вместо того чтобы крутить NOP, задача может выполнить какие-то полезные действия еще. Для этого задачу разделили на две: один код читает из сетевой карты, а другой, например рисует прогресс бар. Сделать эти две задачи как полностью независимые, с разными записями в таблице задач слишком накладно по времени, замедление на переключение контекста может быть большим, чем простой в ожидании ответа. Поскольку эти задачи имеют единый контекст, то придумали механизмы переключения между такими задачами, без переключения контекста. Это так называемые потоки.
Если у тебя много процессорное устройство, то есть возможность запускать задачи параллельно. Но поскольку у тебя нет тысяч процессорных ядер то вытесняющая многозадачность никуда не делась. Распараллеливание задачи - это распределить вычисления по процессорам более равномерно. Асинхронность это не стоять как даун на месте, когда планировщик по таймеру выделил время на твою задачу, а заниматься полезными делами если они есть. Например один из вариантов асинхронности - запустить бесконечный цикл и проверять в нем нет ли событий в очереди на обработку подзадачами.
Все это очень приблизительно и есть куча нюансов
Есть центральный процессор. У процессора есть задачи. Есть таблица текущих задач. Есть планировщик вызывающий программное прерывание процессора, для переключения с задачи на задачу. В таблице хранится куча данных, нужных чтобы продолжить задачу с места на котором она остановилась. Называется контекст. При переключении контекста в процессор загружается уйма информации. Переключение контекста затратная операция. Но его не избежать потому что процессор вынужден обслуживать тысячи задач попеременно. Так работает вытесняющая многозадачность на процессоре с одним ядром. Но бывает что у мощного процессора достаточно времени чтобы обслуживать одну задачу, которая например читает данные из сети. Если код задачи синхронный - это означает что задача будет крутить команду NOP на процессоре пока ждет ответа от сетевой карты. Это растранжиривание времени процессора во-первых и медленная работа программы во-вторых. Поэтому придумали асинхронные задачи. Вместо того чтобы крутить NOP, задача может выполнить какие-то полезные действия еще. Для этого задачу разделили на две: один код читает из сетевой карты, а другой, например рисует прогресс бар. Сделать эти две задачи как полностью независимые, с разными записями в таблице задач слишком накладно по времени, замедление на переключение контекста может быть большим, чем простой в ожидании ответа. Поскольку эти задачи имеют единый контекст, то придумали механизмы переключения между такими задачами, без переключения контекста. Это так называемые потоки.
Если у тебя много процессорное устройство, то есть возможность запускать задачи параллельно. Но поскольку у тебя нет тысяч процессорных ядер то вытесняющая многозадачность никуда не делась. Распараллеливание задачи - это распределить вычисления по процессорам более равномерно. Асинхронность это не стоять как даун на месте, когда планировщик по таймеру выделил время на твою задачу, а заниматься полезными делами если они есть. Например один из вариантов асинхронности - запустить бесконечный цикл и проверять в нем нет ли событий в очереди на обработку подзадачами.
Все это очень приблизительно и есть куча нюансов
>Асинхронный код это может сделать так, что садясь на унитаз (1 поток), процесс не будет заблочен им,
Для понимания асинхронности очень хорошо опыт программирования на nodejs иметь, серверного. На фронте такие вещи не очень актуальны.
Там два способа реализации асинхронности, старый, через callback, и новый, через async/await и промисы по ними.
Коллбэки это такая асинхронность в истинном смысле этого слова. Ты выполняешь код и указываешь фукнцию, которую надо запустить по итогу какой-то операции, а сам продолжаешь работать, не зная результата. Надо довольно сильно перестроить мозги, чтобы вот с этим работать.
async/await это механизм, который позволяет сделать асинхронный код так, чтобы он выглядел как сихнронный. Асинхронное программирование становится похожим на обычное многопоточное, только проще.
Да никакой опыт на ноде не дает понимания асинхронности если в саму библиотеку uv не лезешь. Вот и ты называешь колбаки и асинк-эвейт синтаксис "разными механизмами" асинхронности.
Залезание в библиотеки тебе никакого понимания не даст. Не больше, чем залезание в ассемблер для понимания ООП. Если что, что смотрел то-ли libuv, то-ли libevent и игрался с ними на сях на примитивном уровне. Не думаю, что это моё понимание улучшило.
Механизмы эти принципиально разные для программиста и для возможностей, которые они дают. Ты не можешь просто переложить код async/await на обычные промисы. То, что там в самом движке JS при этом та же библиотека используется ничего не значит. У тебя нет возможности из JS работать с этой библиотекой.
Залезание в ассемблер для ООП не даст (и то даст понимание реализации ооп в реальных языках), а для понимания асинхронности даст, потому что вопрос на прямую касается времени выполнения на процессоре. Прост не надо прятаться за за магическими "вещами в себе". Эвент луп в ноде это не вещь в себе а простая модель асинхронности. Зеленые потоки - другая. В этом и есть понимание
Такое ощущение, что ты прочитал несколько low level статей, и теперь бравируешь этим. Хотя не осознал, зачем это нужно вообще. Но сбиваешь с толку, вот начиная с этого >>05552
>потому что вопрос на прямую касается времени выполнения на процессоре
Причём тут процессор вообще? Когда ты ждёшь данные из сетевой карты, твой процесс не крутит вечный цикл, твой процесс блокируется на системном вызове. Всё. Что там происходит внутри операционной системы и её планировщика это уже другая тема, тебя, как разработчика, она не касается, ты в это никак влезть не можешь вообще и тема асинхронности-многопотока не имеет к этому никакого отношения. ОC в это время будет гонять другие процессы, и всё.
Ты сбиваешь с толку, видимо потому, что сам не осознал.
Ебаный рот этого казино... Ну как не имеет. Был вопрос чем отличается процессы от потоков и чем отличается асинхронность от параллельности. Ты теперь утверждаешь что вопрос больше относится к языкам, а не различием этих понятий на низком уровне? Ты еще утверждаешь что на низком уровне нельзя понять асинхронность?
Был вопрос от человека, который не понимает самой базы. Это значит, что если не игнорировать, надо вот эти базовые идеи объяснять, а не толкать что-то, что отношения к делу не имеет.
Само понятие асинхронность слишком общее, не про реализацию на питоне и не про async/await. Потому что async/await нужны для того, чтобы асинхронная программа выглядела для программиста как синхронная.
Вот пример. Я прихожу в компанию, говорю "я Василий Пупкин, хочу у вас работать, жду ответа". И пока не получу ответ, например "сейчас нам сотрудники вашей квалификации не нужны", не ухожу, сижу в офисе. Это синхронная работа. А асинхронное выполнение, это когда я прихожу, предлагаю пойти к ним работать. Мне говорят "мы вам перезвоним, ждите звонка", и я ухожу домой, делаю свои дела и помню, что мне должны позвонить.
async/await в таком варианте, это когда я ухожу домой, но не занимаюсь другими делами, а сижу перед телефоном и ничего не делаю, потому что жду звонка.
Не правильно. await используется внутри async не просто так. async означает что функция возвращает промис, догадайся почему.
промисы это js
В js на базе промисов async/await сделаны в том смысле, что async функция возвращает промис. Но оператор await не получает промис, он ждёт его разрешения, и вот в этом главная фишка.
Потому что callback асинхронность предполагает, что если ты сделал асинхронных вызов, то ответ ты не получишь НИКОГДА. Нет никакого способа в твоей функции узнать результат. Твоя ветвь исполнения умрёт, не узнав результата. А вот коллбэк будет знать, ты просто можешь объяснить ему, что делать дальше, и он продолжит твоё дело. И это довольно сильно надо мозги извратить, чтобы вот к такому стилю программирования привыкнуть. Тут все эти callback hell возникают.
await оператор качественно меняет картину. Твоя ветвь уже может дождаться результата. Считай, у тебя просто как синхронная программа, похоже на многопоток. На некоторых платформах await ждёт результата из другого потока.
В питоне аналог промисов это Future, но вообще async/await другие, чем в JS. В питоне задачи надо создавать явно, просто await асинхронной функции задачу не создаёт, и асинхронности тоже не создаёт, тут можно больно споткнуться.
Я насколько понимаю, PyCharm смотрит доступные для импорта модули относительно корня проекта, а python - относительно запускаемого скрипта, но можно ли заставить их вести себя одинаково?
>>05875
Ясен хер я в венве работаю и в цмд венв активирую. Я наверное плохо пояснил.
Короче есть следующая структура проекта:
project
core
class_a.py
class_b.py
tests
test_1.py
test_2.py
Тесты импортируют core.class_a.* Если попытаться из cmd из корня проекта запустить pytest (или просто python tests\test_1.py), то будет жалоба на не найденный модуль core; PyCharm же все находит. Вот и вопрос - втф?
А точно на верхнем уровне есть? Или папка прожект у тебя в консоли добавлена в пути поиска?
тобишь .
>А точно на верхнем уровне есть?
точно
>Или папка прожект у тебя в консоли добавлена в пути поиска?
вот это вряд ли делал, можно подробнее?
Прост посмотри в конфигурацию запуска в пичарме сверху справа и в консоле делай так же
Короче, книгу на человеческом языке для dummies, пожалуйста. Не могу освоить язык дальше классов, совсем не вдупляю. Нужно хорошее руководство.
Для таких как я здесь в оп-посте книги и висят, но они хуйня, как и твой высер. Двачеры-дегенераты, пиздец просто.
>Не могу освоить язык дальше классов, совсем не вдупляю.
>Двачеры-дегенераты, пиздец просто.
лалка сасай
Тайные знания древних.
Конечно, давай, удиви меня
Fluent Python.
Только вы должны знать английский и основы питона, чтобы получить от нее удовольствие.
Тоже отметил ее для себя. Она пиздец некст лвл на фоне большинства курсов и прочего.
фреймворки
Дальше классов только практика. Тебе надо на кодворз, рубиться там до посиннения. На одном только 7ку ок 1500 кат, тебе хватит чтобы понять что к чему, чем выше тем и уровень выше, и сложность. Но там надо алги знать и решения не трвиальные, а для прокачки базы может хватить, по крайней мере там типовое вообще все есть, про листы особенно.
Ну и пет проекты. Нужно уже пилить чтот свое.
Я вот рублюсь на кодворзе.
Встал на пет проекте, хз что пилить. Все откладываю джангу и апи, хочу что-то простое запилить с апи, чтобы было по феншую, типо сервис и доступ по апи к нему, как-то так. Еще понять про бизнес логику, про процессинг, про это все, ну типо сервис, обменник, или что-то в этом духе.
И еще встал на процессах, асиннхрости, на вот этом все. А ооп как раз таки далось легче. И тут пишут про понятные учебники. Их нету. Остается только ютуб смотреть до просветления. Уже ни один курс просмотрел по питону.
https://www.youtube.com/watch?v=R4Oz8JUuM4s&t=1198s
Можете задонатить таджику.
mro, метаклассы, датаклассы, тайпинг
Ну вопрос не столько к коду привязан. "Брейкпоинты" идут на всем продолжении теста от сетАпа до обоих тирДаунов. Я грешу на то, что идет слишком долгий сбор, но все равно хуйня какая-то
Ну ты чисто визуально 1.5 секунды от 15 отличаешь? Сколько реально работает?
У тебя какие-то тесты могут идти вне твоих тирдаунов. Может у тебя какой-то ещё набор тестов запускается, которые ты не учитываешь.
Ну ХЗ.
Визуально - есть. Запустил реальный таймер и примерно столкьо же и работает. Я запускаю конкретный тест из набора тестов, кроме него ничего не должно выполняться.
>Запустил реальный таймер и примерно столкьо же и работает.
Но ведь проблема в том, что после класс-тир-даун ничего не должно выполняться.
Всё из тебя клещами надо вытягивать.
У тебя ошибка замера времени. Судя по всему, ты используешь таймеры работы скрипта, которые считают, сколько ЦПУ-секунд съел твой скрипт.
Надо смотреть вот на эту часть. Проблема в том, что они считают только текущий процесс, хотя это норм в данном случае, и считают чисто ЦПУ-время, а не общее, то есть работа в режиме ОС и просто простой не учитываются.
Это примерно как time в линуксе, который показывает тебе три значения, общее время и время работы в пользовательском и системном режимах. pytest тебе общее время показывает, о твой замер процессорное.
Попробуй добавить в печать просто time.time() или time.monotonic(), без разницы особой.
Бля, короче говоря я даун. Кучу времени неучтенного оно применяло миграции - сменил таймер, выключил миграциии - тест начал выполняться быстрее.
Как-то можно через консоль передавать параметр, который будет запускать скрипт в том или ином режиме?
Можно было бы у бездушного гугла спросить.
А вообще argparse
https://docs.python.org/3/library/argparse.html, если делать полноценно.
Можно без argparse совсем примитивно, но не нужно. Делай как надо сразу.
Поясни стоит ли вкатываться в автоматизацию. Бывают ли интересные задачи или это написание шаблонных тестов по кругу? Что с зп? Что в основном юзают uniitest или pytest?
Сегодня будет собес на стажировку, думаю идти или нет если возьмут.
>Поясни стоит ли вкатываться в автоматизацию
Как минимум на минимальном уровне ты эту хуйню знать обязан, юнит-тесты всегда нужны.
>Бывают ли интересные задачи или это написание шаблонных тестов по кругу?
Понятия не имею, не тестировщик. По своему скромному опыту - основные "интересные" задачи были с тестированием с помощью Селениума, там иногда довольно сильно попердолиться приходилось, чтобы нормально заработало.
>Что с зп? Что в основном юзают uniitest или pytest?
Понятия не имею, я прежде всего бекендом занимаюсь. Юнит-тесты нужны только чтобы убрать прослойку из ручного тестирования АПИ.
>Что в основном юзают uniitest или pytest?
Вот с этим просто, unittest уже давно приобрёл статус legacy и полностью вытеснен pytest'ом, остаётся только на каких-то старых проектах.
>>07016
>Юнит-тесты нужны только чтобы убрать прослойку из ручного тестирования АПИ.
pytest можно спокойно использовать для тестирования чего-то внешнего. Как просто питон для этого используют. Я вот когда-то по работе использовал питон, чтобы компилировать и запускать сишные программы, тестируя их вывод - это было давно, и без фреймворков. Но с pytest такую работу можно было бы стройнее и удобнее делать.
Если что учить, то однозначно pytest. Хотя ещё какие-то фреймворки есть, кроме этой пары. Но наверное стандарт сейчас pytest.
https://github.com/dipta-dhar/Automatic-Question-Generator
Функцию main надо импортировать? Или как её использовать вообще? Как аргументы передавать?
>unittest уже давно приобрёл статус legacy и полностью вытеснен pytest'ом
Только тот же Джанго все еще на юнит-тесте, хотя ничего не мешает запускать тесты пайтестом.
>pytest можно спокойно использовать для тестирования чего-то внешнего. Как просто питон для этого используют.
Ну я про конкретно свой случай говорил.
>сли что учить, то однозначно pytest
На самом деле похуй, они не настолько отличаются, чтобы ты не смог после по разному ассерты написать после. Главное чтобы человек понимал принципы.
Какие же тупые долбаебы. Вообще удивляюсь, как ты смог склонировать репу. Хотя может ты копипастил
print(True + True + True - False)
print(True + (False / True))
выведет:
3
1.0
Вот это наркомания. Это во всех языках так?
В большинстве языков так, true-false отображается на int.
Разобрался уже давно без тебя.
Ну и к чему твои возмущения?
Тупо склонируй проект и попробуй это запустить.
Нихуя не выйдет, потому что, ебать, сначало надо перейти в ебучую папку и попробовать вызвать эту функцию, потом доустанавливать кучу либ, которые не указаны, потом править сами эти файлы, потому что автор положил хуй на баги, и так просто оно не запускается.
Ты бы лучше возмущался о криворуких долбоёбах, что выкладывают свои высеры, не снабжая должными комментариями и списком зависимостей, а на пользователей, которые пытаются эту срань запустить.
Сейчас вот дошел до None. А None в памяти компа тоже выглядит как какое-то число, просто нам (питонистам) это знать не надо?
> А None в памяти компа тоже выглядит как какое-то число
Конечно. Всё выглядит как какое-то число.
>просто нам (питонистам) это знать не надо?
Сами решайте, что вам надо и не надо знать. Даже если где-то ответа на твой вопрос нет, всегда есть ультимативный авторитет в виде исходных кодов. Всё, что есть, всё там, и именно так, как оно работает.
Аминь.
>Конечно. Всё выглядит как какое-то число.
Ничего не выглядит как число. Есть только сигналы той или иной модуляции и той или иной амплитуды. Иными словами есть только электроны, которые крутят вентили в транзисторах.
1-й пик выводит надпись с мусором, код:
text= text.encode('utf-16','replace').decode('utf-16','replace')
как полностью убрать лишний мусор?
и как убрать с 2-го пика \xa0 ? replace не помогает
> электроны, которые крутят вентили в транзисторах
Просто так выглядят числа. Закорючки на измельчённых мёртвых деревьях тоже никакой неотъемлемой "численности" в себе не несут, просто мы решили, что это числа, поэтому это числа.
import datetime
import pytz
sampletime = datetime.datetime.now(tz=pytz.timezone('Europe/Moscow'))
print ('UTC{}'.format(sampletime.strftime('%z')))
Так ты что-то не то декодируешь, вот replace и дает мусор. Ищи правильную кодировку.
Алсо \xa0 это  , можешь заменить его на пробелы.
Это точно так и задумывалось?
Можно какой-то комментарий - во первых зачем он настолько жёстко замещает результат функции, а во вторых как это примерно работает? Какое-то очень непоследовательное выполнение кода, оно хранит где-то все finnaly (что логично), и даже при выходе из функции выполняет их и может повлиять на уже передаваемый результат функции? Всё хорошо с тем, что оно влияет на значения переменных, ведь это и есть назначение finnaly, но то что оно замещает результат функции...
Насколько я помню, return это не безусловный выход, он просто сохраняет это значение, потом отрабатывает finally и перезаписывает его, и уже тогда происходит выход из этого участка.
Ну а в целом надо курить dis.dis и исходники вм питоньей.
Да, так задумывалось: https://docs.python.org/3/reference/compound_stmts.html#finally
The return value of a function is determined by the last return statement executed. Since the finally clause always executes, a return statement executed in the finally clause will always be the last one executed.
Код в finally будет выполнен в любом случае - было ли исключение или нет: https://ideone.com/aumSqP
В то же время PEP8 не рекомендует делать return из finally ровно для того, чтобы избежать эффектов, как в твоем примере.
А вроде есть перевод, правда, достаточно топорный: "Python. К вершинам мастерства". Это в том случае, если автор некий Лучано Рамальо.
Вкатился к вам поскольку уже заебался тыкаться не туда
В общем, суть в чем, я довольно неплохо знаю кор питон, структуры данных, скуэльчик и всю базу в целом знаю хорошо
Но я уже несколько месяцев просто не знаю за что взяться
Думал взять фласк, но боюсь, что мне станет скучно дрочить веб
Смотрел в сторону мл, но боюсь, что мой матан на уровне слабенького понимания интерполяции не вывезет
В общем, реквестирую какой то годный пул проектов для начинающих или просто советы в какое направление смотреть
Благодарю
ну там пример мейна есть жи.
Ну типа в середине обернул кусок кода в иф, дальше приходится все руками табить. Наверняка есть хоткей.
И второе, как разом закомментить выделенный текст?
Ctrl+I, как и в других ide?
Какую IDE использовать? Блоки в юпитере странная вещь.
Для прометеуса поставил либу.
registry = CollectorRegistry()
BUCKETS = [1.0, 2.5, 5.0, 10.0, 30.0, float("inf")]
REQUEST_TIME = Histogram('request_processing_seconds', 'Time spent processing request', ['client'], registry=registry, buckets=BUCKETS)
Добавил кастомную метку client
Как к запоросу считающему время добавить метку о времени выполнения?
@REQUEST_TIME.time() # <--- ??
def process_request(t):
____time.sleep(t)
Т.е. у меня несколько внешних сервисов, хочу гистограмму по времени выполнения для каждого сделать, для этого метки
PS Сука, капчу верную вводишь, говорит что не валидна.
# HELP request_processing_seconds Time spent processing request
# TYPE request_processing_seconds histogram
request_processing_seconds_bucket{client="test1", le="1.0"} 3.0
request_processing_seconds_bucket{client="test1", le="2.5"} 3.0
request_processing_seconds_bucket{client="test1", le="5.0"} 3.0
request_processing_seconds_bucket{client="test1", le="10.0"} 3.0
request_processing_seconds_bucket{client="test1", le="30.0"} 3.0
request_processing_seconds_bucket{client="test1", le="+Inf"} 3.0
request_processing_seconds_count {client="test1"} 3.0
request_processing_seconds_sum {client="test1"} 0.827455997467041
request_processing_seconds_bucket{client="qwe", le="1.0"} 3.0
request_processing_seconds_bucket{client="qwe", le="2.5"} 3.0
request_processing_seconds_bucket{client="qwe", le="5.0"} 3.0
request_processing_seconds_bucket{client="qwe", le="10.0"} 3.0
request_processing_seconds_bucket{client="qwe", le="30.0"} 3.0
request_processing_seconds_bucket{client="qwe", le="+Inf"} 3.0
request_processing_seconds_count {client="qwe"} 3.0
request_processing_seconds_sum {client="qwe"} 0.827455997467041
# HELP request_processing_seconds_created Time spent processing request
# TYPE request_processing_seconds_created gauge
request_processing_seconds_created 1.627386151014053e+09
Например, есть класс:
class S1():
--def __init__(
----self,
----x1: Union["PreTrainedModel", "TFPreTrainedModel"],
----x2: PreTrainedTokenizer,
----kwargs
----):
------super().__init__(
------x1=x1,
------x2=x2,
------kwargs,
------)
Как проверить, что x1 и x2 пользователь указал при инициализации класса? Как в случае, если не указал, присвоить им значения по умолчанию внутри класса?
Или его можно использовать, если файла ещё не существует?
def __init__(self, x1=Default1, x2=Default2)
Можешь через альт выделять несколько строк и есть колоночный ввод в пайчарме, зоткей не помню, ищи в настройках
Тоже сначала подумал что веб это хуйня какая-то, потом решил для начала его подрочить, а потом уже за мл взяться и сейчас ахуеваю какие сложные штуки крутятся в вебе и просто балдею от всей этой инженерной движухи
Ну тип цикл такой. А че
Пояснил тебе гуглом защеку, проверяй чмоха
Так вот начал изучать Django, пилю свой сайтик с PostgreSQL -
так просто руку набить (все понятно, все нравиться)
Скажите пожалуйста, не останусь ли я не удел в скором времени, в связи с появлением конструкторов?
Сегодня, например, смотрел конструктор уже от ебаного ТиньковБанка, лол.
Продолжать хуячить web и Djang'у или стоит переключиться на что то другое, в целом интерес интересом, но и перспективы для тоже важны
Повторюсь я кроме книжек и теории пока далек от реальных дел в мире IT, потому и вопрошаю к вам господа..
Machine Learning
это значит ДЛЯ
ты заебал нахуй тебе матан в мл?
там блядь методы как и везде в питоне.
никто не требует с тебя писать свои блядь рукописные методы.
да ты и не сможешь.
для этого надо быть математиком нахуй гениальным.
все известное методы и модели обучения уже давно существуют и записаны в библиотечные методы.
в вебе тем более нет матана, бля ты разъебаешь?
>Скажите пожалуйста, не останусь ли я не удел в скором времени, в связи с появлением конструкторов?
Про конструкторы говорили ещё 20 лет назад, 20 лет назад они появлялись, и... Ничего. На самом деле конструкторы могут решить только какие-то шаблонные задачи. Но всегда есть нешаблонные.
Программирование про сложность взаимосвязей. Чем сложнее то, что ты делаешь, тем удобнее это именно программировать, чем настраивать мышкой в конструкторе.
Опасность в другом, что бизнес уйдёт на готовые платформы-агрегаторы. Вместо того, чтобы делать свой сайт, будут делать страницы в соцсетях или на каких-то агрегаторах вроде Озона. Там возможности примитивные, но там можно делать бизнес, потому что аудитория тоже уходит туда из традиционного интернета.
>Продолжать хуячить web и Djang
Веб это технологии, а не просто сайты. За вебом будущее как за технологией, потому что всё идёт к тому, чтобы делать через веб-интерфейсы.
Django это просто платформа для крудов. Но это хорошая платформа. И это несколько ключевых технологий, то есть умея джанго ты будешь владеть каким-то набором технологий, и сможешь другие вещи осваивать.
>или стоит переключиться на что то другое
На машин лернинг, главный юзкейс гвидобейсика. Но джангисты в своей массе тупые и не осилят.
спасибо бро
да на самом деле что в матане, да и в топологии ничего сложного нет - если ты конечно не решаешь какие то еще нерешенные задачи или доказываешь то, что еще не доказано (у меня образование как раз в околоМЛ сфере,лол, но посля я все забросил)
Когда начал слушать лекции по мл, увидел сплошную математику, ну и решил, что нахер оно мне все это по второму кругу, хотя конечно все это интересно, но уже времени нет. Понятно, что это просто теория которая объясняет, то о чем ты написал
Я писал именно про инженерно сложные штуки, когда у тебя есть сначала один сервер, потом ты выносишь бд на отдельный сервер ибо не хватает ресурсов, потом фронтент веб сервер отдельно, потом появляется несколько бекенд вебсерверов, потом еще отдельный сервер для какой-нибудь отдельной задачи, при этом это все великолепие друг с другом общается, само обновляется, само поднимается и тестируется и главное решает проблемы бизнеса, это тебе не создать класс Классификатор() и не дёрнуть у него метод процесс_дата_фрейм(дата_фрейм)
Если ты джангу учишь ты и не соревнуешься с конструкторами какими-то, у джанги сейчас другая цель и никто шаблонизатором, например, не пользуется почти, потому что сейчас бек это штука которая отдает джейсончик тебе на фронт, а этот джейсончик берется из баз данных, других сервисов и определенной логике, а конструкторы дают возможность писать дефолтные магазины и лендинги, которые ты и не будешь писать на джанге, ибо зачем?
Джанго для крудов. Для того, что ты описываешь, джанго не нужна.
Круды жили и будут жить. SPA архитектура ограничена. Например тебе сложно поддержать ссылки на страницы, SPA тупо индексироваться как надо не будет. А традиционное приложение на джанго будет хорошо индексироваться, ты сможешь ссылаться на страницы, ходить по ссылкам и т.п.
Технологии SPA появились больше 10 лет назад, уже тогда были приложения. Но до сих пор они не вытеснили традиционный веб.
Что ты называешь валидатором json? Pydantic в некотором роде валидатор. Ну то есть из json ты получишь структуру с нужными тебе провалидированными полями.
>у меня были синхронные и асинхронные методы, то мне надо будет дублировать все методы с запросами?
Я бы сказал, что у тебя должна быть синхронная функция, которая занимается валидацией. Эту функцию ты можешь вызывать из какой-то асинхронной задачи.
Смотря что ты подразумеваешь под традиционным вебом, часто сижу на хх и требование шаблонизатора почти нигде нет, джанга хороша тем, что если тебе не нужен го сеньер для 100500рпа, то ты пишешь апишку на дрф хоть тяп ляп и в продакшен, если у тебя наврятли будет даже 10рпа, то тобе не нужны эти асинхронные фреймворки и прочее, а вот как раз писать на джанге традиционный веб мне непонятно зачем, если на рынке есть тонна пхпшников, црмки и конструкторы, в общем все от задачи зависит и не стоит забывать что spa это далеко не единственное чему нужны апи, есть мобильные приложения и другие апи
Ну основы может знать и надо, но учить не нужно, если собираешься работать питон разрабом
>Ну то есть из json ты получишь структуру с нужными тебе провалидированными полями.
Звучит как валидатор. Мне бы хотелось чтобы и запрос и ответ проверялись. То есть создаю инстанс объекта, при создании всем всё проверяется(если оно так работает), потом сериализую в json, отправляю. Ну и с ответом все в обратном порядке. Просто не уверен стоит или оно того.
Парсю сайт с помощью BeautifulSoup и проблема в том, что выдергивается только часть контента, который мне нужен(ссылки). Структура html, классы - все аналогично, но в итоге выводятся только первые десять ссылок и все, хотя на странице их 100.
Из за чего это?
Скорее всего тебе пидантика достаточно. Его именно для таких задач и создавали.
Твоя задача чётко типизировать модель. Ты можешь прописать свои дополнительные валидаторы на поля любой сложности. Ты можешь настривать поведение, что делать со сбойными пакетами. Ты можешь настраивать поведение, как экспортировать поля в json, что делать с Optional полями, которые None, что делать с полями по-умолчанию.
Причём пидантик распарсит и вложенные поля-модели.
В каких-то случаях внешняя валидация тоже может быть полезной, но в целом, думаю, надо в первую очередь на пидантик смотреть.
Посмотри скачанный хтмл, есть ли они там. Или в инспекторе вкладка нетворк, там можно смотреть запросы.
В браузере нажми F12 (Firefox/Chrome точно), там тебе откроется панель, смотри вкладку Network, там ты можешь видеть всю активность, что в какой момент подгрузилось, можешь смотреть заголовки и ответы и т.п.
Я работаю в файрфоксе, там это очень хорошо сделано. В хроме есть тоже, но ничего про хром не скажу.
Есть код, работает через вк_апи.
Прикрутил к нему прокси, и, видимо, из-за нестабильности прокси сервера программа зависает. При этом, таймаут ошибка не вылезает (вк_апи работает через реквестс).
Есть предположения как решить?
на апи этот
логирование прикрутить
Гарри Поттер знал Python что ли?
Сап питонач. Необходимо очень большую строку в файле преобразовать в нечто типа "переменная нейм += кусок данных строки" т.к. необходимо впихнуть эту строку в код.
Сделал скрипт вида:
from pathlib import Path
tex= Path('1.txt').read_text()
print(len(tex))
alltext = str()
for i in range(0, len(tex), 24):
alltext += "Str += \"" + tex[i:i+24] + "\"" + "\r\n"
res = open("res.txt","w")
res.write(alltext)
res.close()
Но при копировании этого в файл res.txt выходит вот такая херня как на пикриле с пропажей одного символа. Что не так с чтением строк в питоне или у меня код полное говнище?
Да вроде должно быть ок. Больше смахивает на ньюлайн в оригинальном файле.
Ты уверен, что у тебя исходный файл не сбойный и там нет переходов на новую строку?
Если присмотреться, у тебя разрыв видимо на отметке 1кб ровно, 42 строки и 16 символов.
Проверь исходный файл.
Рассматривай асинхронный код как две разные программы.
save(self) или сигналы
Просто смотри курсы в х2 скорости
Я и так в процессе чтения оного, пока читал, подумал, что может есть что лучше. Поэтому и задал вопрос выше.
Лучше в каком отношении?
asgi (асинхронный подзалупный сервер который имеет ивент-луп и перебирает асинхронные таски)
wsgi (синхронный подзалупный серв, внутри как правило будет юзать треды что позволяет избегать блокирования на тасках но т.к. это питоновские треды то CPU-bound таски они не ускоряют)
По-моему ,что в си что в питоне как напишешь, так и будет работать. PHP может заточен на ответы клиентам, не знаю.
А языки общего назначения можно как угодно настроить.
Зависит от настроек и кода конкретного сервера.
Здесь определяет то, как настроен сам сервер, у тебя в промежутке что-то стоит, иногда несколько. Например связка nginx + uwsgi/gunicorn, или asgi.
Aiohttp работает напрямую, без asgi, то всё равно ты за nginx его ставишь обычно.
Ты другое имел в виду, я думаю.
Специфика PHP в том, что на каждое подключение создаётся новый процесс, причём именно процесс, а не тред, насколько я помню. Этот процесс отрабатывает результат и прибивается.
В то время как на других платформах обычно один и тот же процесс отрабатывает много соединений подряд, то есть обслужил один запрос, потом следующий, и т.п.
Меня больше не 200 статус смущает, так делают иногда, когда есть варианты альтернативной обработки на стороне фронта.
А текст ошибки. Что нахуй случилось? Как узнать? Хоть бы в логгер написали содержимое exc
Эксепшн отловлен, это штатная ошибка, если бы там всё пизданулось, то было бы 500 или что там ещё.
Это разные сорта ошибок на разных уровнях.
Я просто челик с Большим Агрегатом, которого молодняк про себя зовет Big Daddy
Не выпендривайся особо, а то очко-то твое не долго будет девственным
Если есть какой-то глобальный отлов ошибок есть, то logging.exception будет пустой. Поэтому правильно в явном виде передавать ошибку
python -OO -m py_compile file.py
Но при запуске не создается никакого файла
Вот есть списочное выражение
max_num = [matrix[j] for i in range(rows) for j in range(cols) if matrix[j] > max_num: max_num = matrix[j]]
Вот внутри него можно сделать вложенный цикл. Вот внутри него можно сделать условное выражение if. Но блин - нельзя внутрь списочного выражения засунуть то, что будет выполняться при срабатывании условия. Вот этот max_num = matrix[j] в конце выражения не сработает - это синтаксическая ошибка.
Как быть? Забить и использовать списочные выражения умеренно или есть какой-то хитрый трюк?
>нельзя внутрь списочного выражения засунуть то, что будет выполняться при срабатывании условия
Можно? Его в начале надо писать.
Я не большой знаток питона, но если объяснишь, что ты хочешь получить, я тебе компрехеншн напишу.
>Он хочет стейт сохранять в процессе.
Если так, то нельзя. Я просто по его примеру не смог понять, что он хочет.
Ну да, я хотел чтобы внутри списочного выражения сохранялось и обновлялось max_num по условию. Но по ходу облом.
чел 300 резюме на вакансию, чтобы вкатиться надо сразу уровень мидла осваивать, это полтора года
чел, я писал в одном из тредов, так и не ответили.
у меня есть опыт по жабе, может стоит продолжать жабу ебать?
Я просто дикий депрессняк с нее словил в силу того что там налепили кучу дублирующих стандартов и я в душе не ебу как все это учить и не проебать что-то на собеседовании, питон вроде гаромничнее в этом плане выглядит
сейчас вот открыл лутца к примеру, дохуя воды, просто дохуище, но я 90% текста тупо пролистываю на опыте(и почти уверен что с фреймворками хуёрками тоже самое будет, ибо интуитивно понятно что к чему). Плюс еще жабускрипт знаю на уровне книжки кантора +- (естессно не на уровне нетривиальных задач уровня складывания нескладываемого, ибо уже забыл нюансы), могу в NPM, подргузить модули какие-нибудь оттуда, покопаться с ними через доки и написать какое-нибудь говно через импорты, реакт компоненты +- помню (до редакса так и не дошел), плюс верстку помню. Есть ли у меня шанс получить жоб оффер если я ща питон выучу, джангу и че там вокруг нее? Сократится ли время учитывая бэкграунд?
Производственного опыта не имел, все вышеперечисленные - пет проекты, выдумывание в IDE каких-нибудь задач и т.п.
Хотел добавить, что жабу освоил почти на уровне создания полноценного API с авторизацией. Спринг (местный веб каркас типа джанго походу) + Гибернейт (местный ОРМ), ну и эскюэль знаю на уровне джоинов и подзапросов
ну и че мне никто не отвечает?
я же вроде четко вопрос сформулировал.
Есть ли смысл душить питон имея небольшой бэкграунд, будут ли шансы куда устроится или лучше продолжить ебать джаву?
Ты че тупой на хуй? Джава - тырпрайз. Серьезные дяди, серьезные деньги.
Питон - язык швейцарский нож. И веб, и мл, и дата саенс, и сисадминам и девопсам, и в ботов умеет.
Ты бля чего хочешь то? Я бы на твоем месте Джаву не бросал, потому что она очень денежная.
>Ты бля чего хочешь то?
программистом макакой устроится хоть куда-то. Джаву пока учил, накрыл депрессняк от количества ебаных стандартов. Одних только ОРМ интерпретаций с десяток в одном каркасе, пока учил один, второй забыл уже.
Иди в Джава-тред, спроси на каком проценте, где 0 это Хэлоу ворлд, а 100 это трудоустроенный джун ты находишься.
Если меньше 50 - го к нам. Если больше - не тупи и грызи дальше Джаву. До победного.
А если ровно 50, то Го или Котлин азазазазазазазазаз
Вообщем я делаю игру типа юзеру показывают слово и значение слова а он должен решить правильное ли значение ему показали и нажать 1 если правильно и 2 если неправильно с соответствующим выводом в конце ( Правильный ответ. Неправильный ответ) Подскажите что делать в случае если он ответит неправильно а ответ правильный . Типа он нажимает 1 но это неправильно и поэтому вывод должен быть как 2 понимаете о чем я ? Я че то не могу сообразить никак как это в виде кода представить
> Введение в многопоточное программирование: 36 минут
> Модуль threading: 4 часа 39 минут
> Модуль asyncio: 3 часа 36 минут
Ну типа сначала прослушал курс на 10 часов по питону, а дальше уже в эти тему.
Курс смотрится или для профи на других платформах, кто сел на питон. По тому, сколько времени на какую тему выделено, очень похоже.
Ну либо это полный абсурд, а не курс, потому что для начинающих с небольшим бэкграундом в программировании заведомо не подходит.
if definition == random_choice1:
__if user_input=='1':
____print("Correct answer")
__else:
____print("Incorrect answer")
else:
__if user_input=='2':
____print("Correct answer")
__else:
____print("Incorrect answer")
Тебе нужно брать рандом от keys и потом
if choice == 1 and word != items[random]:
'poshel nahui'
else:
'ok'
Т.е. defintion !=
> def game
Кого играть-то блять?
> 10 строк кода функции в языке программирования высокого уровня, где написанный код должен сам себя объяснять. Хуйня переделывай.
т.е. это не баг а фитча? просто сделать я запрос не могу? нужно вот так вот все циклить, если мне нужно несколько разные страниц обрабатывать?
Если тебе нужно пару страниц, то бери просто requests.
>Почему нужно изъебываться и писать отдельно функцию обработчик
Потому что асинхронные альфачи делают именно так
Омежкам не понять
Ок спасибо огромное попробую
Альфач не может быть асинхронным. Альфач берет то что ему нужно, когда оно ему нужно, а не когда кто-то пообещал выполнить и случайно не наебал.
Альфач асинхронен потому что он ебет сразу десятки и сотни тянок разом, выполняет кучу тасок и усом не ведет, а омежкин ползает на карачках, постоянно блокируясь на I/O и лишь скулит в ответ
Это какой-то кабанчик на коллбеках созвоне, а не альфач. К альфачу тянки сами в очередь выстраиваются.
Не надо спамить на все проекты подряд, если будет низкий рейт по интервью-офферам то вообще словишь саспенд и пиздос.
Надо хорошенько выбрать, вдумчиво написать писулю и ждать.
Реально какой-то бред, я хочу работать, мне насрать где работать, просто возьмите меня.
Я пишу типо такое - i can do this work in one day.
А оказывается за много отзывов еще и бан дадут, слов нет.
Галеры и бодишопы, устраиваешься - они продают твои жопочасы.
Лол, вот да. Почему люди думают, что если они поставят цену ниже рынка, то сразу станут привлекательными?
Для заказчика это сигнал, что вот тут что-то не то, наверное качество донное. Вот ты идёшь в магазин, видишь там сосиски или пельмени по 100 рублей за кг. Не потому, что акция -75%, а просто цена такая. Очевидно, что ты такое покупать не будешь, ты сразу сделаешь вывод о качестве, даже не попробовав.
А с учётом, что рынок сложный, где масса некомпетентности, мошенничества, говнокода и т.п. это очень плохой сигнал.
Я кстати реально знаю случай, когда на работу не взяли чувака, который понравился на собеседовании и всё такое, но запросил слишком маленькую зарплату, половину от ожидаемого.
>Вот ты идёшь в магазин, видишь там сосиски или пельмени по 100 рублей за кг. Не потому, что акция -75%, а просто цена такая. Очевидно, что ты такое покупать не будешь, ты сразу сделаешь вывод о качестве, даже не попробовав.
А это часто делают для распродажи задержавшегося товара: кладут рядом еще дешевле. Умники думают что я буду брать фигню возьму подороже но качественнее.
>>13618
Одно дело зарплаты на фулл-тайме и совсем другое хрюланс.
Там есть совершенно разные заказчики. Есть жлобы, которые за копейку удавятся и там проекты по несколько баксов или дрочение индусов сотнями часов с рейтом в 2-3. Есть наоборт, которые заваливают тебя деньгами на ровном месте. Есть средняковые - сколько скажешь, столько и дадут. Но как-то стремно много просить, лол. Надо это искоренять в себе.
Дело говорит анонче.
На фрилансе главное заявку к заказу расписывать. Сразу писать, что судя по всему у вас проблема с этим и этим, вот это я уже делал, а это представляю как сделать. И бонусом - у вас на сайте еще вот эта проблема, которой в заказе нет, но я могу тоже поправить.
Вы видите копию треда, сохраненную 1 августа 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.