Это копия, сохраненная 10 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1911533 (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
Есть простенькая программа с закрытым исходным кодом,необходимо было создать интерфейс.
Написал с помощью Tkinter'a в формы вводятся данные, при нажатии на кнопку - вызов функции где с помощью библиотеки subprocess из интефейса в простенькую программу передаются данные,она выполняется и теперь необходим вывод на интерфейс, но он зависает и все, при простом выполнении после запуска требует еще одно нажатие на Enter. Вот код
import subprocess
proc = subprocess.Popen(['MODN1'],universal_newlines=True,stdin = subprocess.PIPE,stdout = subprocess.PIPE)
proc.communicate(input = " 1 2 3")
print(proc.communicate())
proc.kill()
Сап
Подскажите есть ли универсальные гайды по работе с дейтой любой?
Допустим у нас есть пара столбов (или колонок) числовых данных. Что можно с ними сделать использую питон, пандус и прочие библиотеки. Мне на ум приходит только корреляция каждого из столбов друг с другом.
Как развиваться не зависимо от работки, писать пет проекты, а кто мне скажет где хуйню творю? Книжечки какое-то, но то что открывал - тупо синтаксис и пояснение, что уже знаю. Начал чёт django колупать, но не уверен, что его стоит, мб flask? Крч да, запутался памагите
Интересны автоматизация всякая, хотел устроиться до этой компании туда где занимаются умными домами, автоматизацией всего и всё, но не взяли. Тут торговых роботов пилю.
Для всяких нейроночек и биг даты, проблема в вышке, забил на неё хуй, как закончил 11 классов и ушёл в шарагу, не профильную.
Backend вот пытаюсь с джангой подружиться.
Развиваться куда, я вообще хз, вроде всё интересно
Хочу те скилы, что подороже продать можно
Вот дают мне задачу, я понимаю как решить её, делаю, чёт понимаю, что не знаю сделать - гуглю. Всё, не понимаю куда расти и что делать, чтоб с голой жопой не остаться
Меньше года, почти сразу фрилансом занялся. До этого c++,c#, delphi. В программирование варюсь уже лет 6-7. Типо ситуация в том что везде я на уровне по рофлу пописать что-то был, а тут уже серьёзно начал подходить.
А что?
Почему именно сейчас засерьезнел? я просто спросил, думал ты вкатывался с нуля, челик.
Пишу парсер логов модуля компании. Там описана обработка каждого файла, с которым работает система: размер, направление, источник, метаданные, всякие признаки ошибок и т.д.
Структура у него очень логичная, везде идентификаторы насыпаны, словом, все ок.
Написал код.
1. Объявил класс файла, закинул в него все атрибуты, которые будут полезны.
2. Написал функцию построчной обработки лога:
>если вижу начало передачи файла, создаю новый экземпляр и сую его в лист
Далее в логе я могу встретить дополнительные сообщения, которые содержат атрибуты к этому файлу, типа источника, направления и т.д.
>если вижу какое-то сообщение, которое не является началом, прежде чем создать не совсем полный атрибутами объект, я делаю лукап в листе, есть ли там уже объект с таким идентификатором
>Если есть, то добавляю в него, если нет, то создаю новый экземпляр, который потом, может быть, наполню ещё свойствами
Проблема в том, что это все ОЧЕНЬ МЕДЛЕННО РАБОТАЕТ
В среднем лог за час содержит 300к записей, а мне, как правило, нужно посмотреть статистику за весь день, 24*300k=7.2 ляма
За это время программа обработает примерно 450к файлов, значит, в какой-то момент очередная строка будет заставлять Питон делать лукап из 450к идентификаторов в листе. Это, как я понимаю, и ужасно стопорит сам модуль. Собственно, потому и тормозит:
for k in file_list:
if k.ident==sample_string.split(' ')[5].strip():
k.govno=sample_string.split(' ')[20].strip()
continue
ЧЯДНТ? Как можно иначе сделать всю эту историю?
?? Вместо объектов писать словари?
Но это тупо немного, нет? Хоть и быстро
?? Сделать словарь вида {key:object}?
Но тогда идентификатор придумать — задача нетривиальная, потому что они не все уникальны, скорее некая комбинация будет уникальной, которую в логе ещё надо найти.
?? Шото ещё?
Пишу парсер логов модуля компании. Там описана обработка каждого файла, с которым работает система: размер, направление, источник, метаданные, всякие признаки ошибок и т.д.
Структура у него очень логичная, везде идентификаторы насыпаны, словом, все ок.
Написал код.
1. Объявил класс файла, закинул в него все атрибуты, которые будут полезны.
2. Написал функцию построчной обработки лога:
>если вижу начало передачи файла, создаю новый экземпляр и сую его в лист
Далее в логе я могу встретить дополнительные сообщения, которые содержат атрибуты к этому файлу, типа источника, направления и т.д.
>если вижу какое-то сообщение, которое не является началом, прежде чем создать не совсем полный атрибутами объект, я делаю лукап в листе, есть ли там уже объект с таким идентификатором
>Если есть, то добавляю в него, если нет, то создаю новый экземпляр, который потом, может быть, наполню ещё свойствами
Проблема в том, что это все ОЧЕНЬ МЕДЛЕННО РАБОТАЕТ
В среднем лог за час содержит 300к записей, а мне, как правило, нужно посмотреть статистику за весь день, 24*300k=7.2 ляма
За это время программа обработает примерно 450к файлов, значит, в какой-то момент очередная строка будет заставлять Питон делать лукап из 450к идентификаторов в листе. Это, как я понимаю, и ужасно стопорит сам модуль. Собственно, потому и тормозит:
for k in file_list:
if k.ident==sample_string.split(' ')[5].strip():
k.govno=sample_string.split(' ')[20].strip()
continue
ЧЯДНТ? Как можно иначе сделать всю эту историю?
?? Вместо объектов писать словари?
Но это тупо немного, нет? Хоть и быстро
?? Сделать словарь вида {key:object}?
Но тогда идентификатор придумать — задача нетривиальная, потому что они не все уникальны, скорее некая комбинация будет уникальной, которую в логе ещё надо найти.
?? Шото ещё?
Я так и не понял че ты хочешь? Медленно или память жрет?
Школу закончил, не поступил в норм вуз, подумал ну хули делать, пойду в шарагу, буду работать. До этого всякие проектики брал, в конце августа на поток поставил, отложил деняк, переехал с деревни в ДС2. В целом доволен вполне таким выбором, но угнетает факт того что я не знаю куда расти сейчас.
Былоб проще если, я не вдуплял какую-нибудь многопоточность, асинхронность, взял да и прочёл книжечку, статейки. А так я вроде и знаю достаточно, могу применить, но очково что нет прогресса и рыночек меня порешает
Ну не книжки для сеньёров мне читать, про то как строить архитектуры всякие крутые...
ну ты же как то отличаешь старый файл от новых? Почему не можешь это отличие взять за ключ?
У меня есть словарь состоящий из uid : {словарь2}
Как мне достать значение по ключу из словаря2 в html страничке?
Вот так почему то не работает:
https://pastebin.com/Mahmdmhq
Помогите плиз нагуглить не могу
Причем, если я просто {{ property}} вывожу то оно работает
[2021-04-27 14:40:43.234] [000000000456] Новый файл с именем {путь} добавлен в обработку
[2021-04-27 14:40:43.235] [000000248909] Обработка файла {путь} закончена с err=unresolved_header
[2021-04-27 14:40:43.235] [000000000456] Создан файл-дескриптор для файла {путь} с параметром isRemote=1 и isLocal=1
[2021-04-27 14:40:43.235] [000000000456] Для файла с именем {путь} создан звуковой поток
[2021-04-27 14:40:43.237] [000078939023] Завершаем приём звукового потока для файла {путь}
и так далее
В каждой строке идёт новая дополнительная информация, при этом {путь} не обязан быть уникальным, уникальная только связка {путь} и [число], которое, однако(число), сбрасывается после перезапуска модуля
Ну тогда ты какую-то хуйню делаешь с объектами и листами.
Создаешь словарь и ключами эти айдишки, значением структуры с нужными данными, всё. По событию закрытия файла удаляешь этот ключ из словаря.
на каждую строку, если это не Новый файл с именем {путь} добавлен в обработку, у меня происходит лукап из существующих файлов, есть ли там уже объект с path={путь} и path.id=[число]
>>23749
По-разному. Может работать месяц, могут за сутки перезапустить 50 раз.
Я перезапуск отслеживаю и на этом моменте пакую все файлы, что есть, в другой лист как подлист, а рабочий лист стираю
stack_list.append(working_list.copy())
del working_list[:]
И по новой ебашу в воркинг лист, как раз из-за неуникальности айдишников
>>23749
Мне не нужно удалять ключи, мне наоборот нужно сохранить всё, что я нашел, чтобы потом писать статистику, типа, обработано 100к файлов, из них с ошибками 159, при этом в направлении x было 23к, в направлении y было 30к и т.д.
бля тогда я привел плохой пример. допустим мне надо достать proprety['name'], proprety['date']. Как мне это сделать из кода сейчас?
При обработке я могу попасть в лог, в котором нет записи Новый файл с именем создан, потому что, например, эта запись в логе за предыдущий час
Тогда я не смогу засунуть путь как айдишник
Поэтому я и выбрал объекты, чтобы туда херачить инфу по мере поступления
Ну так если ты их подряд молотишь, то всё будет.
Может надо будет сделать ещё дополнительный словарь для маппинга путь-айди, раз они меняются.
Нет, это не гарантировано
Если я смотрю все логи за сегодня, а новый файл прилетел в 23:59 вчера?
Вообще, я имел в виду эти цифровые айдишки.
Но если оно решабально твоим способом, то и на словари можно перекатить, мне лень вникать детально.
Я почитал, у меня вариантов мало
Либо я делаю ndarray вместо листа, либо я переделываю в терминах словаря, с тем же механизмом отслеживания остановки, когда все сбрасывается.
Скорее всего я буду делать в терминах словарей
Но тогда такой вопрос
У меня в объекте прописано много методов, ну, типа, duration(), который возвращает разницу между временем первого и последнего события.
В словарях, понятно, методов не сделаешь. Мне останется только писать функцию вместо методов, верно?
Попробуй для начала сделать словарь объектов, этого вполне может быть достаточно.
>Допустим у нас есть пара столбов (или колонок) числовых данных. Что можно с ними сделать использую питон, пандус и прочие библиотеки.
Да все что угодно, буквально бесконечное множество вариантов. У тебя какой-то слишком размытый вопрос. Типа, у меня есть два числа, что я с ними могу сделать в питоне, или у меня есть древесина, что я могу сделать с ней с помощью топора. Тут нужна конкретика.
>Подскажите есть ли универсальные гайды по работе с дейтой любой?
Видимо, нет. Если хочешь знать на что способны конкретные библиотеки, читай документацию к ним, там есть описание функций, примеры использования, сборники "лучших практик" (best practices) и "сборники рецептов" (cookbook), и так далее. Если хочется обращаться с данными, ну и изучай датасаенс и машинное обучение, начни с линейной алгебры, тервера, мат статистики, и тому подобного.
>За это время программа обработает примерно 450к файлов, значит, в какой-то момент очередная строка будет заставлять Питон делать лукап из 450к идентификаторов в листе.
Всё верно. Используй корректные структуры данных, а именно храни элементы для поиска не в списках, а в словарях. По ним поиск очень быстрый.
>Вместо объектов писать словари?
>Но это тупо немного, нет?
Тупо использовать списки
Ровным счётом никакой разницы. Вместо того, чтобы вычищать рабочий список, ты можешь вычищать рабочий словарь и держарь коллекцию словарей, для каждого перезапуска системы свой словарь. У тебя нигде не используется специфика списков, чтобы на них нужно было завязываться.
Причём полученные словари ты можешь дампить в JSON и сохранять на диск, потом очень быстро искать уже в них, если потребуется.
>В словарях, понятно, методов не сделаешь.
В списках методы тоже не сделаешь.
Ты можешь сделать объект, в котором будет переменная storage = dict(), а метод duration уже будет обращаться к этому словарю.
к сожалению не работает. Наверное потому что там ключ это string id, а не тип
А что на фрилансе? слабые проекты?
Алсо чем плохи книжки для сеньоров? на крутую работу не берут тупо из за отсутствия вышки? ебать адок.
ЭТО ВООБЩЕ НОРМАЛЬНО?
вроде не особо налегаю, учу по три часика в день, а то и меньше. Что это такое?
Прикол фриланса, то что не стабильно, была неделя когда вообще ноль заказов было сидел лапу сосал. Зато постоянно разные проекты, тупо нельзя брать только то что уже делал когда-то, т.е по кд развитие.
Ну вот всякие бигдаты и нейроночки, указана всегда вышка. Может из-за неё не брали, может потому что опыта не было(фрилансеры - не люди для hr).
А книжки для сеньёров, вот тут хз что читать
Это я знаю и использую. Я к тому, что мог случайно в дефолтный питон поставить дополнительные модули. Вот ищу способ сравнить состав модулей стандартной поставки и своей локальной.
кстати эти команды разные на всех системах.
чтобы на 10 винде активировать я заебался гуглить, информации мизер
Хуйню сморозил, брать то можно, но не часто такое попадается, что вот мне нужна штука Н, а потом следующий чел мне нужна штука как Н, но чуть другая. Исключение, если один и тот-же тип заказывает. Крч, не сидишь на месте, по кд чтот делаешь
А если не постоянной занятостью, а на фрилансе. По-русски говоря колымить время от времени. Стоит ли вообще вкатываться?
gevent-socketio https://github .com/abourget/gevent-socketio?
>>24261
Крч, про фриланс, с биржами у меня не вышло. За все 8 месяцев 1 заказ от туда, труд там не очень ценят, с забугорными лучше, но английский мой ис вери бэд.
Искал на всяких форумах, через знакомых(несколько раз на хакатоны ездил, по этому можно было поспрашивать). Потом много кто приходить второй, третий раз.
А стоит или нет, ну мне не особо понравилось, постоянно, вот заканчиваешь делать заказ - ищи другой, а если нет их сидишь и ждёшь. Чтоб на пожить хватало(снять кв, покушать, погулять) для ДС2 работать нужно часов по 6-8, но иногда бывают завалы что спишь хуй да нихуя недельку, но вознаграждается это тем что некст неделю можно поменьше работать. Думаю, если побольше опыта, связей или умений себя продавать можно или больше зарабатывать или больше хуи пинать.
На постоянке прикольно, если на удалёнку устроился(офис не пробовал, но думаю менее круто), работаю с меньшем напрягом, но возник вот такой прикол у меня. По деньгам не потерял ничего, сколько на фрилансе получал, столько же тут получаю на испыталовке(ласт месяц остался). Плюс ещё часика 2 в день трачу на фриланс и уже +5-10 в месяц
Энивей, если ты вкатываешься только из-за фриланса, то думаю стоит не рассчитывать, если ты уже вкатываешься и чувствуешь уже какую-то силу, то попробуй взять какой-то заказик, только предоплату не бери, ну не сможешь сделать, ну да ладно, сможешь, так и опыт и денюжку получишь.
Да, чёт я написал как-то сумбурно, одна мысль перебивает другую, ну да похуй, не книга же
простите двачане за плохой слог
Знакомый ищет на удаленку на фуллтайм, 30 часов в неделю (наверное можно больше, если хочется), 40-56$/час, CV не надо - найм по литкоду и тестовому заданию на около 2 часа.
tg @doctor_pizza
Есть задача, сделать кастомною рассылку мейлов. Всякие mailchimp не подходят.
Делаю все на питоне. Удобно, быстро, кайф.
Но вот встал один вопрос, сам мейл. Немного почитал, что рассылка - это НЕ обычный html, как для верстки сайта ибо там нет стандартов и тд.
Все надо делать через таблицы и прописывать иначе весь контент.
Сталкивался ли кто-то с созданием такого и есть ли где-то ультимативный гайд как все лучше сделать? Ибо как понимаю, на одной почте будут стили работать, а на другой - пиши все от руки и в тагах, юнец.
Понимаю, что это не питон, но может у кого был опыт.
Я не пробовал, могу судить по кол-ву вакансий. В родной деревне(300к чел), по 1-ой вакансии 1с, пхп и java. В областном центре получше, можно и питонистом junior на 40-50к устроится(кв в центре12-20к) , мидлом уже приемлемые 120к, но всего штуки 3 компании, но думаю будет проще вкатиться т.к мало народу, выпускники вузов - хуета, которая не хочет вдуплять сама, а те кто могут, не хотят оставаться там
Это просто цитата откуда-то, не принимай близко к сердцу
Коллеги, как ебаной веб-макаке, возомнившей, что она может стать чем-то большим качать алгоритмику?
Т.е. вижу я задау на алгоритмику и всераюсь. Там, где нужна теория языка, и даже зачастую его С-имплементации, я отвечаю без особых проблем, но вот алгоритмы и классические структуры данных...
Как качать алгоритмы эффективно?
Ну, намедни дристанул, хотя знал, лол, как интернал устроена хеш-таблица.
Но основная проблема - это алгоритмы вообще. Т.е. сперва сидеть и читать книженку с описанием классических алгоритмов, а потом хуярить практику на кодварсе?
Ну, например "напишите валидатор строк, содержащих \"json\" (\"{[[]}\")". Вот откуда мне без базу знать, что тут нужно стек юзать? Как такое прокачать быстренько?
> Вот откуда мне без базу знать, что тут нужно стек юзать? Как такое прокачать быстренько?
А откуда это "знал" тот, кто написал книжку по алгоритам? В какой книге он это прочитал?
Не обязательно писать алгоритмы строго по книжкам - ты что, не можешь сам придумать никакого решения, например даже без стека? Если нет - возможно программирование в целом не твое, раз ты можешь только заучивать информацию, которую до тебя кто-то придумал. Иди может тогда в школу учителем?
Решил изучать питон и лезть в биг дату, искать что-то с анализом данных. Не прям ужмэттм горю, но в принципе интерес есть
Теперь вопрос. Кто за сколько изучал язык до приемлемого уровня, когда уже можно понять что-то типа >>\"json\" (\"{[[]}\")" и как с этим работать
Вопрос возможно глупый, но интересно
>Ну, например "напишите валидатор строк, содержащих \"json\" (\"{[[]}\")". Вот откуда мне без базу знать, что тут нужно стек юзать?
Причем тут вообще алгоритмы?
Так все же, это как-то прокачать можно?
Или это либо дано - любовь к резолву всяких головоломок типа кубира кубика и квест-игро, либо нет?
Никак, я серьезно
Если ты не умеешь создавать какие-то новые вещи, только повторять ранее заученые - никакая креативная деятельность (в том числе инженерная) тебе не подходит
В школе ты мог например придумать решение задачки, если до этого вы точно такую же или похожую не разбирали? Если не мог - это опять же симптом
Прост пробуй сам придумать, порешать че нибудь простенькое.
начни с простого.
если тебе покажется что ну его нахуй то забей.
Это разные люди написали. такео это типичная опечатка слова "такое", когда быстро печатаешь. Просто кнопки нажал не в том порядке
>>24351
Этот >>24364 прав. Сборная солянка в виде экономики, маркетинга, немного программирования и математики. Как воин в какой-нибудь ММОРПГ, который держит все пушки в рукахя а по факту не умеет нихуя. Вот так
>>24354
Не перечитал что написал с телефона, это опечатки куда уж безработному бухать в 3 дня
Возможно.
аа, понял-понял. спасибо за наводку.
И зачем нужно обязательно знать как она устроена? Или на ее основе нужно придумывать что-то свое? Есть же в питоне dict. Неужто не хватает?
1. Мне это самому интересно
2. Некоторым конторам необходимо в силу того, как они раздрочили питон для ... кхм ... производительности. Например, в игрострое.
Зарегайся на амазоне там нахаляву дают 750 машинных часов в облаке. Твоему сайтику этого на год хватит
Да захостить наверное не сложно, я хочу просто понять че вписать в nginx чтобы по моему ip сайт открывался на время, даже если у меня динамический ip, если это возможно
nginx всё равно нужен, просто не надо его настраивать и пробрасывать порты.
communicate возвращает кортеж (stdout_data, stderr_data), где stdout_data это то, что процесс напечатал в ответ в стандартный поток вывода, а stderr_data это данные об ошибках, которые процесс напечатал в стандартный поток ошибок.
Все зависит от того, как эта твоя програмка общается с окружающим миром.
Если ты ждешь, что твоя програмка будет что-то читать с потока ввода, типа, если ты будешь вызывать ее в консоли, то ты вводишь в консолди "MODN1", нажимаешь ENTER, потом вводишь "1 2 3" и нажимаешь ENTER, то надо сохранять ответ от первого вызова , а второй communicate тогда вызывать не надо, получится примерно так:
import subprocess
proc = subprocess.Popen(["MODN1"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
result, errors = proc.communicate(input=" 1 2 3")
print(f"result = {result}, errors = {errors}")
proc.kill()
Если ты ждешь, что это твоя програмка получает аргументы при вызове, как ключи, типа, если ты будешь вызывать ее в консоли, то ты вводишь в консоли "MODN1 1 2 3" и нажимаешь ENTER, то надо поступать примерно так:
import subprocess
proc = subprocess.Popen(["MODN1", "1", "2", "3"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
result, errors = proc.communicate()
print(f"result = {result}, errors = {errors}")
proc.kill()
В документации к модулю subprocess пишут, что в общем случае сейчас лучше использовать subprocess.run, а subprocess.Popen использовать в каких-то особо специальных случаях, что-то мне сдается, что у тебя достаточно общий случай, и тебе лучше использовать subprocess.run. Функция subprocess.run имеет практически те же аргументы, что и subprocess.Popen, но она сама создаст процесс и прибъет его при завершении, и вернет результат в специальном объекте класса CompletedProcess, в котором будет информация о завершившимя процессе.
Для первого случая будет:
result = subprocess.run(["MODN1"], input=" 1 2 3", universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
Для второго:
result = subprocess.run(["MODN1", "1", "2", "3"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
communicate возвращает кортеж (stdout_data, stderr_data), где stdout_data это то, что процесс напечатал в ответ в стандартный поток вывода, а stderr_data это данные об ошибках, которые процесс напечатал в стандартный поток ошибок.
Все зависит от того, как эта твоя програмка общается с окружающим миром.
Если ты ждешь, что твоя програмка будет что-то читать с потока ввода, типа, если ты будешь вызывать ее в консоли, то ты вводишь в консолди "MODN1", нажимаешь ENTER, потом вводишь "1 2 3" и нажимаешь ENTER, то надо сохранять ответ от первого вызова , а второй communicate тогда вызывать не надо, получится примерно так:
import subprocess
proc = subprocess.Popen(["MODN1"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
result, errors = proc.communicate(input=" 1 2 3")
print(f"result = {result}, errors = {errors}")
proc.kill()
Если ты ждешь, что это твоя програмка получает аргументы при вызове, как ключи, типа, если ты будешь вызывать ее в консоли, то ты вводишь в консоли "MODN1 1 2 3" и нажимаешь ENTER, то надо поступать примерно так:
import subprocess
proc = subprocess.Popen(["MODN1", "1", "2", "3"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
result, errors = proc.communicate()
print(f"result = {result}, errors = {errors}")
proc.kill()
В документации к модулю subprocess пишут, что в общем случае сейчас лучше использовать subprocess.run, а subprocess.Popen использовать в каких-то особо специальных случаях, что-то мне сдается, что у тебя достаточно общий случай, и тебе лучше использовать subprocess.run. Функция subprocess.run имеет практически те же аргументы, что и subprocess.Popen, но она сама создаст процесс и прибъет его при завершении, и вернет результат в специальном объекте класса CompletedProcess, в котором будет информация о завершившимя процессе.
Для первого случая будет:
result = subprocess.run(["MODN1"], input=" 1 2 3", universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
Для второго:
result = subprocess.run(["MODN1", "1", "2", "3"], universal_newlines=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
В винде надо activate.bat запускать, а не просто activate. Но я правда не понимаю хули там сложного? Там более, что пукчарм вообще предлагает при создании проекта создать виртокружение еще и сам его включать будет.
расширение bat не обязательно указывать, достаточно в терминале набрать venv\Scripts\activate и выполнить
А ну мб, я просто давно уже руками последний раз включал venv. Просто в пукчарме галку ткнул на автовключение и кайфую. Еще бы пукчарм в гитхабе автоматом логинился через консоль и было бы норм.
кстати нахуя ты создал вирутальное окружение в папке system32 ? его создают в папке с проектом, очередное доказательство что ты даун
Сумасшедший, ты понимаешь, что у тебя файл activate сам по себе не появится? По тому, что ты в system/32 захуячил рабочий проект уже все понятно. Но блять дальше больше. Ты пытаешься запустить файл activate как команду. Это настолько охуительно тупо, что я даже не могу пояснить всю глубину долбаебизма
открывай kaggle.com, порешай пару задачек оттуда, если легко, то может получится на фрилансе найти подработку
не, я на самом деле месяц учил синтаксис в свободном режиме по паре часов, мне прям нравится язык, но я не могу нащупать объём необходимых знаний, которые нужны для решения реальных задач.
Кажется что в таком темпе до денег год учить, думал что подскажут
На питоне новички частенько пишут парсеры за деньги, но заработок низкий, если интересует изучай библиотеки requests для запросов к сайтам, beautiful soup для удобного парсинга html, pandas для удобной работы с напаршенными данными и сохранением данных в разные форматы(json csv xml xslx). Потом может быть удастся перекатится на обычную работку на должность ETL разработчика
так я и запустил.
Это ты не удосужился написать что сперва создается батник в определенной папочке а потом только запускается, а потом еще и обвинил меня в том, что я якобы создал какой то проект в системной папке, хотя очевидно что я запустил виртуальное окружение не для проекта или еще чего то, а просто показал как оно запускается по дефолту.
смекаешь?
спасибо за ответ
> так я и запустил.
Ты его запустил в system32 нахуй, ты все еще не смог сделать свой проект с виртуальным окружением.
> Это ты не удосужился написать что сперва создается батник в определенной папочке а потом только запускается
Нихуя себе, тебе вообще-то об этом написали и не раз. Плюс ты сам чета пукал про то, что весь гугол прочитал и не нашел ответа. Ты с таким подходом через лет 10 свой первый хеллоуворлд напишешь.
> обвинил меня в том, что я якобы создал какой то проект в системной папке, хотя очевидно что я запустил виртуальное окружение не для проекта или еще чего то, а просто показал как оно запускается по дефолту.
Чел, всем похуй на тебя. Ты должен быть благодарен, что тебе вообще кто-то отвечает и пытается помочь. Еще раз -- ты с таим подходом пойдешь нахуй. Будешь дальше выебываться и что-то требовать -- это мой последний пост тебе.
Если это --> >>24796 ты, то тебе до денег еще около 10-15 лет учить. А объем знаний зависит от того, что считать необходимым. Самый большой срок уходит на то, чтобы мышление свое под программирование заточить. Если математикой занимался еще чем-то таким, то тебе это не понадобится. Если же нет, то займет ощутимое время. Остальное тривиально и больше 1-2 лет не займет. Вообще, с нуля можешь на года полтора ориентироваться.
мне и не нужно было создавать проект
я гуглил как его запустить без создания файлов, например.
и нашел, как видишь
>Ты должен быть благодарен, что тебе вообще кто-то отвечает и пытается помочь
не, ну это пиздец, ты жопой посты читаешь? я не просил помощи и не задавал никаких вопросов.
вот цитата
>чтобы на 10 винде активировать я заебался гуглить, информации мизер
где ты видишь тут вопрос или хотя бы утверждение что я не смог этого сделать в итоге?
щас бы спрашивать всякую хуйню блядь.
Мне показалось, или ты быканул?
>Вытеснят ли они его к хуям в мл или нет?
Нет, пока тот же Го не приведут в человеческий вид.
Само собой есть задачи и для Го, но скорее проблема где-то в другом месте.
Анон, помоги с задачей: есть срез с тегом типа \n1.\t, который нужно заменить на \n1 Ъ.
Проблема в том, что в тексте тег может быть с любым числом, типа \n12.\t, \n3.\t и так далее.
Как это все реализовать? Я думал через re.findall сделать, но получается хрень, т.к. мне нужно, чтобы в той строке, на которую я заменяю, было оригинальное число.
text = re.sub(r' тыс\. ', ' тыс.Ъ ', text)
text = re.sub(r' т\. ', ' т.Ъ ', text)
text = re.sub(r' тел\. ', ' тел.Ъ ', text)
text = re.sub(r'\nтел\. ', ' тел.Ъ ', text)
text = re.sub(r' г\. ', ' г.Ъ ', text)
text = re.sub(r' руб\. ', ' руб.Ъ ', text)
text = re.sub(r' каб\. ', ' каб.Ъ ', text)
text = re.sub(r' ауд\. ', ' ауд.Ъ ', text)
text = re.sub(r' к\. ', ' к.Ъ ', text)
text = re.sub(r' эт\. ', ' эт.Ъ ', text)
text = re.sub(r' конф\. ', ' конф.Ъ ', text)
text = re.sub(r' др\. ', ' др.Ъ ', text)
text = re.sub(r'пр\. ', 'пр.Ъ ', text)
text = re.sub(r'ул\. ', 'ул.Ъ ', text)
text = re.sub(r'наб\. ', ' наб.Ъ ', text)
text = re.sub('\:\)', ' ', text)
text = re.sub('_\_+', ' ', text)
text = re.sub(" +", " ", text)
return text
привести в божий вид?
Как вариант
re.sub(r" (тыс|т|тел|г|руб|каб|ауд)\. ", r" \1.Ъ ", text)
То есть сделать большую группу замен и использовать \1 в строке-подстановке, что означает "элемент из первой группы в скобках".
в каком-то из предыдущих тредов давали ссылку на визуализацию регулярок, но я ее проебал. кто знает, киньте еще раз.
>>> print(sys.version_info >= (3, 7))
True
Тут сравнение списков или что? Зогадке.
Спасибо. Прикольная штука, надо запомнить.
респектую бро
Так проблема в том, что число может быть практически любым (ну, логически, \n2, \n3, но тем не менее), и оно же и должно остаться после замены!
Так оно и останется.
да пизда питухону
медленный и нахуй не нужный в вебе язык
на нам рил только мл пилить да утилитки всякие
ну, если цепляться за то что на питоне просто много легаси и поэтому он нужен, то это говорит о никчемности языка в сфере
>легаси
Не в легаси дело, писать на ГО сложную бизнеслогику очень дорого, если нет высокой нагрузки, то смысла 0. Ну если только есть цель освоить бюджет. Ты на ГО и питоне не писал походу, иначе такой бред не нес бы.
На Го переписывают в первую очередь узкие места, код на нем значительно сложнее писать, сахара и абстракций там минимум, не будет и близко той декларативности что есть в питоне. Я еще раз спрашиваю у тебя есть коммерческий опыт бэкенд разработки?
да я уже другой чел - не тот который отхуесосил питон в бэкэ
но все равно отвечу - нет, я не из бекэнда - я из cv
Этот цикл я повторяю почти ежегодно. Дальше синтаксиса ни в одном ЯП так и не продвинулся. Я безумен, и не знаю как разорвать этот цикл.
Типо сразу с фреймворков начать? Мой внутренний перфекционизм говорит что надо делать все по порядку. Т.е сначала учить просто ЯП, написать топ прогу без всяких фреймворков, и только потом браться за это дело.
ты получи результат, а потом уже разбирайся как работает все
а то так и будешь дропать все подряд
Сейчас лежит душа к пайтону. Тогда попробую Django
>>25069
но изначально вопрос интересный
я еще в универские годы чуть бекэндером поработал (ну постажероватся) буквально годик. Потом перекатился в cv, так как сам немного не понял куда вообще весь бек на питоне идет
Но опять же, у меня образование не программисткое, а математическое и я мог просто не разглядеть потенциала чи хуй его вообще
вот и свалил в цв. Но про бек вопрос интересный (вдруг перекатиться захочу): есть что поделать? задачи интересные? можно ли сказать, что бэкендер на питоне это не просто питономакака?
Спасибо большое мудрый Анон
with open('summ.json', 'r', encoding='utf-8') as file:
current_data = json.load(file)
я запутался и не могу понять как это сделать
вопрос у меня просто уебанский, конечно
тем не менее
я, короче, школоло, 16 лет. Мне нравится информатика: гоняю на олимпиады, парочку поделок дома - ничего такого, просто нравится
в общем, тк я пока школоло и вышмата не знаю, просьба не пиздить ногами за сказанное далее, но мне нравится блокчейн: я не ебу насколько это перспективно\денежно и
тд
к чему я это? Поцонва, ведется ли разработка блочейна на питоне?
Смотря что ты считаешь разработкой.
Сам core какого-нибудь блокчейна врядли, не сильно питон приспособлен для хитрых вычислений.
А вот в разработке какого нибудь bitcoinlib можешь поучаствовать
import sys
print(f"Name of the script : {sys.argv[0]=}")
print(f"Arguments of the script : {sys.argv[1:]=}")
43.12 секунд гугления
col1,col2,col3,col4
5,1,foo1,foo10
5,2,foo2,foo20
6,1,bar2,bar30
Нужно получить такой словарь:
{
'5':
{
'1': {'col3': 'foo1', 'col4': 'foo10'},
'2': {'col3': 'foo2', 'col4': 'foo20'}
},
'6':
{
'1': {'col3': 'bar2', 'col4': 'bar30'}
}
}
То есть сначала группировка по col1, потом внутри результата еще одна группировка по col2. Как это сделать?
https://bitcoinlib.readthedocs.io/en/latest/
Можешь начать с этого, как раз познакомишься с внутрянкой этих ваших биткойнов
Блять, ебучая разметка
col1, col2, col3, col4
5, 1, foo1, foo10
5, 2, foo2, foo20
6, 1, bar2, bar30
{
'5':
{
'1': {'col3': 'foo1', 'col4': 'foo10'},
'2': {'col3': 'foo2', 'col4': 'foo20'}
},
'6':
{
'1': {'col3': 'bar2', 'col4': 'bar30'}
}
}
спасибо, добрый анон
>Я безумен, и не знаю как разорвать этот цикл.
Возьми какую-нибудь нормальную книжку-курс, и пройди её от начяла и до конца, ну хотя бы до половины, не отвлекаясь на другие темы.
Только так. Если сам по докам будешь учить, то так и будешь дропать.
Сначала можно про сам питон, потом уже про какой-нибудь фреймворк вроде джанго.
В начале скрипта импортируют sys, потом в блоке
if __name__ == '__main__':
опять импортируют sys.
Что это дает? Может это просто опечатка?
Прекрасный код. Сколько десятилетий ты уже пишешь код? Какой был первый язык? Какой был самый сложный проект, в котором ты принимал участие?
питон хорошо знаю, но все математическое: numpy, scipy, sklearn и прч
Джанго фласки и тд знаю на уровне туториалов
плз дайте советов
>хочу в норм проганье уйти
>заполнять формочки говном и слать введенное говно обратно
Бля, такой себе лвл ап.
Че?
Может человек устал думать, придумывать и оптимизировать на работе и хочет неспешно заниматься хуйней за фикс прайс.
Если кода много, стараюсь распихивать по разным файлам просто файл в директории.
На работе начал работать с колегами-разработчиками и ахуел от красоты и удобства их кода. Всё раскидано по полноценным пайтон модулям, для всего написаны тесты, гитлаб генерирует документацию и прочее.
Как научиться писать также? Питон понимаю хорошо, ООП не понимаю.
Все гайды по питону, что я находил, либо учат писать хелло ворлд, либо специализируются на каких-то библиотеках. Скорее всего я просто не понимаю что именно искать.
Дайте документацию/гайд/книжку по написанию красивого, эффективного, удобного кода на питоне.
гугли на ютубе тимофей хирьянов где он переписыват игру с пушкой написаную в декларативном стиле под ООП
Или можно ли в условии while создавать переменную?
Спасибо
Ага, то есть ты сам написал, что у тебя 5 элементов в списке и передал список с 4 элементами, но виноват питон?
Если ты хочешь нормально писать то тебе надо качать понимание в целом. От основ вычислительных машин и асемблера к си и потом уже к питону и прочим высокоуровневым языкам. Ну и навернуть пару книжек типа SOLID.
Она и так известна вм в внутренних структурах, как и большинство ленов, ничего там не считается на самом деле.
Запустил приложение, ввёл в окно ключи, оно покрутилось в фонеэто важно и умерло. Джаву не знаю, котлин без неё непонятеня пытался.
бля... чуть глаза не вытекли
Не очень понятно, что именно тебе нужно.
Возможно тебе стоит определить методы __setattr__ и __getattr__, через них смотреть, к чему пользователь обращается и хранить данные в каком-то специальном словаре.
Регулярки, очевидно. Но они менее универсальны, bs4 и аналоги всё-таки тебе из нужного места ссылки выдрут. А регулярки не учитывают html контекст никак.
ps: кроме bs4 ещё есть lxml
Если надо сделать один раз - регулярки, иначе парсер.
Есть функция для рисования графиков вида:
def plots(data, lags=None):
__# Convert dataframe to datetime index
__ layout = (1, 3)
__raw = plt.subplot2grid(layout, (0, 0))
__acf = plt.subplot2grid(layout, (0, 1))
__pacf = plt.subplot2grid(layout, (0, 2))
__data.plot(ax=raw, figsize=(12, 5), color='mediumblue')
__smt.graphics.plot_acf(data, lags=lags, ax=acf, color='mediumblue')
__smt.graphics.plot_pacf(data, lags=lags, ax=pacf, color='mediumblue')
__sns.despine()
__plt.tight_layout()
Она используется в цикле.
Проблема в том, что сейчас по сути отображается только 3 графика, и на каждой итерации данные отображаются поверх существующих, т.е. в конце будут показаны лишь последней итерации.
Как поменять функцию, чтобы отображались графики кадой итерации?
точно не знаю, мало работал с либой, первое попробуй заново объявлять объект графика, если plt это объект класса, то применяя к нему рисование он будет на оном и том же рисовать. 2-е уверен есть функция очистки, применяй ее в цикле после сохранения графика
python sys argv . это словарь, у словаря есть метод get который первым аргументом принимает то что ты хочешь достать, а вторым то что будет возвращено если не будет найдено значение по ключу из первого аргумента
Ты зумерок с клиповым мышлением, который не в состоянии прочитать текст длиннее одного предложения.
чем os.environ.get не устроил?
можешь еще try os.environ['залупа'] except пупа если тебе ексцепшен нужен
.get('var_name', default) используется,
или кидал исключение, когда используется в виде
.get('var_name')
Однако в последнем случае .get возвращает None.
Тут вариант, или get использовать только тогда, когда надо со значением по-умолчанию, а когда надо с исключением, тогда через обращение к словарю ['var_name'], или реализовать свою функцию для этой частной задачи
get_env_value('var_name', default),
которая при отсутствии default будет кидать исключение произвольного вида, возможно более говорящее. Можно и более гибкую логику реализовать.
>Как починить
У тебя в коде какой-то непонятный объект entry1 с методом delete непонятного назначения, какие-то непонятные методы insert, какая-то непонятная переменная END.
Вообще ничего не понятно. Но очевидно проблема в строке 4, где ты пытаешься сделать float('8/9'), а float это не eval, float не исполняет выражение, а конвертирует строку в число.
Он уже месяц делает этот калькулятор, надо будет отметить, если таки взлетит этот эпохальный пэт-проджектище.
2)Задать 2 массива А и В случайных чисел размерности k, взятых с отрезка [-9;8]. Если встречается в массивах число 4 или 5, то следующий за ним элемент заменить суммой двух предыдущих элементов.
3)В двумерном массиве удалить элементы, кратные «8».
>Если встречается в массивах число 4 или 5, то следующий за ним элемент заменить суммой двух предыдущих элементов.
Что делать в случае, если первое или второе число 4 или 5? При обходе слева направо учитывать в сумме, что значения могли обновиться?
Плохо сформулирована задача, слишком много открытых вопросов. Ещё менее понятно, зачем два массива.
Для задачи 3, в в случае одномерного массива
m = [1, 3, 5, 8, 13, 16, 6]
m[:] = [i for i in m if i%8 != 0]
генератор списка и мы при этом не создаём новый список, а перезаписываем старый.
В двумерном случае просто примитивный обход списка списков добавляется.
>Тут вариант, или get использовать только тогда, когда надо со значением по-умолчанию, а когда надо с исключением, тогда через обращение к словарю ['var_name']
Спасибо, охуенный вариант, зря я запарился.
>генератор списка и мы при этом не создаём новый список, а перезаписываем старый.
Создаем новый список и пихаем его на месте старого. Логично было бы хуярить задом наперед и удалять на месте.
Но это зависит от того, на что эта задачка.
А об этом можно только догадываться, так как формулировал их какой-то ебанько.
>Создаем новый список и пихаем его на месте старого.
Если ты делаешь
m[:] = list
то у тебя именно изменяется старый список, а не создаётся новый, но есть ты содержимое нового копируешь в старый.
Это может быть важно, если у тебя где-то ссылки на старый список хранятся и в подобных случаях.
При этом ХЗ, нужно ли об этом думать.
>>27380
>так как формулировал их какой-то ебанько.
вот это похоже на правду. Особенно со второй задачей так.
Я о том, что компрехеншен сначала создает новый список, т.е. если у тебя там миллион элементов, то он сожрет память.
А если в итерации удалять, то нет. Через два энумерейта, например.
Как проверить вхождение числа в интервал без использования двух условий и логичесного И? если конечно это не лучший вариант
>А если в итерации удалять, то нет.
Операция удаления очень дорогая, O(n). Соответственно итоговая сложность O(n^2) примерно.
На списке в миллион будет жутко тормозить, а памяти на миллион много не надо, навскидку мегабайт 30, ни о чём для современных компьютеров.
Можно сделать что-то вроде пузырька, то есть идти слева направо, иметь два указателя и копировать не кратные 8 элементы, но это извращение. Потом ещё обрезать конец.
Я думаю, что создание нового списка меньше ресурсов реально отъест.
>Как перебрать все комбинации по n элементов из массива?
С помощью модуля itertools.
Там же приведен код, как можно подобное реализовать на голом питоне.
Ага понял, именно то что нужно, спасиб
Математические вычисления агааааааа
двачую
Краем глаза глянул, что про него пишут, очевидный кошмар, а не язык.
Название для задротов, с таким никогда не взлетит. Как лодку назовёшь, так она и поплывёт. Нельзя женскими именами называть языки. Был такой древний язык Ada, тоже женское имя, хотя и редкое, в отличии. И там тоже какой-то ад из-за нестрогости. Ну так говорят, не пробовал изучать.
Но за Адой хотя бы ресурсы были огромные, а эта юля поделка.
Корабли это she, mate!
Это нормально, я когда ассемблер учил, мне он только первые две недели и снился, причём в кошмарах.
калькулятор месяц кодинга? бля, это жестковато.
А что скажешь насчет языка ПАТРИОТ, или как там его назвали, блядь забыл уже. КУМИР, вот.
что за тема?
Жёстко. надеюсь это пройдет со временем..
Кстати, что за кошмары были, приколи стори.
Есть функция, внутри которой делают парсинг с помощью BeautifulSoup. Можно ли передавать ссылку на экземпляр BeautifulSoup в функцию, чтобы не создавать каждый раз внутри функции? Надо ли так делать?
Щас у меня так
def parser(query: str) -> dict:
.... получаю src страницы
....soup = BeautifulSoup(src)
.... что-то делаю
....return result
Нет, при этом каждый раз происходит парсинг текста и построение объекта супа, это самая тормозная и затратная операция. Просто передавай нужные объекты.
Понятное дело что все это сахарок синтаксический, но зато логику легко прятать.
https://pastebin.com/G4jcpnHN
понял, спс.
Ну и нахуевертил.
Есть тут кто знает/слышал про autocomplete diginetica? Как распарсить страницу результатов поиска? Захожу через request.get по URL с нужными параметрами, но эта приблуда не отдает нужный HTML пока на самом сайте не кликнешь в форме поиска. Встречались с такой хренькой?
Паттерн называется "пул процессов".
Смотри вот здесь:
https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool
Подсмотреть в дебаггере что там за запросы и повторить у себя на той же сесии.
Ну или заменить реквестс на хедлес браузер и он сделает всё сам, но это уже больше вариант для всякой йобы.
>Душители питонов, с этой говниной можно что-то делать?
Невнятный ужас. Ничего делать с этим не надо, просто удалить.
Невнятная логика. Почему такие разные виды исключений для tries =1 и для tries >1? Разумно, чтобы вид исключения был одним.
Откровенно индийский код. Перегруженная логика по if-else, когда всё делается проще.
спасибо, все получилось. чел, ты - классный.
Мб selenium поможет
Смысл вызова callback для обработки exception без впендюривания ветвления в логику же. Код на коленке за 5 минут. Я хочу понять нужна такая поебота кому-то кроме меня или нет, тем более это декоратор.
И API на воротник.
В tenacity есть retry_error_callback, но он работает хуй знает как, дергает retry_state и все, т.е. задуман не как обработчик какого-либо exception, а как обработчик ошибки retry при окончании попыток. Мне проще форкнуть retrying и прикрутить свою логику с ООП и прочими приблудами
чет туплю пиздец уже
короче у меня есть numpy матрица размером n x 3
каждая строка - вектор в трехмерном пространстве
вопрос
как мне все вектора в этой матрице спроецировать на ось з?
сука, засунули в атрибуты
_exception и _attempt_number объекта retry_state, поймать можно через параметр
@retry(reraise=True)
Ебись конем говноподелие с нарушением PEP8, форкать однозначно
не вариант
у меня же таблица векторов и вектор, на который нужно спроецировать
искать углы и прочее это долго, имхо
я придумал чет, но выглядит как батин суп конеч
https://pastebin.com/u8UmEVu2
если кому интересно, мб подскажите как улучшить, а то выглядит больно
лол, сумму поправил через sum(axis=1)
Хз на сколько долго это, но косинус из math на C написан, а проекция именно считается через косинус\синус, если тебе нужна z, то это синус между y и z координатами вектора
>Мне проще форкнуть retrying и прикрутить свою логику
Только пока у тебя логика невнятная и глючная.
Например твоя программа зависиснет, если будет обработчик для исключения, а количество попыток выставлено в 1. А этого явно не должно быть.
if error_handler:
error_handler(e)
break
else:
raise e
Увидел, код очень грязный вышел, но пока навыка писать чистый код за 5 минут нет, еще и ООП прикрутить. if-else вообще говнище.
На самом деле в tenacity прикрутили callback, но не написали про параметры retry_state._exception, ну да похуй. На то он и питон, что в исходниках копаешься. Проще говоря, документацию никто не ведет, true Python way.
Ясен хуй жс
>Django или JS
Джанго это фреймворк, а JS это язык программирования. Ты должен понимать, что вот так нельзя сравнивать.
Ну раз нельзя тогда можешь не отвечать на пост.
Можно предлагать как анг так и рус.
J.Groff, P.Weinberg, A.Oppen — SQL, полное руководство (2015).pdf
Ibrar Ahmed, Asif Fayyaz, Amjad Shahzad — PostgreSQL Developers Guide (2015).pdf
Chitij Chauhan — PostgreSQL Cookbook (2015).pdf
А. Ю. Васильев - Работа с PostgreSQL настройка и масштабирование, 5-е издание (2017).pdf
Нашел 2018 года, на флибусте. И 2019 год для покупки, но там одинаковые обложки. Они отличаются? На обложке 2019 года нет ничего про 2 издание и тп.
Есть один тг бот (пишется на аиограме, если что) который с заданным периодом делает рассылки в тг каналы
Материал для этих рассылок парсится с помощью стороннего внешнего сервиса, ну точнее его апи.
Так вот, я бы хотел этот парсер отделить от бота и сделать бекграунд задачей, но при этом не хотел бы мешать асинк код с тредами (почему - не знаю)
Как я это себе представляю: бот работает, слушает месседж хендлеры и в то же время в фоне независимо крутится парсер (может быть не один). Когда "прилетает" новый контент, то парсер кладет данные в стек (пока в этой роли юзается постгрес), а бот время от времени "вытаскивает" накопленное из этого стека и делает рассылку.
В реальности, пока что есть вот такая убер всратая заглушка для 1 тестового канала: https://pastebin.com/Xv0uTD9b
В чем проблема-то?
"products": [
....{
........"id": "71470",
........"name": "Молоко",
........"brand": "МПК ООО",
........"price": "59.7"
....},
....{
........"id": "71471",
........"name": "Хлеб",
........"brand": "ХЛЕБ ООО",
........"price": "25"
}
Внимание, вопрос: как отсортировать по значению "price"?
спасибо
gRPC с Питоном - норм тема? Кто пробовал?
Гей-РПЦ?
Судя по всему это джейсон, так что по ключу.
Тариф API для городского транспорта вроде как платный, есть только бесплатный для рейсовых
Яндекс анально огорожен, а парсить это говно через Селениум идея паршивая. Попробуй Openstreetmap, там инфа не такая детальная, но есть нормальный АПИ
жабаскрипт
Что значит Джанго или JS? Что ты блин имеешь ввиду под "JS"?
Если про бэкенд, то если че, Джанго это скорее из той же ниши как Laravel - монолитный фреймворк со свистоперделками, тогда как Нода нацелена на микросервисную организацию. Ну и не говоря о том, что вкатышей в Ноду берут неохотно и в целом вакансий на нее в Раше немного (а вот в США поболее, Рашка как всегда)
Я думаю, это вряд-ли поможет. Мне в конечном итоге нужно получить инфу о времени прибытия автобуса на остановку. Попробую еще что-нибудь поискать
2гис апи смотрел?
Написал скрипт_1, который с моего рабочего пека из закрытой сетки через vpn по ssh лезет на удалённый сервак, на котором запускает скрипт_2, который выгружает из хранилища данные и архивит их, и через scp выгружает на мой рабочий пека, и потом эти данные переносятся на сетевой диск третьим лицам.
Проблема: я заебался всё это делать сам, хочу написать веб сервис или веб апи, чтобы третьи лица сами могли получить эти данные.
Вопрос: как делать, куда копать?
В чем идея второй картинки?
математика (разбиение числа).
Вот само решение:
def s(h, w, tab):
if w == 0:
return 1
if w < h:
return 0
if tab[h][w] != 0:
return tab[h][w]
tab[h][w] = s(h + 1, w - h, tab) + s(h + 1, w, tab)
return tab[h][w]
def main(n):
tab = [[0 for _ in range(n + 1)] for _ in range(n + 2)]
return s(1, n, tab) - 1
Мало данных. Эта вся впн-хуита нужна, или можно поднять сервер прямо там? Архвирование долго ждать или можно на ходу провернуть?
джанго скачивание файлов
В питоне всё ссылка, у тебя эта ссылка на список таскается в каждом вызове и список по ней меняется.
> асайнить значение в функции через рекурсию этой функции
У тебя обычная мемоизация. В петухоне такого вообще вроде делать ни нужно - все из каропки.
>я заебался всё это делать сам, хочу написать веб сервис или веб апи
Чет у тебя какие-то сложные костыли либо ты непонятно обьяснил. Не проще ли сделать например фтп сервер и выдавать доступ?
>впн-хуита нужна
Нужна только мне (скрипту 1), чтобы с правами приложения можно было зайти на удалённый сервак и выгрузить данные (скрипт 2)
>можно поднять сервер прямо там
Можно, но там нет виртуалок или контейнеров, всё это будет крутиться в общем потоке, что не желательно, т.к. по сути я это делаю без согласования с девопсами
>Архвирование долго ждать
Долго
>>29082
>Не проще ли сделать например фтп сервер и выдавать доступ
Девопсам было не проще, а я не девопс
ТЗ и вопросы в телегу - @totsamiianon
Если бы они все не уволились, я бы этой хуйней (которую спихнули на меня) не занимался. До меня это делали вручную.
Возможно, они хотят сказать, что питон начал опережать джаву в каких-нибудь рейтингах популярности, и эта популярность продолжает расти.
>Сеньор ньюфаг со знанием четырех языков программирования
Я знаю больше и не вкатился даже на джуна.
Джун-олдфаг это уже со знанием ассемблера.
В жупитере\пичарме на десктопе всё норм запускается и отрабатывает. Когда отправляю код на гитлаб, собираю в джобу и пробую запустить - выдает такую ошибку:
df = df[df['param1'] > 0.0]
File "/usr/local/lib/python3.7/site-packages/pandas/core/frame.py", line 2902, in __getitem__
indexer = self.columns.get_loc(key)
File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2893, in get_loc
raise KeyError(key) from err
KeyError: 'param1'
Часть кода - пик рил.
Суть кода подключаемся к БД, вытягиваем запросом данные, в пандасе ворочаем, засовывем обрато в БД.
>Пандас же только на конде работает, как ты его в пичарм сунул?
Ты сам хоть понял, чего сказал?
Хуй знает, наверно сперва делал в жупитере с пандасом, потом ушёл в пичарм и там уже поправил всё. Я год тому код писал и забыл. Я ваще дуплей не режу в питоне. Помогити, эту ебалу запустить. Снова перепроверил - в пичарме - заебись всё отработало, в ипомртах пандаса - нет.
Пиздец ты хлебушек. Закомментить ошибку, добавить print(df.columns.values.tolist()) и проверить, есть ли там 'param1' или нет мозгов не хватает?
>Пиздец ты хлебушек.
Ну такой я у мамы.
>print(df.columns.values.tolist())
Есть и param1 и param2 и всё остальное. Правда я это на десктопе проверяю, а там всё и так заебца работает.
Ну так у меня на десктопе тоже всё работает. а когда я потом в крон на рабочем пека добавляю, у меня ничего не работает. Наверно проблема не в десктопе и стоит проверять окружение в гитлабе?
А даже если проверять, то что имено? Часть с импортом, коннекторами к БД, запросом в БД и фетч данных - видимо прошла на ура. Либо оно всё не скачалось и я пробую потрогать несуществующую таблицу.
Разставил Принт Ок по ключевым моментам. Данные достаются. Значит чисто в тех превращениях данных ошибка.
Значит при преобразовании данных из sql в df у тебя столбцы попадают индекс. Попробуй добавить df.reset_index(inplace=True).
Уже пробовал. Навесил ОК на индекс, ОК проходит. Но всё так-же останавливается на начальной ошибке. Вот начало ошибки.
File "/usr/local/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2891, in get_loc
return self._engine.get_loc(casted_key)
Значит что-то с кодировкой названий столбцов. Нужно добавлять COLLATE в sql запрос. Других идей у меня нет (из-за того что других проблем просто не может быть, если только ворочанием сам датафрейм не ломаешь).
KekJS, но он пока ещё доделывается в подземных лабораториях ZOG.
В видосе который я смотрю очень простой хтмл, а найк мудрит пиздец, если кто знает какие-либо крутые и понятные гайды по селениуму, желательно с потенциалом в хедлес, то был бы очень рад и благодарен помощи
среду я вроде норм настроил, сам браузер на найке у меня открылся.
Там же _ первым символом, слепой штоле? Но вообще оно выглядит рандомно, небось меняется регулярно. Да и вообще ты зря полез в эти кроссовки будучи нубом, там пиздец царство ботоводов.
>Там же _ первым символом
бля я олень
>Но вообще оно выглядит рандомно, небось меняется регулярно.
так и есть
>Да и вообще ты зря полез в эти кроссовки будучи нубом, там пиздец царство ботоводов.
ООО ты понял что я хочу, у меня просто пиздец какие выходы есть на кросы, так что нужно думать в этой сфере, было бы супер расскажи ты мне куда копать чтобы двигаться в этой сфере.
Из того что я понял это селениум и хедлес браузер, но по тому что все пишут про ботов, видимо без иишки не обойтись, но в чем задача ии? Они реально настолько рокет сайентисты, что обучают комп разгадывать задумки найка, и самому настроить скрипт будет слишком долговсё вынесут, или они просто таким образом оптимизируют код в бота чтобы больше запросов посылать и больше кросс выносить, и потенциально я могу какой нибудь изи высер сделать чтобы хоть 5 пар выносить?
короче вопрос такой
у меня есть класс A и я хочу, чтобы у каждого экземпляра этого класса было поле с опредленным значением, считанным из файла
Причем я не хочу, чтобы при создании инстанса это поле повторно вычислялось
я думал, что это можно сделать так:
class A:
____hui = read_from_file("hui")
def __init__(self):
____pass
но так нихуя не работает. Что сделать?
еще раз, одно поле с одним и тем же значением на все инстансы
короче у меня прога, которая захватывает с вебки изображение и как-то его обрабатвает - не важно как
вопрос, как лучше разнести захват кадров и алгоритм на модули?
вариант 1) запускать видеопоток в отдельном потоке и передавать в основной поток кадры, которые далее обрабатываются
вариант 2) ебануть while True цикл в мейне, и там уже вызывать методы из модуля захвата видеопотока
Так и надо, что не работает-то?
Можно чуть иначе, создаёшь словарь tab с интексацией по туплам (h, w)
предварительную инициализацию не делаешь, делаешь
if (h,w) in tab:
____return tab[(h,w)]
else:
____tab[(h,w)] = s(h + 1, w - h, tab) + s(h + 1, w, tab)
А более кондовый вариант, это вообще делать через
@functools.lru_cache
def s(h, w):
тогда lru_cache будет сам мемоизации производить, только по-умолчанию размер кеша небольшой, но это настраивается параметром хоть до бесконечности, смотри доку.
Слёту должно работать, но файл у тебя будет открываться при запуске программы, а не при первом инстансе, возможно это не то, чего ты хочешь.
Опиши, как это должно выглядеть со стороны пользователя.
То есть он заходит на твою страничку с веб интерфейсом, и что должен ввести и что должно произойти?
В принципе ты можешь стартовать свой скрипт_1 с нужными параметрами по сигналу от веб сервера. Надо только контролировать, чтобы слишком много заданий так не стартовало.
Если же нужна интерактивность, чтобы там показывалось, что задача стартовала, завершилась, сколько времени осталось и т.п., то уже сложнее. Всё сильно зависит от твоего скрипта.
В чем суть твоего биза, кроссовки по акции?
IDE это для разработчиков, а жупитер для студентоты и всяких научных хуев.
У тебя как-то по наркоманский сделано.
Тебе надо при инициализации передавать значение для экземпляра класса.
Дальше ты читаешь свой файл, читаешь значение и передаешь его при итерации обьекта.
Я решил запилить свою геолокационную игру, что-то типа геокешинга, если вы понимаете о чем я. Сервер решил писать на джанге, тем более, у нее есть отличная функциональность ГИС-системы. Реализован сервер будет в качестве api - клиент будет кидать put с координатами в json, и получать какой-то результат от сервера. В чем минусы такой архитектуры?
у меня одно значение на все экземпляры
каждый раз его не очень хочется читать
а если я укажу так:
hui = read_from_file("hui")
class A:
def __init__(self):
____pass
def add(self):
____return hui * 2
будет ли это работать, если я инстанциирую класс вообще в другом модуле, в котором пишу
from a_ import A
И нет, не будет, потому что ты импортируешь только сам класс. Чтобы работало, нужно импортировать весь модуль.
Всё у тебя правильно.
https://ideone.com/mi3vfo
Оно выполняется один раз при определении класса на старте.
Куда следует класть libname.py, чтобы он цеплялся по import из любой директории?
PYTHONPATH жи есть.
Допустим у тебя репа со своими говноподелками и надо их подключать в другой проект без copy-paste. Добавляешь репу в PYTHONPATH и все.
точно не помню
но он сперва просматривает стандартные, по путям из sys.path
чтобы он цеплялся из любой дирректории, нужно сделать отдельную папку с __init__.py - тогда эта папка будет восприниматься как пэкэдж и ты можешь ее импортировать
например
\package
----__init__.py
----lib.py
зызывается так:
1) import package.lib
2) from package import lib
ну и прочие вариации
Ничего или код, который будет выполняться при запуске этого модуля python3 -m src.main, где в __init.py__ например прописана загрузка load_dotenv или что-то еще. Главное совсем уж логику не скрывать там. Там же может быть импорт всего говна из поддиректорий или формирование новых объектов.
А вообще смотри на github исходники и кто как использует init.py
https://github.com/tortoise/tortoise-orm/tree/develop/tortoise
Можешь просто искать по reference что откуда берется. В этом плане Питон простой.
но не понял какого хрена
короче я сдела вот так
hui = read_from_file("hui")
class A:
def __init__(self):
____pass
def add(self):
____return hui * 2
и потом импортировал модуль
и он не мог считать файл
прекол в том, что у меня лежали в разных папках два пэкэджа (ну логично)
и вот ОКАЗЫВАЕТСЯ, когда я импортирую модуль, то пути у импортированного модуля херятся, тк питон думает, что теперь модуль находится по пути файла, который его импортирует
немного непонятно написал, но если что вот
у меня есть функция, я хочу к ней аннотировать тип возвращаемного значения
но
у меня может вернуться, условно, инт, а может None
пайчарм на такое ругается - говорит, что нан это не инт(что в целом-то логично)
что делать в таком случае?
лучший
В юпитер ноутбуке все норм.
>Писали многие про Jupiter. Типо "крута, модна", посмотрел - это ж бля пиздец какой-то
Жупитер хвалят неосиляторы, не умеющие толком программировать или не желающие тратить время на изучение нормальных инструментов.
Когда нужно работать с кучей датафреймов, в которых лежат данные из разных источников (скл, монга, хадуп, цсв и т.п.), при написании прототипа и при добавлении нового функционала нахуя каждый раз запускать скрипт и ждать, пока все шаги выполнятся?
>нахуя каждый раз запускать скрипт и ждать, пока все шаги выполнятся
В пайчарме, внезапно, тоже можно использовать интерактивный питон.
спрошу еще раз (до этого просто никто не ответил)
короче у меня есть камера, я хочу с нее считывать данные и обрабатывать
стоит ли мне запилить захват камеры в отдельный поток? ГИЛ же ведь превратит мою прогу в однопоточную все равно
Может у вас есть похожие кейсы. Вроде как и хочется многопточку вставить, но уместно ли это тут?
Внезапно, интерактивный код можно писать и в python shell.
Он там не такой удобный, и не надо ебать мозги с установкой venv и пакетов, когда можно проверить или внести правки в код, тестируя на mybinder.
Я сам пользуюсь PyCharm для разработки, но кукарекать, что "Jupyer/Anaconda/etc ряяя для дитей нинужна тому шо мне нинужна" долбоебизм. Это тоже инструменты, и если тебе нужен фломастер зеленого цвета, то "нинужна" бежать в магазин за набором из всех цветов.
Востребованы щас путон-спецы и какой порог входа?
>Это тоже инструменты, и если тебе нужен фломастер зеленого цвета, то "нинужна" бежать в магазин за набором из всех цветов.
Ну так назови преимущества или просто уникальные фичи жупитера по сравнению с пайчармом. Мне в голову приходит только Markdown ячейки и сохранение принтов и картинок в один JSON файл. Польза от них сомнительна, а в замен ты получаешь отсутствие всех фишек IDE и невозможность структурировать проект.
В pycharm не могу быстро тестить нейронки, а в jupyter могу (через collaboratory), хоть он тут и не конечный инструмент, а прослойка. Мне этого достаточно.
>а в jupyter могу (через collaboratory)
Ты про гугл колаб? Ну, если настолько нищий, что нет денег на свою видеокарту, то смысл использовать есть.
Ну да, на моей 2070s не так быстро обучается. Мне за слаем из титанов быстрей бежать?
>Пиздишь. В колабе стоит древняя K80.
Что не мешает ей падать, когда оставляешь на ночь. Памяти там больше.
>Пока что внятного ответа никто не дал.
Тебе уже написали, что как минимум для обучения/тестирования нейросетей. Для одноглазых калек (в т.ч. меня), которым лень ебаться с скачиванием и установкой, настройкой окружения и пип инстоллами пакетов, особенно когда у тебя не всегда есть доступ к домашнему пека и приходится перебиваться рабочим ноутбуком, можно зайти на mybinder и там всё делать. Никто не спорит, что использовать его в серьезной разработке стоит.
Ну так ищи, хули ты тут сидишь?
>лень ебаться с скачиванием и установкой, настройкой окружения и пип инстоллами пакетов
В общем понятно. Ты описываешь преимущество не жупитера, а колаба.
Что угадал?
Потому что я не разработчик, а аналитик, и мне полезны любые инструменты, с помощью которых можно сделать или протестировать прототип. Даже если в этом инструменте мне нужна только 1 фича, и даже если у серьезных дядек он не котируется, мне это экономит время и нервы.
А в чем и как уже они потом это в прод будут переписывать мне похуй (и никто мне не доплатит, если я буду ради них напрягаться). Но дома у меня установлен pycharm, и для второй работы всё пишу там.
А вообще, во многих популярных курсах по АДу, в ШАДе и т.п. все учатся в jupyter.
Ни о чём. Так, пытаются по мелочам тайпинг-аннотации допиливать, и на этом всё.
Ну а хуле. С релизным циклом в полтора года фич не напилишь. Надеюсь, свичи завезут вскоре
"flowers" in d
ПОЧЕМУ У МЕНЯ НИЧЕГО НЕ ПРОИСХОДИТ. ЧТО Я ДЕЛАЮ НЕ ПРАВИЛЬНО? Я НАЖИМАЮ run И ВСЁ, КОНСОЛЬ ПУСТАЯ.
Хуета какая-то. Я пытался с тремя значениями что-то сделать, где была запятая и нихуя не получалось
берешь и формулу в принт вставляешь
чтобы обозначить что это кортеж, а не переменная
Как я понял, в питоне вообще дохуя мелочей, про которые не рассказывают даже на курсах.
чтобы все понять нужно читать документацию, вот пример
с одной стороны - класс, у которого все методы статические и есть пару полей
с другой стороны - просто модуль, в котором есть глобальные переменные и функции
по факту, разницы нихуя (ну разве что класс солиднее смотрится), но вопрос: как лучше? ведь оба варианта справляются одинаково с задачей
Модуль лучше, ты потом его сможешь использовать в другом месте.
хочу инициализировать пустую переменную класса
пишу
class Pizda:
___def __init__(self):
______pass
class Hui:
___def __init__(self):
______self.pizda : Pizda = None
но пайчарм кидат ворнинг, потому что expect Pizda got None instead (прям как в жизни лол)
как правильно инициализровать переменные пустым значением?
Ну епта смори короче, None это ничего, а так ты создаешь переменную которая ровна пустой строке '' это джве ординарные ковычки, можешь взять "" чтобы было понятней.
браток, так теперь expect Pizda got STR instead
я тоже так думал
но если я пишу в другом методе типа
__def foo(self):
____self.pizda = p + i + z + d + a
он говорит "какого хуя ты инициализируешь не в инит"
>он говорит "какого хуя ты инициализируешь не в инит"
Потому что тебе надо передать какое-то значение для p + i + z + d + a в foo.
Ну если ты хочешь следовать пепам, то не инициализируй не в конструкторе, это вообще не имеет отношения к тайпингу.
пеп говорит, что если у класса есть поле, то оно ДОЛЖНО быть инициализированно в конструкторе?
спасибо всем чуваки
Да тут какбэ логично, т.к. питон наверняка думает что это просто выражение тип (1 + 2) если ему не показать что это список элементов с помощью запятой
ну если там 1 элемент то запятая ставится просто чтобы показать что это кортеж.
алсо можно просто прописать что это тупле
Че делать-то, как осознать эту херню? ООП для меня стало просто камнем преткновения, через который я никак не могу перешагнуть. В книгах какие-то дегенеративные примеры с пиццами и эмплоерами, а реальности когда я смотрю на это в чужом коде, то это какой-то пиздец и взрыв мозга, я вообще не могу уловить логики построения программы.
>я вообще не могу уловить логики построения программы.
Ты все правильно понял. Для этого и нужен ООП.
Бамп вопросу
class WebServerRunner():
____http_port = 8080
____def __init__(self, httpstate, port=self.__class__.http_port):
---
NameError: name 'self' is not defined
И почти тожесамое:
____@classmethod
____async def run(cls, httpstate, port=cls.http_port):
---
Тоже cls неопределен.
Чо за бред? Ведь если вместо параметра класс.порта прописать константу, то все работает. И в то же время он ведь не ругается что первым аргументом методов идут чистые self и cls - которые типо не определены. Значит они определены же. Но что это тогда за ошибка?
Типо параметры вызова интерпретируются за пределами объекта чтоле? А первый аргумент self, cls непрозрачно неинтерпретируется? (ибо другое поведение наблюдается)
Как пофиксить?
Потому что дефолтные значения вычисляются при определении функции, там нихуя нет в это время.
Для этого тебе нужны ещё классы. Каждое твоё действие в ините выносишь в отдельный класс отдельного метода.
Если там:
1. Скачать CSV
2. Спарсить CSV
3. Перегнать в XML
4. Спарсить XML
5. Сохранить XML
То делаешь FileDownloader , CsvParser, CsvConverter, XmlParser, FileSaver.
Это классика
>Как писать в ООП стиле?
А тебе это нужно? ООП начинается с наследования, но нужно это обычно в достаточно больших программах. ООП нужно для упрощения, а ты пытаешься наоборот с помощью ООП усложнять.
Поставил какой-то https://github.com/sentientmachine/Pretty-Vim-Python/, но он pattern'ы прямо в тексте отображает, а описание функций в отдельном окне вверху. Мне не нравится такое, когда текст скачет.
Тоже нихуя не понимаю ооп. Два раза прогорел когда собеседовался с основного места работы. Чувствую себя идиотом.
Есть у кого-нибудь кулстори по этому поводу?
upd, отбой, почитал settings
Ну да, но перевод на русский может не содержать всей той ценной и достоверной информации
Если перевод от шаристого, то всё будет чики-пуки!
Ну ядумал может какой нибудь энтузиаст переведёт, это же логично! даже порнуху ведь переводят!
Пытаюсь скрыть всю логику по работе с сущностью (включая sub классы) в одном классе. (конкретно пытаюсь инкапсулировать вот это https://docs.aiogram.dev/en/latest/migration_1_to_2.html#filters-factory как подкласс, самого запускателя бота уже засунул).
И вот у меня получается такая фигня:
class BotRunner():
____куча методов пораждающих переменные и запускающих чегото асинхронно
____class MyFilter():
________куча методов желающих пообращаться к переменным экземпляра класса выше
Я обращаюсь к self.bot определенном в BotRunner экземпляре из MyFilter и мне говорят
____member = await self.bot.get_chat_member(message.chat.id, message.from_user.id)
AttributeError: 'MyFilter' object has no attribute 'bot'
Можно ли как-то получить доступ к переменным объекта выше из подкласса не залезая глубоко подкапот библиотек?
>>30584
Спс.
Обошолся костыликами с if.
>подкласс
Не подкласс, конечно, а вложеный класс.
Ведь первое это чисто про наследование, а его нет.
Хотфикс.
Поищи курсы от computer science center (и иже с ним), от них обычно высококачественные курсы.
messages_count надо проверять только для частных случаев, когда количество сообщений от 11 до 19. В остальных случаях ты остаток проверяешь, remainder.
Шаблонный код их кривой на самом деле.
https://www.codewars.com/ всякие задачки с возможностью просмотра различных решений. Но нет справочной информации.
Декоратор для проверки времени?
https://medium.com/pythonhive/python-decorator-to-measure-the-execution-time-of-methods-fa04cb6bb36d
Хотя наверное если бы это было так просто это было бы реализовано в стандартном редакторе.
Такая же ситуация, анонче. Два года в qa automation. Кажется, что сильно засиделся.
Как мне кажется, легче всего будет переметнуться в бекенд, т.к скорее всего ты уже как минимум знаешь как работают сети, БД. Попробуй написать несложный проект на Джанго, поймёшь надо тебе оно или нет.
Разве что в комплекте с конкарент аналогом питона.
Он работал прокладчиком проводов в ростелекоме два года
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
def vnat():
nonlocal x
x = 5
print('vnat:', x)
vnat()
print('inner:', x)
inner()
print('outer:', x)
outer()
print('global:', x)
Вот вывод:
vnat: 5
inner: 5
outer: 5
global: 0
В def outer() берется значение у def vnat()(5). То есть ''заражение'' коэффом идет идет все переменные подряд. А как указать def outer() со значением nonlocal x из def inner()[2]?
Выход мне нужен:
vnat: 5
inner: 5
outer: 2
global: 0
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
def vnat():
nonlocal x
x = 5
print('vnat:', x)
vnat()
print('inner:', x)
inner()
print('outer:', x)
outer()
print('global:', x)
Вот вывод:
vnat: 5
inner: 5
outer: 5
global: 0
В def outer() берется значение у def vnat()(5). То есть ''заражение'' коэффом идет идет все переменные подряд. А как указать def outer() со значением nonlocal x из def inner()[2]?
Выход мне нужен:
vnat: 5
inner: 5
outer: 2
global: 0
По времени он не ограничен, просто задания из этого модуля бесплатные, а потом, если хочешь, нужно платить. Не могу сказать о нём ничего, потому что это мой первый курс по программированию вообще. Скилбокс все обсирали и там нет бесплатного демо, поэтому выбрал яндекс для начала.
ок, понял. если что будешь платить? а про степик не слышал? про питонтутор? про информатикс?
Что знаешь о курсере?
никак, сам Гвидо указывал на такие нюансы. Остается референс на x. Единственный вариант работать с объектами Singleton и идентификаторами.
скажите, куда пойти, если хочешь работать с питоном, но не хочешь в веб (доставать странички и класть обратно, о других применениях хз)?
Как полёт?
Да есть вакансии и на обычное писание командных скриптов. Но тебя туда не возьмут, скорее всего. А так да, говорят еще машинлернинг, но про это не знаю нихуя.
Я сам сначала в бэк идти не хотел, но потом втянулся, все-таки инетересно это.
о, расскажи, что именно интересного
просто в моем понимании (точнее после общения на двачах) у меня сложилось впечатление, что это вообще макакин труд
я к этой идее отношусь с подозрением - все-таки питон сложный язык и макакой тут быть не очень просто
алсо, почему не возьмут на скриптописание? слишком домэйн специфик?
У меня есть for key, value in json:
——for dict in value:
——If oneField != “” and secondField != “”:
—— break
————-for key2, value2 in dictionary.items():
——————-и тут уже условия пошли дальше на прочерку.
Работает не очень быстро, оно и понятно, но я не придумал ничего лучше. Спасибо
Да, спасибо!
Дота саенс.
А я ебу какие у тебя там данные.
Да хоть пятерной, если это нужно. Или ты на одном и том же уровне несколько раз итерируешь, но вложенно?
Пример какой-то корявый.
>но не хочешь в веб (доставать странички и класть обратно, о других применениях хз)?
Что лол, ты плохо понимаешь что происходит на бэке среднего проекта, куча межсервисного взаимодействия, шедулеров, очередей, асинхронных задач.
ну это кажется так из-за выражений типа "веб-макака" и прочее. Но они относятся к пыхопешникам и прочим джаваскриптерам. По факту ты будешь писать реальные приложения, которые будут решать реальные бизнес-задачи. Попробуй, посмотри на джангу
>Джанго
>Фреймворк
>Нет асинхронки
>Решает задачи
Это потому сложные процессы забирают у таких макак и переносят на Go при наличии NumPy?
>Нет асинхронки
И? Бэкграунд процессы есть, воркеры есть, что ты еще хочешь от веб-фреймворка, шизло?
>Это потому сложные процессы забирают у таких макак и переносят на Go при наличии NumPy?
Что за мешанина "умных слов"?
Джанго это большой и зрелый фреймворк со своей большой нишей. Далеко не везде нужна асинхронность.
Для асинхронности есть свои фреймворки.
Numpy вообще к теме не имеет никакого отношение, это про принципиально другой класс задач.
При этом питон не для макак, потому что на питоне макака-задачи не делают. Их делают на других платформах.
Вложено итерирую, да.
Двачик помоги. Другану нужна помощь в Делфи. Я в этом не шарю от слова совсем, а над ним нависла угроза отчисления. Нужно нарисовать Чебурашку. Поможет кто? (желательно код, если вы понимаете как его сделать)
Это копия, сохраненная 10 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.