Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Подскажите плз, я чет не допираю, как можно отправить словарь в телеграм боте одним сообщением? Юзаю телебот. Я могу типа для каждого элемента в цикле вызывать отправку сообщения, но тогда будет не одно сообщение.
>>1762623 (OP) Что с tornado? На моей галере половина продукта написано на нем, придется тащить Каковы перспективы tornado в 2020, приятно ли на нем писать и что в нем с асинхронностью?..
>>1762899 Ну сам разработчик FastAPI не любит писькомерство. По сути любой бенч это тот ещё черрипикинг. То что aiohttp без говнокода даёт на клык это факт. То что жанговская ОРМ самая продвинутая тоже факт. То что на Tornado уже меньше и меньше пишут тоже факт.
>>1762966 Дай обниму. Хватит кормить уже инфоцыган. Документация, SO, другие тематические форумы или блоги. Ощущение, что инфоцыгане в продакшен нихуя не выводили. По сути это как аспиранты на кафедрах. Что-то выучили, как-то поняли и стали преподавать
>>1762906 Fastapi удобнее в сотню раз из-за pydantic и зависимостей, но зато в aiohttp есть клиент и тестовый клиент. С последним ещё можно как-то сторонней протухшей либой решить проблему в fastapi, а вот что там из сторонних асинхронных клиентов есть сейчас?
Выше картинка была. Это получается, что торнадо, про который я столько наслышен, держит только 11к запросов в секунду? Нам препод говорил, что нода 1 млн держит в секунду.
Так блин, что-то я не вдуплил, как асинхронка тащит Вот я отправляю некий http запрос и пока он "летит" туда-обратно мне надо еще выполнить какие-то действия, код вроде этого:
result = await send_request() make_calculations() result.process()
попросту же "встанет" на моменте с await, event loop будет искать другие задачи, пока результат с await не выполнится, но тем не менее, пока send_request не вернет что-то, выполнение кода дальше этой строчки не пойдет Я упустил что-то?..
>>1763563 Так оно нужно для io задач. Представь, что у тебя таких запросов тысяча, и они независимы друг от друга. Код будет ждать и дальше await не пойдёт, но у тебя там ждут выполнения ещё 999 таких же, и пока ты ждёшь этот, ты можешь другие отправить. Пока отправляешь другие, прилетит ответ на этот и продолжишь его выполнять. А если ты хочешь ещё что-то считать, пока запрос выполняется, то подход надо менять. Есть future_requests, там запросы вроде в отдельном треде дёргаются, главное только не охуеть там коллбеки писать, если они нужны. И вроде как при системных вызовах снимается блокировка интерпретатора, так что ты сможешь дальше выполнять код, а потом по мере необходимости забрать ответ на свой запрос. В принципе, в asyncio можно аналогичные штуки проворачивать, но нахрен он нужен, если у тебя упор на вычисления, а не на ввод-вывод?
вникаю в async, нужно создать десяток соединений, отправить что-то, получить ответ, оставить корутину с соединением активной, делать свои дела дальше. ответы надо же собрать и обработать в том месте, где они были запущенны.
что-то не соображу, как это сделать. если спавнить таски через gather, результаты же придут только когда корутина завершится. как быть?
>>1763563 >Так блин, что-то я не вдуплил, как асинхронка тащит Ивент луп скачет между корутинами, поэтому они все выполняются параллельно. Считай как потоки на одноядерной машине если утрировать. >event loop будет искать другие задачи, пока результат с await не выполнится Типа того. Await "блокирует" только текущую корутину. >send_request не вернет что-то, выполнение кода дальше этой строчки не пойдет В этой текущей корутине естественно нет, но это нормально.
make_calculations() Тут серьезная ошибка. Ты не имеешь права в асинхронном приложение использовать нечто блокирующее, так как это заблокирует ивент луп и все корутины "встанут". Ты должен через редис/rabbitQM отправить задачу процессу воркеру на выполнение каких-то блокирующих вычислений. В самом асинхронном приложение только I/O. Зразумив?
>>1763748 >Ты не имеешь права в асинхронном приложение использовать нечто блокирующее кек ТЫСКОЗАЛ?
p.s. создается новый тред или пул тредов, декораторы вроде sync_to_async так и делают, но вообще ничего не запрещает вызывать синхронщину внутри асинхронщины
И ты идёшь нахуй. awaitable loop.run_in_executor(executor, func, *args)¶ Arrange for func to be called in the specified executor.
The executor argument should be an concurrent.futures.Executor instance. The default executor is used if executor is None. Стандартно это thread. Засовывает туда блокирующую операцию и погнали.
суть в том, что есть долгоиграющие корутины, которые "через некоторое время" уже готовы дать некоторый результат, который так важен в месте старта этих корутин. ну вот как-то так.
>>1763790 В 3.9 обещали завести нечто адекватное и отказ от предопределения asyncio.get_event_loop(). Если в asyncio.run() добавят методы для перехвата signal и штатного завершения процедур или их отмены если это например цикл без конца будет заебок. Пока предлагают вот это coroutine asyncio.to_thread(func, /, args, kwargs)¶ Asynchronously run function func in a separate thread.
Any args and kwargs supplied for this function are directly passed to func. Also, the current contextvars.Context is propogated, allowing context variables from the event loop thread to be accessed in the separate thread.
Return a coroutine that can be awaited to get the eventual result of func.
>>1763801 >Представьте, вы разрабатываете CLI-инструмент для извлечения размера веб-страницы и хотите поддерживать и синхронный, и асинхронный способы его работы Спс, поорал
Питон может быть альтернативой джавы скрипта? С веб не связывался, в основном работал с vb и C++, а тут надо потыкать веб программирование.
Пытался осилить JS, но каждую секунду мне пригорало. Не знаю по какой причине, но я его блять ненавижу. Разве пикрилейтед может прочесть ЧЕЛОВЕК? В общем, поясните за веб и пригодность питона для этого.
>>1763808 Да хуй его знает. Может оптимизируют на уровне C. Пока все наработки, не заметил конкретики при описании changelog. Да все ещё письмами обмениваются, решают что в какую версию вносить
>>1763815 >веб На фронте альтернатив жс просто нету. Или ты в танке? На бэке юзается. Топовые асинхронные фреймворки вроде FastAPI хуярят на уровне с Нодой. Тут Господа сейчас как раз и базарят за асинхронщину
>>1763817 Хуй знает. Короче это код, который должен создавать иллюзию 3д т.е. пользователь "вращает" объект мышкой, а на самом деле это скрипт выводит обычные картинки в определенной последовательности.
Как здесь https://www.root-solutions.co.uk/product/keyshot-web/ если проскроллить вниз, там есть мотоцикл — его можно покрутить мышкой. В общем, это очень дешевый способ показать 3д с красивым графоном, в отличии от web gl.
В общем делает это все из коробки одна прога для визуализации KeyShot, но мне по многим причинам она неудобна и я написал свою, кроме части, которая реализована на JS.
С этим скриптом работает всё норм, но я хотел во избежание правовых претензий сделать свой скрипт и увидел это нечитабельное говно. Пытался осилить JS, но понять этот текст я не в силах.
Дарова двачане. Собираюсь оформлять вкат в ml. Что скажете по такому набору книжонок. Лутц 1-2; Николенко "Глубокое обучение" или Франсуа Шолле "Глубокое обучение"( Еще не решил); Ну и параллельно матешу подтянуть, хотя итак +- знаю Что скажете, бояре?
>>1763951 Демидович и Численные методы были в печатном виде, но сдуру отдал племяннице. А теперь срочно надо кашу в голове структурировать, ух бомбит теперь. мимопроходил
>>1763563 Плюсую. Вот есть у меня io-вызовы вроде: await asyncio.sleep(4) await asyncio.sleep(3) await asyncio.sleep(2) await asyncio.sleep(1) Я хочу чтоб все они пошли выполняться вместе и чтобы все результаты были готовы через 4 секунды, а вот в этом куске кода результаты вернутся через 4+3+2+1 = 9 секунд, что не есть гуд
Сап, аноны. По образованию прохраммист, по факту студенческие годы пинал хуи и получил минимум знаний. Сейчас работаю аналитиком 1с, хочу выкатится из этого дерьма. Есть вариант перекатится на питон, чем и хочу воспользоватся. Прошел бесплатный курс от яндекс практикума (20 часов), почитал немного книжку "Как устроен питон" и высрал простенькую реализацию игры "Быки и коровы" без логики компьютера, т.е. только попытки игрока угадать число, сгенерированное компом. Пока нет понимания, как писать хорошо, поэтому хотелось бы пресечь говнокод. Если кто-то может указать на ошибки, как писать не надо, как было бы лучше - был бы очень благодарен. Код тут - https://pastebin.com/gqp3ikpM Заметил, что многие пишут цикл с условием в 1 строку - это нормально? Не снижает ли это читаемость кода? Так же, реквестирую книжку, где было бы все максимально подробно расписано. Т.е. не просто: вот есть переменная, ты ей присваиваешь значение, все круто. А подробно, что происходит, когда ты присваиваешь значение переменной ( про объекты, счетчик ссылок, когда это все удаляется, перезапись) и прочее. В "Как устроен питон" хорошо написано, но там только основы.
>>1764478 >next(g) >>> 0 Запускаешь генератор, yield отдает тебе и и ожидает что ты ему что-то передашь >g.send(10) >>> 10 >>> 1 Закидываешь в генератор 10, х становится 10, выводится, цикл уходит на 2й круг и возвращает тебе 1 и т.д.
>>1764494 Блядь, чувак, ну я в дебаггере посмотрел, там по шагам, x становится равным 10 а потом сразу срабатывает yield i и x принимает следующее значение. Этот пример почти дословно из книжки, и там у лутца другой вывод. Ты лучше объясни, как работает генератор. Вот я вызываю next(g) первый раз, функция отрабатывает до первого yield значения, возвращает его, и замирает на следующей строчке кода в ожидании следующего next. В книге, send возвращает значение которое ему передали, плюс сразу следующее из рэнджа. А у меня нихуя не так. Я блядь заебался, уже 2 часа бьюсь об эту хуйню и никак не могу понять.
>>1764498 > В книге, send возвращает значение которое ему передали, плюс сразу следующее из рэнджа. Возвращает только yield, send отправляет 10 в генератор но ты его не выводишь учись смотреть на свой код и искать ошибки в отступах
Обращаюсь к одной кнопке таким образом: driver.find_elements(By.XPATH, '//button')[4] Как мне к ней обратиться в expected_conditions? EC.presence_of_elements_located(By.XPATH, '//button')[4] ^вот так вроде не работает
Люди, которые ставили на сервер что-либо, скажите, как происходит загрузка модулей, например нужен для программы модуль работы с фото, его в папку с проектом засовывают? Или качают на сервере специально пакет, если так, то зачем нужна папка bin и как конкретно в нее устанавливать модули, например, если я уже работаю в виртуальном пространстве
Вопрос по базам данных: Я делаю приложение на Flask - что-то вроде браузерного просмотрщика медиафайлов. Каталоги, в которых лежат файлы я храню в БД, то есть это одна таблица. Каталогам можно назначать типы и категории. То есть это как минимум еще 2 таблицы. Можно назначить любой тип (один), а категорию - только из списка категорий для выбранного типа. И я не могу понять, как настроить связи и ограничения. Можно конечно не ограничивать поля в БД и проверять уже это в коде напрямую, что категория которую мы назначаем находится в допустимом списке, но хочется поканоничнее это реализовать.
Пиздец у меня багет. Ходил на собез на джуна. Ответил на все вопросы по SQL, на сложность алгоритмов, пояснил про питухон. Типы данных, итераторы/генераторы расписал через iter и next, всё как надо; декорирование функций, ООП, логика выполнения кода в ide, как проходит поиск по словарям, хэш функции и прочая хуйня. Ну вообще ответил на всё, что меня спрашивали. Сегодня перезванивают и говорят, мол, НУ МЫ ВООБЩЕТ НЕ ИЩЕМ ДЖУНА ЧЕСТНЫГОВЫРЯ) ДАВАЙ В СЕНТЯБРЕ ОБКАШЛЯЕМ ЕЩЁ РАЗОК ВОПРОСК. Охуенно, спасибо блять.
>>1764526 Да проблема в том, что так уже три месяца. Все говорят, ну да, всё заебись, приходи оформляться, и постоянно то весь отдел кадров уходит в отпуск, то руководитель пропадает, то внезапно появляется внутренний кандидат, то вот очередная хуета. Я вообще не понимаю проблемы, ну если видно что я еблан, ну так откажите сразу, ёбаный в рот. Зачем тянуть резину, заставлять ждать, давать какие-то надежды. Более того, если им не нужны РАБотники, нахуй тогда вообще висит вакансия и зачем меня пригласили на технический собез.
>>1764525 Видимо сегодня этой какой-то ритуал - издеваться над джунами. Начал активно искать работу уже будучи мидлом. Делал тестовое, если ок, брали. Если нет, то нет. Ни разу не спрашивали про всякие алгоритмы, ооп, хэши и т.д.
Помогите пожалуйста, я далек от программирования, но думаю это не очень сложно. У меня есть .txt файл с юрл адресами, в количестве около 1600 штук. Есть второй файл, со всеми юрл адресами сайта, 42к. И есть третий файл, по сути адреса те же, но они уже нихуя не те. программист редиректы не настроил и у нас сайт из индекса выпадать начал Мне нужно: значение из первого файла ищется во втором, если оно находится, то тут же берется эта же строка и ее значение из третьего файла, и все это записывается в отдельный файл, желательно с каким нибудь разделителем.
>>1764601 r не нужон, салага. Но вообще это вопрос на однострочник для перла или авк. Но я пробую отсечь эти решения для более активного переката, лол.
Всем привет. Убрали куэйщиков и меня посадили на пики точенные править сломанные Selenium тесты.
Есть карусель с 4мя элементами-цифрами (см пик), файнд элементс создает лист с этими элементами, но ебаный вебдрайвер их не кликает (почему?) и выкидывает "javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite." Перечитал уже кучу статей на стаковерфло и ничего не помогает. Нужно просто прокликать все элементы в этом списке, коих на данный момент 4. >driver.find_elements_by_class_name('carousel-indicators') for element in video_workshop_carousel_indicators: ActionChains(driver).move_to_element(element).click().perform() sleep(3)
>>1764662 >>1764663 Поищи плагин для браузера для Селениума, там можно записать действия, может так поможет >sleep(3) так лучше не делать бтв, есть специальная хуйня для того, чтобы ждать пока элемент отрисуется на странице
>>1764663 >>1764662 Разобрался. Оказалось, что тот локейтор почему-то не работал, хз почему. В общем заработало после того как поменял локейтор на css_selector. >>1764664 Спасибо, обязательно посмотрю что это.
Продолжаю свою КУЭ транзицию ебана. Нужно написать простой тест для метода пост в этом классе для статус кода и контента. Нельзя напрямую реквестить линк.
import requests
class Blog: def __init__(self, name): self.name = name
Я с реквестами никогда не работал напрямую. Моя идея такая, просто пройтись по методу на ассерт по коду? 200 ОК и тд. А по бади уже через словарь. Это так делается?
>>1764748 >>1764675 В общем запилил такую вот хуиту. Но ничего не работает. Просидел с этим дерьмом уже часа 4. 1. Выдает ошибку, почему-то не импортирует функцию, хотя sample_mock находится в той же папке. Ошибка - File "tests_mock.py", line 16, in <module> from src.sample_mock import posts ImportError: cannot import name 'posts' from 'src.sample_mock' (.../src/sample_mock.py) 2. Само собой говорит, что нет response не определена.
На связи веб-макака, пишущая на flask, aiohttp и любой херне, что потребуется заказчику. Работаю полгода, хотел узнать: а) что нужно для переката в Дата Инженера? Вроде там перспективы по зп и по развитию пизже б) если оставаться по моему направлению, то что стоит учить, чтобы не отстать от рынка и стать более востребованным?
Сап, есть один скрипт, который открывает через селениум открывает браузер, совершает некоторые манипуляции и принтует в консоль всякую информацию. Но я хочу, чтобы на последней строчке всегда отрисовывалась какая-нибудь строка с актуальной информацией, например, сколько окон запущено и сколько времени прошло со старта скрипта. Накидал пикрил для понимания, как это примерно должно выглядеть.
Чем и как можно подобное реализовать? А то я настолько, дебил, что не могу даже в гугле запрос составить правильно
Был в курсе про модуль atexit, который позволяет вызывать функции при завершении программы. Мне надо при завершении моего скрипта выводить некую отладочную информацию на экран, я думал сделать это по типу:
atexit.register( lambda: print( get_info() ) )
Но внезапно я выяснил что если скрипт завершается через ctr+C или инвм сигналом, который его "убивает", то нихера не принтится. А у меня мой скрипт завершается именно так (это бесконечный loop). Че делать?
>>1765124 Читаешь спеку и реализуешь. Я как-то колхозил парсер сервиса на вебсокете на пхп и нашел либу с реализацией что-то в 300-400 строк включая каменты и прочую хуйню. Так что должно быть не особо сложно.
>>1765201 Метод post из класса Blog? Пиздуй азы учить, братюнь. Если метод класса, то и вызываешь его Blog.posts(), если инстанса, то через инстанс: new_blog.posts(). Вы вообще хоть что-то читаете про ООП в питухоне? Там же все тривиально.
Только сейчас заметил.... Ты определил инстанс зачем-то в методе. Полный ахалаймахалай. перенеси в init(). Потом self.test.posts() вызывай. Ты main() где определил? Нигде. И что в данном случае интерпретатор сделает? Правильно, напишет что нет такого метода main(). Ну ебана. Ты хочешь автотесты писать, при этом на выходе говнокод. Убирай нахуй unittest, пиши обычную логику. Как поймёшь что куда дальше уже смотри или пиши свои тесты.
>>1765226 Если у тебя библиотека requests, то status_code нихуя не функция. assert response.status_code == 200. Знаешь что лучше сделай? Пиздуй на github fastapi (загугли блеать) и посмотри как они тесты написали. У тебя полная каша в голове сейчас.
>>1765218 >Метод post из класса Blog? Да. Ок, заработал сам Метод. Спасибо! Сейчас он возвращает мне то, что в этом методе - return response.json(). А как теперь проверить статус код? Ведь внутри этого метода есть response, но как я могу достать переменную response из этого метода?
>>1765242 У любого респонса статус код доступен априори Это свойство любого респонса бля не говоря уже о том, что ты зачем-то заюзал на объекте метод response.json() а потом жалуешься что "не могу достать статус код" иди в /web и латай дыры в знаниях
>>1765245 Бро, все так. Только это не мой код. Мне нужно протестировать этот функционал. Конечно же я бы запилил отдельный метод в классе Блог чисто для респонс код. Но такие условия задачи. >>1765249 Спасибо, но как уже писал выше я не могу достучаться до переменной response из свой тест класса.
Вот что на выходе. Тест test_posts_response не работает и выдает. AttributeError: type object 'Blog' has no attribute 'response'
Есть ли у меня шансы в пограммировании, если функция ниже для меня пиздец как сложна для понимания? Я уже принтами вывел все потоковые значения, понятнее стало на процент. Обычно, если и после этого алгоритм мне не до конца понятен, я рисую блок-схему и разбираюсь. Тут же это в принципе невозможно, и я больше часа сижу туплю над десятком строчек.
def permutel(seq): if not seq: return [seq] else: res = [] for i in range (len (seq) ) : rest = seq[:i] + seq[i+1:] for x in permutel (rest) : res.append(seq[i:i+1] + x) return res
>>1765274 >Есть ли у меня шансы в пограммировании, если функция ниже для меня пиздец как сложна для понимания? У меня 4 год опыта работы, и я понятия не имею, что делает твоя функция. Для нее должен быть написан docstring, а в идеале юнит-тесты. Если этого нет, то запускай дебаггер и смотри что она делает. Блок-схемы бесполезны.
>>1765276 https://ideone.com/CveeBN >>1765280 Это пример из Лутца, я понимаю что она делает, точнее что она возвращает, там это сказано точнее. Перемешивает последовательность, выдавая список из всех возможных вариантов последовательностей с теми же элементами. Делов в том, что я не понимаю как она работает.
>>1765284 Скачай PyCharm, запусти дебаггер и смотри что происходит после выполнения каждой строчки.
Проблема не в том, что ты не умеешь программировать, а в ограниченных возможностях человеческого мозга. Именно поэтому сложные алгоритмы должны иметь хорошую документацию, а в идеале лучше такое вообще не писать, а использовать готовые библиотеки.
>>1765284 >Делов в том, что я не понимаю как она работает. Воспользуйся дебаггером, посмотри что на каждом шагу происходит. если только вкатываешься ясен хуй будет сложно и будешь тупить
>>1765284 Да вроде не очень сложно. Выбираются элементы кроме текущего и рекурсивно прокручиваются, потом в результат добавляется текущий + каждая из этих прокруток.
>>1762623 (OP) Добрый вечер, аноны. Быдло-кодер на связи. Вкатываться в коммерческую разработку не планирую. Программирование не профильное. Пилю небольшие скрипты для себя.
Ситуация следующая: большинство моих потребностей в основном упираются в разбор текстовых файлов html, xml, csv, просто текст в txt, etc. и преобразование их в другой формат.
Т.к. хорошего кода я практически не видел, то все мои манипуляции с текстовиками в итоге пришли к макаронам из del, split, replace и списков из ошметков, повторно проворачиваемых через них.
Делаю так, потому что наглядно, "универсально" и в голове держится минимально необходимая информация. Есть подозрение, что скорее всего заблуждаюсь и существуют дефолтные бест практис, в связи с чем вопросы:
1) Насколько сильно это хреновый подход? 2) Дадут ли регулярки больший профит? И стоит ли лезть в это болото? 3) Как вообще это делать правильно? Можно просто макнуть ебалом в линк.
>>1765303 Да, регулярки это охуенно. Все твои сплиты и прочее можно сделать регулярками (но не нужно), а чтобы повторить довольно несложные регулярки ты сто раз через жопу провернешься. Где вписываются базовые методы - юзаешь их, но без велосипедов. Наверное, баланс приходит с опытом, никто тебе не распишет каждый случай.
>>1765319 Да я уже по-всякому пробовал и с фукнкцией и с методом. в обоих случая ошибка атрибута. Нет респонс. >>1765323 Я получаю эту ошибку при вызове: AttributeError: 'function' object has no attribute 'status_code'
Если вы знаете правильный вариант, подскажите плиз!
>>1765352 Спасибо, друг. Но как я уже сказал, я не могу править исходный класс. Получается что из этого метода, без его изменения Никак нельзя получать статус код? def posts(self): response = requests.get("https://jsonplaceholder.typicode.com/posts")
>>1765363 return response В json уже на месте превращай. Если ситуация не позволяет и код править нельзя, то само по себе наличие json-объект ( if response.json() ) говорит о том, что response_code == 200. Сам подумай. Не веришь - читай спеку: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
как с помощью asyncio сделать пул отложеных задач, причём выполнятся должна только последняя? приходет вызов из коллбака, спавнится ждун А. ждун А заканчивает, спавнится новая задача Х. если во время выполнения ждуна А, пришёл новый вызов спавнится ждун Б, ждун А ничего не делает. после того, как ждун Б закончит, спавнится новая задача Х.
Нужно распарсить лог спортивного матча, т.е. происходят всякие события и они стандартно описаны таймштампом и текстом. Я так понимаю, лучше всего токенизировать и потом разбирать, или можно как-то попроще?
>>1765309 >регулярки это охуенно Понимаю. У них же основная проблема - это читаемость. Поэтому стараюсь не лезть без крайней необходимости.
>баланс приходит с опытом, никто тебе не распишет каждый случай Ну что поделать. Будем набивать с переменным успехом. Спасибо за реплай в любом случае.
>>1762623 (OP) Чики двощ! Я заканчиваю "Автоматизацию рутинных задач", набрал новых крутых учебников, но в них подход недостаточно проектный. Надо больше чужого кода и практических задачек. Вот по Джанго нашёл Django for Beginners by William S. Vincent, очень нравится. А что есть по чистому Питону для того, кто хочет стать интермидиэйт? С английским я ок.
>>1765689 Нет такого подхода. Ну можешь почитать GoF и все. Или посмотреть какие-то части решений.
У меня был опыт сбора данных из БД или по SNMP, парсинг/обработка -> передача в БД/обмен данными через AMQP. О чем попросит тебя заказчик... хуй его знает. Ко всему нельзя быть готовым. Пока ковырял проект были и идеи по управлеию сервисами через собственный вебсервис через pystemd. Так как часто снимали логи через SSH со сторонних устройств , то прикручивал asyncssh. Автоматизировал отчетности. Выгрузка из БД, перевод в excel и рассылка через SMTP библиотеку. Парсил HTML, использовал OpenCV для получения данных из видеопотка с камер. Передавал потом в сторонние системы...
Задачи разные у всех. Кому-то вообще потребуется интеграция с АТС, недавно такие вакансии видел.
При том неважно будешь ты на питоне это писать или на другом языке. Просто если ты не тупой, твоя задача не просто кодить (ты же не мартышка с печатной машинкой), а именно находить решения и реализовывать их.
>>1765715 Ну ты можешь что-то для себя ковырять. Подергать чужие API, посмотреть как люди документации пишут и потом вспоминать это с умилением. Потому что отечественный IT все равно с "душком". Кто-то где-то реализовал хуйню, ее не протестили, потом начинаются костыли и так далее. А ты сидишь как баран и пишешь ебучие заплатки. И молишься чтобы тебя предупредили, когда в проде что-то поменяется. Пойми одно. Есть проект - людей нагоняют и вроде как пишут документацию, потом галера пустеет и остается только полтора землекопа, которые знают наверное 30% о своем продукте. Потом когда надо что-то допилить, снова галера заполняется и так пока не придут к какому-то логическому концу или не выдадут новый бюджет для попила и все нахуй с нуля перепишут. У меня был такой горький опыт.
>>1765766 А ты думал IT в 21 веке это сказочный мир что ли? Тут блять CoC обсуждают, а не развитие инструментов. Запрещают slave/mastery/blacklist/whitelist. А ну и выгорание на проекте в течение полугода, так как если ебашить малой группой, то с переработками и иногда без выходных. Бывало спал по 2 часа в течение 3-х недель.
>>1765776 Я не специалист в компьютер сайенс, но мне кажется, что тебе надо отрастить яйца. Пик релейтед - иногда смотрю на него и вспоминаю, что человек сделан из звёзд, и отчаиваться ему не подобает.
Еще про политкорректность скажу. В Америке если человеку не нравится что-то - он ищет единомышленников. Пишет о себе, проводит встречи, пробивается в медиа и во власть. Негры не хотят терпеть чего-то там - и вот, как видишь, мир меняется, становясь всё более похожим на их мечту. Вместо того, чтобы ныть, ты бы посмотрел на жизнь вокруг и понял, что всё так засрано и бедно, потому что лично ты ничего не делаешь.
Бля, кто-нибудь, добавьте в шапку, что книги по той же Джанге (и по любому фреймворку) это beginner уровень, если хочется осваивать джанго/фласк/торнадо/фастапи - пиздуем изучать доки, шерстить стэковерфлоу и ютубчик. Любая литература по фреймворкам быстро стареет Тут за тред уже 4й или 5й чел просит какие-то книги по Джанге блять кроме "Two Scoops of Django" с его best practises ничего нормального нет, остальное слишком старое
Как заставить какую-то функцию вызываться по интервалу? Например каждые 10 секунд?.. без неэффектитвного (треды будут слишком часто переключаться почем зря) мультитрединга это сделать невозможно?
>>1765793 Не хочу в полемику углубляться. Разработчики не делятся по полу/национальности и расе. Раньше всех все устраивало. Пришли люди с улицы и сказали все переделать. Потом скажут что Julia ущемляет права женщин, а маскот Python является фаллическим символом и ваще патриархальный. И мейнтейнеры будут заниматься полной хернёй вместо решения проблемы с GIL и оптимизацией встроенных библиотек.
>>1765816 Покажи код. Почему мультитрединг не эффективный? Все от задачи зависит.
>>1765801 Ну напишут. Кто-то читает что ли? Тут даже заходят с вопросами, которые разжеваны на SO
>>1765887 return Response(json.dumps({'error':'ID is unknown', 'comment'':'I am calling police'}), status=403, media_type='application/json')
Я так вебсервис писал, ибо нехуй. Если возвращается ошибка, то ее надо обозначать через статус коды. Тогда я делаю контракт (через документацию), что при успешном запросе статус 200, а при неуспешном все от 400. При этом, если статус не 500 и выше, то можно получить тело ответа. ЭТО НОРМА. Я так работал с ИС, которая возвращала всегда 200, даже если ошибка была. Это полный ад. То есть я ОБЯЗАН парсить тело ответа и определять там есть ключ 'error' или нет. Это банально лишние операции и больше ошибок.
>>1765919 Чет ты коляску какую-то пилишь. assertEqual(first, second, msg=None) Test that first and second are equal. If the values do not compare equal, the test will fail. Нахрена ты булевые ввел?
>>1765925 >>1765924 Спасибо. Поправил. Мне подсказали, что мне нужно использовать mock юнит тест. Как уже советовал добрый Анон выше. А еще меня забанили в группе Питонщиков на пару дней. :(
>>1765931 Ну не совсем. Смотри доки >unittest.mock provides a core Mock class removing the need to create a host of stubs throughout your test suite. After performing an action, you can make assertions about which methods / attributes were used and arguments they were called with. You can also specify return values and set needed attributes in the normal way.
У тебя же задача клиента написать для тестов. А вот хер который бэк писал должен был как раз mock использовать.
Вариант 1. Возвращается тело, логика теста, а следовательного всего приложения может продолжаться Вариант 2. Возвращается ошибка. логика теста продолжается, идет обработка кода ошибки.
У тебя уже готовый сервис с данными, которые ты проверяешь. Mock в данном случае не требуется. Тебе просто надо пройти тесты с разными входными данными, которые тебе выдали. Все.
>>1765994 Короче. Объясняю с точки зрения погромиста.
Вот написал я охуенную приложуху, но у меня еще нет ни БД, ни сервиса. Проебывается БД админ например и второй программист ответственный за вебсервис. А я в соответствии с графиком заебашил свою часть, но при этом чтобы реально сказать "я сделал, дальше ебитесь сами" я должен подготовить тесты, в том числе с mock. Т.е. я должен буду описать логику поведения своего говнокода, так чтобы возможные ошибки не повлияли на общую работспособность, когда все соберут воедино. Как-то так.
>>1766003 >Тебе просто надо пройти тесты с разными входными данными, которые тебе выдали. Все. Благодарю! Означает ли это, что при получении экспектед бади я могу сказать, что статус код будет 200?
Алсо. Поясните почему или зачем метод возвращает именно return response.json() метод?
Сап, змеи. Решили с другом на Питоне сделать бота в вк, чтобы он выполнял различные функции. Уже 5 скриптов есть (пикрил) еще будет функция удаления всех диалогов+хотим вынести в отдельное десктоп-приложение. Но нужно наполнение. Подкиньте идей годных.
Вопрос такой - есть картинка, собственно скриншот из фильма. Как получить, к примеру, 7 основных цветов на картинке. В жопе мозге понимаю что взять - посчитать массив цветов и отсортировать. Но вот не пойму с какой стороны подойти. Ткните носом, плз. Чую что через имажмагик, но понять не могу с какой стороны начать
>>1766625 это короч когда ты отдаешь управление зависимостями для твоего кода внешней хуйне(фреймворку). в общем случае такой подход называется inversion of control. внедрение один из способов мутить ioc. еще есть лукап и фабрики. мимо жабамразь
Это когда рантайм твоего языка ломают к хуям через, например, механизм рефлексии или кодогенерации и ебут инкапсуляцию в рот, без скрыто инициализируя приватные поля, оправдывая это программированием через конфигурацию и возможностью легкой замены классов как перчаток.
Анон как мне прогнать pytest над данными лежащими в файлах? Суть такова: есть 1 рабочий конфиг для этого скрипта, хочу прогонять тесты с его использованием, ожидаемый результат собираюсь поддерживать в отдельном файле, синхронизируя по мере обновления конфига. Наговнякал вот такую говнину https://pastebin.com/CHp29rCM Она работает, но выглядит поуродски. Можно ли как то сделать загрузку данных красиво через фикстуры? А не костыли прикрученые сбоку как у меня?
обрабатываю пост запрос в restx и хочу передать args['imageData'] в celery задачу объект файла, как правильно его сериализовывать? либо арет на json is not seriazable или шо рекурсия когда пытаюсь в ручную через pickle декодировать
>>1764341 >Я хочу чтоб все они пошли выполняться вместе и чтобы все результаты были готовы через 4 секунды, а вот в этом куске кода результаты вернутся через 4+3+2+1 = 9 секунд, что не есть гуд
Пистоны, кто-нибудь разбирается в discord.py, нужно сделать бота, который будет отвечать на каждый пост. Желательно, чтобы он еще заходил как обычный пользователь.
>>1764546 Охуенно интересно делать без примеров строк - ты совсем ебобо?
def three_files(): with open("file1") as file1: file2 = open("file2") str2 = file2.readlines() file3 = open("file3") str3 = file3.readlines() result = [] for str1 in file1.readlines(): if str1 in str2: for s3 in str3: if str1 in s3: result.append(str3) return result
Это кривая хуета по идее вернет тебе лист строк из 3 файла.
Маленько начал учить питон - пока всё нравится, прошёл курс на курсере бесплатный от вшэ, лол, порешал задачки на гитхабе для нубов, порешал на codewars, читаю automating boring stuff сейчас и вот всё не даёт мне покоя вопрос:
Нахуя нужны классы? я всё что ни делал пока - писал через функции, прям ну вот не было нужды совсем. В чём плюсы ?
>>1767817 >Нахуя нужны классы? я всё что ни делал пока - писал через функции, прям ну вот не было нужды совсем. В чём плюсы ? Если ты задаешься таким вопросом, значит пока что не нужны. Необходимость в них появится когда твоя программа разрастется до тысяч строк процедурного говнокода. Понимание когда именно использовать классы приходит только с опытом.
>>1767893 Спасибо за совет, бро, но если меня просят привязать карту = идут на хуй )) потому что отвязывать карту ещё потом заебёшься и если забудешь, то спишут ~3К за месяц.
Как запустить питоновского демона на unix? В поваренной книге питона есть рецепт, как запилить демона через os.fork, но вот как оперативно его запускать/останавливать? Это по хорошему надо делать через systemd для единообразия а не питоновсеими командами. Я в линухе пока не особо шарю
>>1767979 Ты ж в курсе, что ты вытащил только одну? И это наводит на дальнейшие размышления: наверняка есть генератор, который позволит за раз отдавать нужное количество объектов, например нам нужно вытаскивать не 2, а 4 точки за раз и проводить над ними одну и ту же операцию
Многие пишут, что обязательно необходимо изучать Python по Марк Лутцу, т.е. "Изучаем Пайтон". Действительно ли так? Или он больше как справочник подходит?
Все волосы на жопе поседели, пока пытался применить один шаблон ко всему проекту в жанге. Всю ночь ебался, пока наконец не додумался перед ссылкой на этот шаблон удалить /. Пиздец просто.
>>1768407 >>1768408 >>1768007 >>1767971 ну я в прошлый раз не зометил шо тебе нужна пара координат глянь ето points = [(1, 2), (3, 4), (5, 6), (7, 8)] def two_points(points): ----g1 = (p for p in points[::2]) ----g2 = (p for p in points[1::2]) ----point = zip(g1, g2) ----return point
https://ideone.com/AW8ICy Такс, я дома, нахер. Накидал подобное. У нас есть генератор, который принимает на вход итератор и integer число, за каждый проход он возвращает именно это (или меньшее, если не хватает) число объектов
Но тут есть свои косяки и непонятки. Во-первых, с фига ли он мне пишет что тот же range не является итератором?? Чтобы все работало его нужно обязательно в iter() обернуть
Думал кстати делать raise StopIteration внутри блока except в надежде что тогда внешний цикл увидит это и прекратится, чтобы обойтись без ебучих флагов, но нихрена - лишь ошибка: RuntimeError: generator raised StopIteration
>>1768491 Также неплохо было бы добавить "дефолтное" значение для "пустых" ячеек. Например при вызове: numbered(iter(range(10)), 4) последний список будет содержать 2 значения а не 4, что может вызвать проблемы при присваивании. Поэтому юзер сам сможет задать свое дефолтное значение по типу: numbered(it=iter(range(8)), n=3, default=None) А так значения можно принимать списком, а можно распаковывать на лету как: for x, y, z in numbered(iter(range(110)), 3)
>>1768491 >>1768494 >>1768502 https://ideone.com/vFZV0D Вот вроде как нормальная доработанная версия. iter напрямую больше нет нужды вызывать, отсутствующие значения тоже заполняются. Можно делать что-то вроде: for u, x, y, z in numbered(range(255), 4, default=0): print(sum((u, y, z)))
хочу сделать бота для бесед (подчеркивание, бесед), но код (мне нужен конкретно его суммон) из гайдов 2017-ого года (ибо новее гайдов нету) устарел. заранее спасибо
>>1768567 ИТТ каждый третий такой "Хочу готовое решение, нихуя не умею, в ангельский не умею, вот". Бич питона. Даже не знаю, где ещё такой идиотизм есть. Видимо только только с питоном, спасибо инфоцыганам. Коллега без знания всего хвастался торговым ботом, который построен на if-else и жаловался, что питон медленный, лол. Все хотят здесь и сразу. Сразу стать миддлом и 150кк в наносекунду. Про архитектуру приложений и паттерны никто и не слышал. Думали тут как на пехе, просто добавь воды говнокод
>>1768570 Анончик, подскажи, я видел многие намекали что if-else типа хуевая структура организации кода, а как реальные пацаны пишут тогда? Во что она эволюционировать должна? Я максимум до чего дорос - тернарный if.
>>1768572 Ну для жангодебила хватит, пиздуй DRF макакой работать или CRUDы дрочить. Через пару лет завезут кривую асинхронки и комбайн снова начнет работать, а потом начнутся очередные бенчмарки без проксирования с черрипикингом, где жанга ПОЧТИ догонит ноду и не совсем Go, мхех
>>1768577 Да хоть свитч сделай (обещали в 3.9, лол. Таки дошло до Гвидо) через dict/enum. Один хуй когда логика более чем "if my_date != date.today(), и состояний объекта может быть на цикл более чем 5 if-else уже нужен рефакторинг, иначе будет спагетти-код, ещё и сам запутаешься. Ты думаешь многие советуют из-за ЧСВ? Просто сами столкнулись в своем/чужом коде с таким. Лучше заранее соломку подстелить. В начале можешь хуячить и так. Правда потом обиднее лезть в старый код, вспоминать какая была первоначальная идея и снова писать тесты. Это реально обидно и времени ещё больше отнимет.
>>1768715 >ООП, SOLID, паттернами и прочим Пощади, ирод Пыхобляди это вообще особый подвид долбоебов. Понагородили в динамически типизированном языке многоэтажных конструкций лишь чтобы выебнуться и заодно доказать самим себе что они почти "белые люди" (джависты). Тот еще цирк
>>1768726 Когда мне кстати кто угодно начинает предъявлять за solid, я сразу же понимаю что это attention whore с двумя извилинами. Это что-то на уровне предъяв за 5ю нормальную форму БД
>>1768727 Ты просто вернул словарь весьма странного содержания вот и все Switch что через словарь что в том же си обеспечивает быстрый доступ к процедуре и порой лучшую читаемость через параметр case. В твоем случае case в любом случае должен быть вычислен до доступа к словарю. И тут внезапно вычислять его таки надо через if. Switch тут бесполезен Хотя в твоем случае ты вообще не туда воюешь. Тебе надо банально решается математически. Вот у тебя есть окружность и 1722 равных по величине сектора. Ты серьезно собрался хуярить 1722 if-а либо 1722 case-а? Вот тут мы и подходим к вопросу, что огромное число if-ов говорит о тупости прогера в первую очередь
>>1768776 Самое очевидное что у меня на уме на жанный момент это разновидность бинарного поиска: берем середину окружности (средний сектор, если быть точнее) и проверяем больше или меньше значение deg, отрезая таким образом половину вариантов. Повторяем по новой пока не получим единственныф сектор Призываются математики, способные решить задачку без циклом лишь на бумаге...
>>1768789 Либо: создаем массив элементов Decimal от 0 до 360 с шагом base = 360 / n (n - число секторов). Все ответы у нас уже в руках то бишь. Ищем index элементов, между которыми попадает deg Но это по-прежнему решение от дауна-прогера. Уверен, математически это будет легче
Двач помогай. Кинули таску для перехода на другую должность. В итоге требуется - С помощью Python разработать программу,которая выполняет следующие действия: 1.Открывает браузер 2.Осуществляет переход на google.com 3.В поисковой строке вводит слово "новости", после чего выполняется поиск по заданному слову 4.На открывшейся странице выполняется переход на раздел "новости" 5.Вывести в терминале заголовок случайной новости в пределах первой страницы
Получилось только сделать первые два пункта. Как дальше работать со страницей в браузере понятия не имею,подскажите как гуглить эту задчку
>>1768808 Поиск по ключу True, что в большинстве случаев бред само по себе Кто это навалял? Чтоб код работал надо при каждом новом значении deg инициализировать новый словарь. If и то профитнее
>>1762623 (OP) Анон, напомни, пожалуйста, как решать следующие задачи. Есть список (например, из 22 элементов), есть окно (например, из 5 элементов, т.е. длина списка не делится нацело на длину окна). Надо окном извлечь все элементы из списка, включая последние два, которые это окно полностью не заполняют. Как это сделать?
>>1768493 Когда ты хочешь, чтобы модуль по разному себя вел, когда ты его импортируешь из другого модуля, и когда ты запускаешь этот модуль как самостоятельную программу. Код в блоке после строчки "if __name__ == '__main__':" будет выполняться только, когда ты запускаешь данный модуль как основную программу, а когда ты импортируешь этот модуль из другого модуля, этот код выполняться не будет
>>1768980 ладно.был не прав. и вправду через селениум делается. но все равно не могу доделать таску. застрял на том,как рандомно вывести заголовок новости в консоль. подскажите хоть как примерно это реализовать? сорян за скрин кода,а не в pastebin
>>1769325 >>1769318 Каждому питонисту в том или ином виде стоит ее прочитать. Но всерьез думать, что это сделает тебя YOBA-разрабом - быть дауном Для более глубокого погружения стоит читать Python Cookbook от Бизли (ебана, уже полгода работаю на галере, но иногда таки возвращаюсь к этой книге, действительно набор годных рецептов есть). А так - начинай потом хуярить доки фреймворков, которые тебе нужны и сразу же параллельно пиши на них свои проекты, учись на практике и не корми инфоцыган
>>1769018>>1769027 Смотри, есть список list = [1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18,19, 20, 21, 22] Мне во время прогона на первой итерации надо получить такое окно/срез [1,2,3,4,5], на второй [6,7,8,9,10], на третьей [11,12,13,14,15] и так далее. Окна не пересакаются.
>>1769368 >>1769363 >>1769370 Так, а если есть отсортированный по возрастанию словарь (у каждого ключа одно значение типа int, но значения могут совпадать) и мне аналогичным образом надо брать условные 5 значений и получать их ключи, потом следующие 5 и т.д.?
>>1769438 С точки зрения производительности Postgres, возможно еще Percona/MariaDB, но вот этот >>1769443 прав. Сразу ORM и тогда никакой ебли с БД не будет. Сразу же создаешь таблицы по сути и определяешь связи.
Кек, пишу тут незамысловатый серверный код как при перезапуске кода эта срань мне выдает:
OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
То есть этот петух сделал app.listen(8888) как я его и просил, но после перезапуска сокет 8888 остался занятым. Че за хрень? Как его "почистить"? (это винда если че)
Хочу заниматься беком. Прошел пару курсов по основам питона, научился во всякие типы данных, классы, функции и прочие основы основ. Думаю что делать дальше, как перейти от консольных программ по типу "посчитай сколько в телефонной книге Ивановых не считая Иван Ивановичей" к чему-то серьезному. Джангу/фласк учить или задрочить стандартную библиотеку чтоб от зубов отскакивало или что еще?
Ананасики, выручайте. Проблема в интегрированном переводе стандартных форм в джанге. Как видете половина текста по-русське, вторая на ангельском. Как чинить?
Есть словарь вида dict1 = {'a' : (1, 2), 'b': (1, 5)...} Надо отфильтровать словарь по определённому условию, например, если первый элемент значений в промежутке от 1 до 10. Пробую: dict2 = {key:val for key, val in dict1.items() if val[0] >=1 and val[0] <=10} Пробую len(dict2), а он мне 0 выдаёт.
>>1769895 а, да, туплю )) Может переберешь просто словарь первый в цикле и через условие прогонишь? Добейся чтобы так работало, потом засунешь уже в такую форму
>>1769902 >>1769896 Если убрать условие, то он возвращает целый словарь, как и надо. Если написать {val[0] for key, val in dict1.items()}, то он возвращает первые элементы. Вроде по отдельности работает, а вместе не очень. >С типами значений словаря все ок? Ключи - str, значения int'ты или float'ы
Есть вот такая функция. Задание, доработать что бы можно было вызывать с ещё одним параметром - кратностью (величиной шага), который по умолчанию будет равен 1. Параметр то добавить я могу... Не понимаю, что от меня вообще хотят. Что эта функция должна делать в конечном итоге?
>>1769914 ну добавь и запихни в range после hight чтоб было range(start,stop,step). Функция выглядит как пустышка абсолютная которая циклит до ручного интерапта.
>>1769914 Откуда задание? Явно из контекста вырвал.
Есть диапазон 0,1,2,3,4,5. Тебя просят просто ввести число из него? Похоже что так. Какой дальше алгоритм знаешь только ты... Потому что... вырвано из контекста
удивительное говно. Меняю текст в файле с переводами django.po, конвертирую его с помощью fmtmsg в djnago.mo и изменения на странице появляются, но при этом как на половину была форма переведена, так и осталось
>>1769968 >>1769969 Спасибо кто отозвался. Эта функция из игры крестики-нолики, она должна принимать номер "поля" (списка из 9 элементов) и возвращать его. Глава про написание своих функция и их взаимодействие. За ней следуют эти задания. При чём тут шаг который по умолчанию равен 1...
>>1769979 Ну в range шаг по умолчанию и так равен 1, я хрен знает что за секретная у тебя такая книга, что ты только куски показываешь. видимо все действия приведут к единому приложению.
lvl 0. знать о docstring, pep8, стандартные либы, особенно всякие collections, asyncio, functools, socket, queue и т.д. lvl 1. ознакомься с попурярными алгоритмами (сортировка и поиск) и структурами данных, как они устроены, поделай свои связанные списки, деревья, но глубоко не залезай, оно тебя сожрет lvl 2. базы данных, postgres, советую задрочить индексы, потренеруйся с сложными запросами, всякими join и прочим lvl 3. сделай 5-10 полноценных проекта на django, django-rest, django-channels, интернет магазин там какой нибудь, https://github.com/Hexlet/ru-test-assignments lvl 4. git, docker, travis и покрыть тестом свой же код pytest,unittest (ради зелененьких бейджов в гите, ы) lvl 5. читаешь "карьера программиста", много вопросов покрывает для собесов lvl 6. пиздуешь по собесам, нарабатываешь скилл прохождения, корректируешь скиллы, решаешь задачки на leetcode
и да, не советую говнокодить в git, проекты тут должны быть как ебаный алмаз, даже самые простые типа ЕБУЧИЙ-ТУДУ. как минимум должно быть внятное README, без всякого говна в репозитории, скрытых папок типа .idea и прочего дерьма. переменные окружения держи в env... короче советов дохуя можно дать, тебе главное нарабатывать свой опыт, наступать на грабли. учится и кодить, кодить и учится.
>>1770018 Более того, я и не собирался её "дорабатывать" для крестиков-ноликов. Первое задание указано безотносительно какой-то игры. Просто доработать функцию. Этой функции можно указать дефолтный параметр step = 1. Я не могу понять, какую задачу такая функция должна выполнять и что они вообще хотят.При чём тут вообще шаг, если функция просто запрашивает аргумент - целое число для переменной response. до тех пор пока он не в заданном диапазоне. При чём тут какой-то шаг!?
Аноны, занимался кто скрапином пикч с помощью Селениума? На сайте все пикчи в блобах, причем просто так их не откроешь, решил копировать URI изображения, а потом пихать обратно из base64 в пикчу, но какого-то хуя оно вместо первого пика выдает второй, если выполнить в браузере тот же ЖС код, который преобразовывает пикчу в б64 - выдаст или первый пик, или его же, но с небольшими краями. Что делаю не так, или как лучше сделать?
>>1770322 Без шуток, если нахуяришь как можно больше хипстерских технологий и оно будет работать, тем охотнее жадный кабанчик пустит тебя приностить ему бабки.
>>1770222 Да пиздец, наворотили хуйни, чтобы просто так сохранить пикчи нельзя было, в итоге ебаная читалка просто шакалила картинки, которые у них же в нормальном качестве. Добавили разрешение пикч - все равно у некоторых шакалит, ууу, сука.
В чем суть реализации чата для двух человек через вебсокеты? Хотелось потренить вебсокеты неважно на каком питон-фреймворке, но че-то не въезжаю как вебсокет ставит коннект между двумя пирами? Коннект же между сервером и клиентом только
>>1770391 Кто послал запрос на соединение, тот и клиент. >>1770506 Так у тебя instance.user - это же модель, не? Может тебе надо указать что-то вроде to=[instance.user.email]?
>>1769970 >>1769829 Проблему решил. Оказывается в джанге кривой русский перевод в стандартных формах аутентификации, хуй знает чем это объяснить. Чтобы починить частичный перевод нужно найти проблемные строки msgid на английском и закопипастить их заново, затем сконвертировать файл с переводом в бинарик с помошью msgfmt -- и вуаля. Надо им ишью зарепортить, охуели блядь.
Для меня тут пару дней назад стало откровением что range не является итератором, а является итерируемым объектом Разница-то сука ключевая (но большинству как и мне скорее всего не придется с этим столкнуться): если создать объект через obj = range(10) то по нему нельзя будет пройтись, вызывая next(obj) - с другими итераторами все работает, например с itertools.cycle
У меня тут немного ебанутая мысль но все же: как замутить структуру по типу словаря, в которой ключ сссылается на другой ключ, либо на None? Очевидно что это можно сделать "в тупую" просто продублировав строки вроде {"key1": "key2", "key2": "key1"} По-другому никак?
>>1762623 (OP) Так, значится... У меня небольшая идея по написанию "чата с незнакомцем": юзер заходит на основную страницу ресурса и коннектится с другим таким же юзером, теперь у них двоих приватный чат, где они могут общаться и даже пересылать фотки хуев, если надо. Это то, что происходит на фронте
На бэке собственно и идет основная работа, то что мне надо написать: сервер принимает ajax-запрос от нового юзера, находит другого такого же юзера, который ожидает, соединяет их при помощи вебсокетов, отправляет каждому из них идентификаторы нужного вебсокета, и чат начинается
А теперь мякота: КАК это намутить? Вот подобие каркаса, который я накидал: https://pastebin.com/ibjYWSZj я выбрал tornado, но это вообще не суть, принцип бизнес-логики везде должен быть один; MainHandler принимает post-запрос в котором лежит рандомно сгенерированная на фронте строка, кладет ее в общий пул waiting и начинает каждые 0.1 секунды вытаскивать из этого пула рандомное значение (гениально, правда? пиздец, если быть точнее, белый человек сделал бы асинхронную очередь и ожидал бы данные через await (учитывая конечно что в пуле будет точно лежать тот самый идентификатор тоже)) когда значение таки подберется, мы помечаем строки-идентификаторы как занятые, убираем их из пула waiting и запиливает вебсокет-соединение: по одному на каждого юзера (то есть юзер отсылает данные на сервер через вебсокет, серв читает сообщение и пересылает его в другой "спаянный" вебсокет второму юзеру, и наоборот)
>>1771327 Также я вот тут писал про ебанутый вид словаря: >>1771018 Он конечно же нужен, чтобы хранить там парные соединения для вебсокетов. Идентификатор1 ссылается на Идентификатор2 и наоборот, каждый из них можно легко найти по нему же как по ключу. Когда удаляется один ключ, удаляется и второй. Чтобы установить идентификаторы достаточно установить лишь один из них как: pool = PairedConnections() pool[idn1] = idn2 Операция pool[idn2] = idn1 выполнится самостоятельно Конечно же надо учитывать, что соединение может быть "в состоянии ожидания" и ссылаться на None. В таком случае пары у нее нет
Вот код основанный на питоновском словаре, судя по тесту в конце вроде работает: https://ideone.com/U9VZ03
Продолжаю писать ебучий скрапер с >>1770198 , столкнулся с тем, что оказывается с недавнего времени развороты на 2 страницы представляются 2 разными изображениями рядом друг с другом, а не одним большим. Какой самый простой способ проверять является ли одно изображение продолжением второго? Единственное что приходит в голову - какая-нибудь простенькая нейронка на каком-нибудь тензорфлоу, но никогда особо этим не занимался.
>>1771340 >Какой самый простой способ проверять является ли одно изображение продолжением второго? Единственное что приходит в голову - какая-нибудь простенькая нейронка на каком-нибудь тензорфлоу, но никогда особо этим не занимался Мне кажется это будет не простая, а ебейщая нейросетище
>>1771340 >Какой самый простой способ проверять является ли одно изображение продолжением второго? Считаешь разницу RGB между соседними пикселями (один пиксель на одном изображении, второй на другом), усредняешь значение для всех пикселей на границе изображений. Если разница небольшая, то изображения являются продолжением друг друга.
>>1771391 Да хуй знает, я для универа простые на тензорфлоу делал, а тут вроде просто классификация изображений, по ним материала дохуя везде, главное обучающую выборку сделать.
Пагни, всем Спасибо за помощь этому посту который заебал всех. Вроде все всех устроило пока. Сделал тупо по mock библиотеке и замокал класс. Тупо, но что хотели, то получили.
>>1771717 Тоесть у тебя всплывает окно операционной системы, в которую ты хочешь ввести символы с помощью инструмента для работы с браузером, я все правильно понимаю?
https://ideone.com/4ANhcl Пацаны, я тут провел исследование насчет дейтвия try/except и if. Если эксепшнов мало, то try/except блок быстрее примерно на 20%, а если же эксепшны вылетают постоянно, то отсос try/except составит в 1200% и более епта. В примере выше for через if выполнился за ~2 секунды, а тот же for через try за 25 с...
>>1771804 да забей это хуйня, если запускаешь скрипт из той же директории то не надо, -м дает возможность исполнить скрипт импортировав как модуль, python zalupa/govno/pizda.py python -m zalupa.govno.pizda вот эти 2 хуйни делают по сути одно и тоже
>>1771838 Не ну в целом то оно конечно понятно, там же внутренности по сути поднимаются, а не просто пару проверок на истиность, но цифры действительно внушительные
>>1762623 (OP) Как перейти к созданию ботов? Я недавно начал изучать питон, какие-то основы понимаю, но вот мне сказали что для ботов нужно учить библиотеку, я открываю нужную библиотеку с описанием модулей типов етц и нихуя не понимаю. Может есть какой-то промежуточный этап?
1 когда нужно вызвать pip и питонов этих в системе не один и так будет гарантия, что будет вызван нужный pip 2 Запустить встроенный модуль. Например зайти куда то и
>>1771397 Анон, я может не так понял, но как именно усреднять значение на границе? Т.е. я вычисляю разницу двух изображений, а на втором просто беру 1 из выбранных сторон и делю каждый пиксель на высоту изображения? Сначала подумал сложить все пиксели, поделить и вывести средний цвет с обоих сторон, но чет хуйня какая-то выходит
Как получить список всех инстанцов класса? При создании класса я даю ему имя второго класса, с которым он должен быть "связан" вроде этого: def __init__(self, name, pair_name=None): ----self.name = name ----self.pair = self.__class__.getinstance(pair_name) # как-то надо достать экземпляр с определенным именем, но как?
>>1772144 >Анон, я может не так понял, но как именно усреднять значение на границе? Допустим, у тебя есть две части изображения, каждая шириной в 1000 пикселей. Из верхней части тебе нужно извлечь нижний ряд пикселей:
row_1= upper_part[-1]
Из нижней, наоборот - верхний ряд пикселей:
row_2 = lower_part[0]
row_1 и row_2 имеют shape (1000, 3), поскольку ширина картинки 1000 пикселей и пиксели записаны в RGB. Дальше просто считаешь разницу между каждым соседним пикселем и усредняешь значение при помощи Numpy:
value = np.abs(row_1 - row_2).mean()
Полученное значение сравниваешь с некоторым порогом. Если больше него, то изображения не являются продолжением друг друга, если меньше - являются. Сам порог можно либо подобрать руками, либо при помощи машинного обучения, что в данном случае очень просто, поскольку можно написать скрипт для создания датасета.
>>1772226 Понятно, значит я примерно правильно понял, просто подумал что надо сравнивать не с каким-то пороговым значением, а со средним значением пикселей на одной из границ. Ну тогда у меня какая-то хуйня немного получается, может быть из-за того, что все пикчи черно-белые. Тестил вот на пикчах отсюда https://mangaplus.shueisha.co.jp/viewer/1007310 Вот код - https://ideone.com/bQZb4O По результатам выходит, что среднее значение у страниц, которые должны быть 1 большой не обязательно является минимальным или максимальным. Так для пикч со ссылке выше получается: 1-2: 63.64, 2-3: 89.55 - должны быть одной страницей, 3-4: 132.97, 4-5: 53.21, 5-6: 45.22, 6-7: 107.68, 7-8: 119.89 8-9: 120.21 - должны быть одной страницей, 9-10: 108.46, 10-11: 65.11, 11-12: 21.20, 12-13: 81.72, 13-14: 82.43, 14-15: 158.41, 15-16: 158.08, 16-17: 82.90, 17-18: 118.89, 18-19: 92.19
Сделал я sum(i for i in range(int(8e9))) чтобы посчитать гипотетическое количество количество соединений, которое получится, если каждый житель Земли установит приватное соединение с каждым другим жителем. Комп пидарюга подвис на хуялион минут. И дело тут не только в Питоне (ну и в нем канешн тоже). Как это задачу решить математически "на бумаге" без циклов? Это реально?
>>1772295 С кодом ты явно перемудрил, и все можно было сделать намного проще. >По результатам выходит, что среднее значение у страниц, которые должны быть 1 большой не обязательно является минимальным или максимальным Скорее всего слишком много шума и мелких деталей. Нужно упрощать картинки. Снизить разрешение, немного размыть, и прогнать через Otsu threshold чтобы остались только два цвета. Что конкретно сработает сразу не скажешь - надо экспериментировать. Я бы для начала поискал, занимался ли кто-нибудь подобной проблемой.
>>1772445 Потому что либо автор еблан, либо ты не умеешь копировать Интерпретатор даже говорит тебе в какой строчке ошибка и как ее пофиксить (только не говори, что не знаешь ангельского...) Ты файл заново не открыл (пытался открыть, но таки не открыл). Прочитай код заново и сравни код посимвольного чтения файла с чтением целиком
>>1772448 Прост на будущее: юзай менеджеры контекста для открытых файлов with open("read_it.txt", "r") as text_file: ----do_stuff() Загугли. И читай логи интерпретатора, он тебе сам расскажет, как фиксить ошибки
Спасибо кто ответил. Я исходил из того, что код в книге не может содержать ошибку, до сих пор не понимаю, как такое возможно. Действительно, проанализировав я понял, что предыдущий кусок кода закрывает файл, а новый его не открывает. Я изменил строку open("read_it.txt", "r", encoding='utf-8') на text_file = open("read_it.txt", "r", encoding='utf-8') Теперь результат такой. На сколько я понимаю, кодек utf-8 по какой-то причине не может что-то декодировать... До этого мог, а теперь нет.
скажите, почему если методу .read передать 1 программа не выводит на экран первую букву? Если передать 2, выводит первую букву, вместо первых двух и т.д. Это типа как индексация, первый символ нулевой?
>>1772553 >Насколько, по-вашему, рынок пресыщен предложением со стороны исполнителей Как ты блять думаешь, если сейчас уже мамашки в декрете питон знают и рвутся в айти?
>>1772590 Видимо, у тебя что-то с файлом, может, кодировка необычная, или что. Он же у тебя напечатал что-то, это тире или точка, посмотри, может это и есть первый символ в твоем файле.
Вечер в хату, Уважаемые господа. Пришел я в этот трудный час с просьбой или за советом . есть проблема. Power bi пик1 выдает карточку с общим количеством секунд по таблице-n . а мне хотелось бы видеть это в днях-часах-минутах . код для перевода из секунд в нужный мне формат я нашел (пик3). и встает вопрос как подружить power bi и скрипт? пик5 код карточки в power bi. желаемый результат пик6. Заранее благодарю за любой ответ
Сап програмач, ньюфаг на связи.Нужна помощь, если можно пожалуйста. Посчитать лимит символов для левой части Если левая часть меньше лимита символов, добавить пробелы Если левая часть больше лимита символов, отобразить первые n символов, где n — лимит символов На следующих строках отобразить всё остальное, но максимум n символов на каждой строчке Суть в том что это доработка программы-магазина которая выдает чек.На пике 1 показан код где нужно внести изменения по заданию, а на втором результат который сейчас.Собственно буду благодарен любым подсказкам как это можно сделать ньюфагу, или чаво можно почитать чтоб понять что делать.
>>1773504 впринципе для обучения пойдет, я коенчно не читал первую половину книги, так как прочитав одну книгу по питону, у остальных можешь половину скипать, так как там азы все время пишут но я видел проэкт с игрой из этой книги и он написан просто ужасно, такое чувство что автор не питонист, а какой то джавист в смеси с еще какой то функциональной хуйней, а вот с автоматизацией мне понравилась книжка, правда первую половину я опять же не читал, а вторая начинается с регулярочек, который при первом знакомстве могут показаться той еще ебалой, лутц это конечно пиздец рофлан поминки тем кто решился его читать, основная идея книги это повторение мать учения видимо, впринципе очень подробно, но пиздец как скучно
>>1773545 Первую часть про совсем язы я тоже пропущу, наверно. Я не программист, но приходилось делать всякие штуки типа парсера текстовых файлов/xml/выгрузка данных из бд когда я загуглил как сделать мне нужное на оракле, то просто охуел и не встал, оказалось проще написать скрипт на коленке 50 строк со сторонней библиотекой. В том числе и на том же питоне. Короче всякие такие одноразовые дрочилки, которые были нужны по работе. Но все, что я делал, было без понимания. Тупо копипаст со стаковерфлоу и прочих готовых примеров. Есть у меня желание в будущем, если получится, пойти по карьере программиста. Если не получится, то хоть для себя поучу, чтобы эффективнее решать свои мелкие задачи.
По поводу регулярок - я давно себе зарубил на носу, что если решил какую-то проблему решать регулярками, то у тебя уже две проблемы. Стараюсь их не использовать, если нет острой нужды. Мне читабельность и реюзабельность важнее, чем скорость и меньший объем кода. Даже с онлайн-тулзами отладка этой шняги у меня частенько занимала непозволительно много времени.
>>1773561 Я не твой собеседник, но хочу заметить что раньше тоже блевал от регулярок, но потом открыл для себя онлайн тестеры вроде https://regex101.com/ и re.VERBOSE, блять, я хз как вообще люди живут без этой штуки - это просто О-ХУ-ЕН-НО упрощает понимание регулярок и что важнее - читабельность кода.