Это копия, сохраненная 12 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1923442 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
исходник: https://dumpz.org/bASGKD8cCFDf
С любым "большим" сайтом не стоит связываться, ну или целенаправленно им заниматься и предлагать актуальные услуги.
Я не особо много работал с вк, телегой, хх, яндексом и пр., но там такого ужаса не было, уж точно не приходилось лазить по китайским форумам, чтобы алгоритмы подписей искать
У болшинства из этих есть апи, речь про другое.
Так точно!
>У джанги отличные доки (одни из лучших для пистоновских либ, имхо)
Вот например, смотрю урок по джанго. Автор написал кусок кода (ПИК1)
Мне интересно откуда он взял эти аргументы для функции
Я повторяю этот код но ИДЕ подсказывает мне какую-то хрень, args, kwargs. (ПИК2)
Ладно думаю я, иду читать библиотеку https://docs.djangoproject.com/en/3.1/ref/models/fields/#charfield
Нахожу нужное место, и там написано class CharField(max_length=None, options) (ПИК3)
Окей, я вижу аргумент max_length, но что содержится в *options, не хз.
Понять не могу где мне искать тот самый db_index=True, который в видео уроке.
Прошу вашей помощи.
Ты просто пока недостаточно знаешь про сам питон, а в случае с db_index и бд так же, подтяни знания и потом все будет понятней
Прокручиваешь в начало и видишь field options.
Что тебе интересно то и делай. Хочешь датасаенс, хочешь сайты парси, хош ботов пиши, хош скрипты.
Бота, который рандомно пару раз в день будет писать "Бля, че б такого сделать?"
print(message * times)
say('привет')
say('мир',5)
say()
в итоге требует аргумент к message, хотя он указан по умолчанию? учусь по индусскому учебнику
def say(message='ya hui', times = 1):
Тогда тебе на вебкам.
print(a * b)
gnida_skazala('ya pidr ')
gnida_skazala('no dobri', 4)
gnida_skazala()
1) почему в выводе не присутствует gnida_skazala('no dobri', 4)
2) почему функция бежит в бесконечной рекурсии и заканчивается
RecursionError: maximum recursion depth exceeded while pickling an object
всмысле
>1) почему в выводе не присутствует gnida_skazala('no dobri', 4)
Потому что у тебя функция внутри себя 2 раза подряд вызывается, естественно она не дойдёт до 2 вызова, пока ты не добавишь условие на break для 1 вызова.
>2) почему функция бежит в бесконечной рекурсии и заканчивается
https://stackoverflow.com/questions/3323001/what-is-the-maximum-recursion-depth-in-python-and-how-to-increase-it
Есть смысл его читать после первого Лутца? Я так подумал, что уж лучше наверну книги Стива Лотта (Functional Python Programming, Functional Python Programming), пусть они и не совсем application-ориентированные, но хоть intermediate.
Большие вообще эти книги? Стоит читать? за сколько осиливаешь одну книгу например?
Ну некоторая часть перекрывается, но в целом там достаточно много практической инфы. У Лутца, я так понял, намеренно многое упускается, потому что это для второй части.
Лотт крутой тип, да. Тоже облизываюсь на эти книги, но пока руки не дошли.
Есть большие (Лутц по 1500 страниц каждая книга), есть маленькие, страниц по 300. Я-то не программист, а научный работник, мне некуда спешить, весь код впечатываю для практики, трачу где-то по 2 часа в день, 30-40 страниц.
Да, Лутц большой и, как многие считают, излишний. Но так как мне некуда спешить, я решил разобраться в структуре языка поэтому и проходил потихоньку. Но вторую книгу (тоже на 1500 страниц) желания проходить нет.
>>32672
А хочу запилить прогу по computer vision по распознаванию микроструктуры шлифов, но уже с каким-то интерфейсом, чтобы легче было с ней работать. И была идея запилить интерфейс для OpenCalphad (это межинститутская оупен-сорс прога для расчета фазовых диаграмм, последний раз, когда я с ней работал, интерфейса там не было).
Да я много чего учу, тот же немецкий, например. Но это все для научной работы, как и книжки, которые я читаю (сейчас, например, читаю "Теорию упругости" Лурье, попробуй осилить). Но зарплаты в пост-совкой науке небольшие, если, конечно ты не у корыта, и в конечном итоге путь один - съебывать.
У тебя message как раз не указан по умолчанию, это позиционный аргумент, сам его вводи
Сколько башляют, пацан? алсо читать не мешки ворочать, это по кайфу
я гружу шпалы еври дей, это выматывает пиздец, если ты не был в курсе.
>Сколько башляют
Примерно 400-500 долларов.
>пацан?
Я может даже старше, чем ты.
>я гружу шпалы еври дей
Сколько платят за шпалы?
за шпалы 266 баксов платят.Это средняя по области у нас ЗП
так что у вас выходит огромные зарплаты?
а в науке у нас помню требовался лаборант, там 150 долларов вроде было указано.
>так что у вас выходит огромные зарплаты?
Это со стипендией от академии наук, которая через год закончится. Короче, это меряние нищетой, по-моему, бессмысленно.
>зачем ты учишь немецкий, например?
Немецкий - второй по значимости язык для физиков и инженеров после английского, например, есть много вещей, которых нет на английском. К тому же, в сети он представлен прекрасным техническим издательством Springer, книги которого можно качать и читать. Ну и германский мир мне нравится больше английского, может туда и съебу (хотя я знаю еще один северноевропейский язык, и может съебу именно туда, но это все не точно, не хочу загадывать).
>А что насчет китайского?
А что на счет его? Китайцы - отличные копировальщики, но по сути у них только 3 нобелевки по физике и одна премия Филдса, и то у ученых, которые работают в других странах. Да и китайская культура мне совершенно не близка, нет персонального интереса, а это важно в изучении второго иностранного после английского.
>>32806
>алсо немецкий сложный или хуйня на палочке?
Сложнее английского раза в полтора-два. Есть три грамматических гендера (с каждым существительным ты должен еще и учить при один из артиклей + окончание, которые тоже разные) и 4 падежа вместо 2 у английского. Немного иной порядок слов, чем в английском или русском (то есть в простых предложениях второй глагол ставится в конце предложения, типа "Я могу сегодня утром в ресторане булочку покушать") + английский прост тем, что там много международных или сленговых слов, которыми ты пользуешься на русском, в немецком неизвестных и диких слов больше, к тому же они любят объединять несколько слов в одно со сложным комплексным значением.
Нет, это известный мем, на форчане проскакивал.
Есть функция, в которой импут.сплит. Хочу написать исключение, но не совсем понимаю, как сделать, чтобы при возникновении ошибки эта же функция заново вызывалась.
Так сказать, зациклить, пока не будут введены данные, без ошибки.
Делаешь бесконечный цикл и брекаешься если всё ок.
def input_validator(a):
if a=='':
raise ValueError("Input is empty")
Тебе все равно придется логику проверки значения выносить. Потом цикл
while True:
try:
a = input()
input_validator(a)
except ValueError:
continue
Continue не даёт выйти из цикла. Но я бы взял tenacity и сделал бы обёртку. Пока результат будет пустой строкой повторяй a = input(), как оказалось библиотека хуево описана, но большинство задач таких решает
После try except в конце else: break. Если не было exception выйди из loop, ну или в try засунь.
А официантом кто будет?
Серега, это ты?
не вкатывайся в пистон. Вакансии процентов 90 на ml инженеров, где выпускники матфаков только котируются. А на бекендеров-джангистов приходится 10 проц вакансий с ебейшей конкуренцией.
На твоем месте я бы вкатывался либо во фронт( да да, конкуренция не ниже, но вакансий ГОРАЗДО больше) либо в автоматизацию тестирования( тут кстати пистон неплохо распространен), что по сути тоже программирование но немного утилитарное, а не креативное.
я скозал.
кстати, зачем писать после цикла тру?
можно же просто написать вайл. разве он по умолчанию не тру?
Пиздец кстати, неужели так много программистов вкатывальщиков? или мало работы?
Судя по питону да и прочим видимо языкам - вкатится в эту хуйню сложнее,чем в любую другую профессию,потому что как минимум нужно сидеть и учить, пытаться, пробовать, кодить.
А в любую другую профессию с работой руками например вкатиться намного проще, там тебя на работе будут обучать что и как делать, начиная от стройки и заканчивая автосервисом такая хуйня, там нельзя самому научиться и никто не ждет что ты прям с нуля будешь все делать.
а в программировании никто не будет тебя обучать, им надо чтобы ты сразу уже мог делать что нужно работодателю.
Проще говоря - в других работах если ты умеешь уже делать многое то ты ПРОФИ ПО УМОЛЧАНИЮ, который может требовать себе привилегии.
в кодинге по дефолту ты должен уметь делать многое, это стартовый этап.
в автоматизации сразу (без опыта ручного тестинга) будешь очень грустной макакой за небольшую зп
Таких как ты каждый день по вагону здесь. А представь, что творится в целом, если в каждой второй ссаной видяшке на ютубе рекламируют инфоцыганские курсы по вкату вайти.
ну там же дохуя разного рекламируют, в основном это не питон. алсо из вкатывальшиков наверняка 80% отваливаются в процессе.
Посоветую искать работу барменом.
Хуй знает, я пока не решил.
Алсо допустим курсы рекламируют дохуя, но так же ведь дохуя рекламируют биржи в смартфоне или азино 777.
Неужели много людей на такое ведется?
Если тебе лень закомментить цикл, то вместо условия можешь написать False, и тогда он никогда не выполнится.
То есть тру по сути не несет смысла, если условие фолс не применяется никогда?
Почему в языке не реализовали бы так, чтобы условие тру не обязательно было писать?
>То есть тру по сути не несет смысла
Нет, оно несёт смысл константного условия, что цикл будет выполняться всегда, пока внутри него не выполнится условие для break.
Тру несет смысл. Вайл работает проверяя условие, ты можешь этим управлять. Когда тебе нужен бесконечный цикл, ты обеспечиваешь
всегда истинное условие тру.
То есть при значении тру цикл остановится только после брейка?
Значит любое условие по умолчанию будет верным, кроме отдельно указанного неверного?
>вместо тру например вайл а !="
Если у тебя в коде есть переменная a и она никак не изменяется внутри цикла, то ты можешь написать while a, и это будет тоже самое, что while True.
Цикл проверяет свое условие на каждом витке. Бесконечный цикл это всего лишь отдельный паттерн, использующий это свойство, нет никакого смысла его как-то выделять средствами языка.
Кстати, слышал что какой то преподаватель по питону говорил типа применять брейк в цикле - дурной тон.
Это так?
Несколько странный вопрос: как добавить свой оператор в Питон? Хочу поиграть с сурс-кодом и запилить свой оператор в Пистон, с чего начать?
ну это был чел который участвует во всяких соревнованиях по кодингу, может у них там за эту хуйню очки снимают, я хз.
В соревновательном кодинге своя атмосфера и свои преколы.
Можешь устроиться водителем троллейбуса.
>Неужели много людей на такое ведется?
Все хотят иметь высокооплачиваемую работу, где надо работать головой, да ещё такую, с которой "весь мир открыт". Нынче кризис и дальше будет только хуже, прочие специальности сокращаются. А там, где надо работать руками, не престижно, типа "для васянов".
Вторая известная приманка - это фондовый рынок, где ажиотаж среди вкатывальщиков-инвесторов огромный, все хотят "работать на бирже", покупать-продавать разные лоты и на этом зарабатывать. И реально на это многие покупаются.
Ты на редкость адекватен в своём понимании, таких как ты редкое меньшинство
>а в программировании никто не будет тебя обучать, им надо чтобы ты сразу уже мог делать что нужно работодателю.
Чему-то всё-таки обучают или дают время обучиться. В вакансиях эти вещи перечисляют в разделе "желательно".
ну допустим чтобы ебаться на бирже не нужно нихуя кроме денег стартовых. а чтобы вкатываться в программы надо же реально это задрачивать.
Мало у кого хватит на это желания и терпения.
К тому же ок, пусть они там хотят за 300к/сек работать, я считаю что норм зарплата для программиста и 40-50к.
Один хуй это больше чем на мухосранском заводе за 20к мерзнуть в цеху
>Нет, славянские языки сложнее германских.
Преувеличено даже в этой картинке. В славянский языка сложные формы слова, а германских очень сложные комбинации слов.
В славянских времена образуются добавлением суффиксов-окончаний, а в германских вспомогательными глаголами и артиклями. Комбинация дополнительных предлогов, глаголов, отделяемых приставок может очень сильно менять смысл.
Вот тупо выпиши все времена глагола run в английском.
А потом добавь местоимения и специфичные модальные глаголы
run away
run for
run up
run over
run on
run off
run out
run with
Комбинации индивидуальны для каждого глагола. Понимать смысл очень-очень тяжело.
Главная проблема при изучении германских языков.
Грамматика относительно проста, но мнемоника очень сложна, на порядок сложнее и выразительнее, чем в русском языке.
> а чтобы вкатываться в программы надо же реально это задрачивать.
Вот это не все в состоянии осознать. Считают, что программирование это примерно как бухгалтерия, потратят сколько-то времени и разберутся.
А тут полностью мозги надо менять. И огромный объем сопутствующих знаний нужен.
У меня в it уже 7ой год стажа пошёл, и последние 1.5 года стагнация в развитии, а по отношению к рынку так полная деградация. И я понимаю, что лучше бы пошёл сейчас работать руками, потому что it меня заебало, мне уже почти 30, и мозги у меня медленные. И если бы меня сейчас взяли на позицию суши/пицца/бургеродела за ту же зп, что в it, либо даже на меньшую, но с гарантией, что через пол года я буду получать столько же, то не думая бы свалил.
Пайтон сойдёт для начала. С одним языком ты всё равно нахуй никому не нужен, но с его знанием ты сможешь выучить другие. Смотри: у языка есть библиотеки и фреймворки (в зависимости от отрасли тебе нужно уметь в разные), параллельно с языком нужно знать абстрактные от языка вещи вроде (алгоритмы, базы данных, сеть, структуры данных, принципы архитектуры программ более-менее переносятся из языка в язык). Освоить на 80% сложный фреймворк - ну, не знаю, для меня (а я вкатывался с нуля) это было сложнее, чем освоить на 80% основной язык.
Соответственно, если ты освоил просто пуйтон и ВДРУГ решил уйти в джаваскрипт/руби/сишарп/лисп, твоя трата времени на пуйтон не была впустую, так как ты не инвестировал пятнадцать лет жизни в тамошнюю атмосферу и много общего узнал параллельно. С нуля за месяц научился клепать жирных телеграм-ботов на пайтоне? Тогда для того, чтобы делать таких же ботов на руби, тебе понадобится уже неделя - и так далее.
Есть что почитать про принципы архитектуры программ? Мой код выглядит как говно и макароны.
>чтобы вкатываться в программы надо же реально это задрачивать.
Надо сидеть за пекой и много задрачивать. У какого-нибудь условного официанта который привык на ногах работать организм будет в ахуе от того что приходится целый день сычевать за пека. Причем и на уровне психики и физиологии. Все эти васяны которые покупают курсы и пытаются вкатится никогда не станут програмиздами и айтишниками просто потому что не привыкли сычевать за пекой с детства. Именно по этой причине большинствой ойтишников это задроты с самого детства, которые сычевали со школы если не с садика.
>А потом добавь местоимения и специфичные модальные глаголы
On, off, out и т.д. - это не местоимения и не специфичные модальные глаголы, а предлоги. У меня они никогда не вызывали проблем в сочетании с глаголами (разве что в самом начале изучения языка), всегда их интуитивно понимал.
В германских языках предлог может полностью менять смысл глагола, чего не бывает в русском.
Сравни глаголы
run vs run out
не говоря уже про вырожденные случаи вроде глагола take
Интуитивно фразеологические глаголы понять невозможно, пока ты много лет на язык не потратил, не наработав какую-то интуицию на огромном объёме текстов.
Пример из словаря:
> Can you run off 200 copies of this notice? — Можете сделать 200 копий этого объявления?
>Есть что почитать про принципы архитектуры программ? Мой код выглядит как говно и макароны.
Эти два предложения никак не связаны.
Книжки по архитектурам есть. Но на качество твоего кода они никак не повлияют.
Намного полезнее читать разные стандарты оформления кода. Обычно там приведены примеры как делать, как не делать, и даже обосновывается почему.
ну я примерно так и понял, когда начал знакомиться с программированием. Это типа как тачками, если ты например не умеешь нихуя и не знаешь как работает двигатель и остальное то это жопа.
Но если ты например разобрался с механикой рено то чтобы разобраться скажем с фордом тебе потребуется намного меньше времени, чем если бы делал это с нуля.
Принципы работы общие, отличия в конструкции.
>>33782
ну это пиздец, да. думаю такие отвалятся сразу же как поймут что нужно потратить на это прилично времени и никто за это время не будет платить.
>>33786
Это же вроде классическое наебалово, не так ли?
>>33789
в работах руками очень четкий потолок зарплаты, и он довольно низкий. Больше можно заработать если самому открывать бизнес хуизнес, что то мутить, тут наебать, там кабанчиком метнутся, и это уже совсем не то, чего ты хотел изначально.
ну да, от склада ума и характера тут вообще дохуя зависит.
Дохуя людей просто не любят думать, например.
Многие не любят получать новые знания.
Я всегда охуевал с того что есть люди, которые при пользовании компом или даже смартфоном не пытаются понять как работает то, чем они пользуются, а просто механически запоминают что нажимать.
Это приводит к ебейшим ситуациям когда в другой проге такой человек видит что кнопки расположены иначе, какие то кнопульки "исчезли" и начинается ПАНИКА, что за хрень, где тут нажать??
Это просто наипиздецкий пиздец, есть у меня много историй из жизни не связанных с компами. Например из недавних что сложного в том чтобы кабель для телевизора положить в плинтус или собрать комод, тут даже мозгов не надо много для таких целей, но я помог проложить в плинтусе кабель, а мебельщик прилет на следующей неделе собирать комод за пару тысяч, хотя там делов на полчаса-час, но я не стал уже лишнего им говорить, а перешел на пиво. А еще многие охуевают что я сам собрал кухню, вот так вот взял купил в леруа, мне грузчики затащили и я за вечер большую часть собрал, на следуюущий день с перфоратором и уровнем все повесил и сэкономил десятку, под трубы только чуток криво столешницу вырезал. Тут даже мозгов не нужно взял шурик, засунул туда биту h4 и крути себе параллелепипеды из заранее нарезанных и размеченных деталей, как в детстве конструктор. Большинство боятся даже этого, где особо думать не надо, а ты про компы и программы где нужно хоть чуть чуть иметь мозг.
С возрастом начинаю относится к этому как к явлению природы это как снег идет, как трава зеленая, как небо голубое, так же и люди не умеют пользоваться мозгом в большинстве своем.
>в работах руками очень четкий потолок зарплаты, и он довольно низкий.
Не скажи. Низкий он, когда ты по найму на ставке работаешь. Да и то условно маленький, свыше 100 в месяц может быть. Если же ты на себя работаешь, в принципе это как бизнес, но не в том смысле, что ты людей нанимаешь и ими руководишь, то там иногда и сильно больше зарабатывают.
Сейчас для тех, кто работает руками и делает что-то квалифицированное условия довольно хорошие.
>а мебельщик прилет на следующей неделе собирать комод за пару тысяч, хотя там делов на полчаса-час, но я не стал уже лишнего им говорить, а перешел на пиво.
А сколько должна стоить работа на час + дорога + переговоры с заказчиком, планирование времени и т.п.? Ну молодец, бесплатно для знакомых поработал.
>Если же ты на себя работаешь
Я про это и написал
>что то мутить, тут наебать, там кабанчиком метнутся
Это основное что ты будешь делать, работая на себя.
Сама работа там отходит на второй план
БЛЯ, ТЫ НАПОМНИЛ!
Пиздец я с этой хуйни в шоке когда слышу такие истории типа за 5 тыщ кран поменяли или там масло сменили в машине.
На таких чуваках греются все подряд, а потом идут базары что кругом наебалово.
Потому что реально часто наебалова вагоны. Люди не хотят думать - их наебывают.
От установки виндовс за 10 тыщ, тут по тредам ходит квиток в качестве мема, до охуительных историй из сервисов когда меняют несуществующие детали.
а самый ТОП ЖИР навара это ПЕРЕКУПИКИ, когда у честного деда покупается машина за 500к, полируется на мойке и на следующий день продается за 700к.
>Сама работа там отходит на второй план
Ну это ты зря, как раз нет. У тебя просто работа и прайслист со сметами. Причём в случае работы руками всё намного прозрачней и понятней, чем когда "умственный" труд, потому что результат твоей работы материальный.
За материальное легче платят, чем за нематериальное.
>ну да, от склада ума и характера тут вообще дохуя зависит.
Так это все детерминировано генетикой и воспитанием, о том и речь. Надо просто родиться в семье программистов/математиков/ученых и с большой вероятностью сам будешь программистом.
>Дохуя людей просто не любят думать, например.
Думать тяжело и "дорого", позвать славика проще.
>>34126
>ПЕРЕКУПИКИ
Непонятно чему ты удивляешься, делать меньше и получать больше это самое изи.
>>34128
Это так, да там 2 строчки добавить че ты там пишешь 2 недели. Вон Ванька то работает сантехником, вчера смеситель установил и 3 тыщи сразу в карман положил.
>Вот нихуя. Там срабатывает ДА ЧЕ ТАМ ДЕЛАТЬ Я ЩАС САМ ЗА 5 МИНУТ.
Это как раз про умственный труд. Или про бытовую работу руками, типа шкаф собрать.
Как только что-то сложное, так всё как раз очевидно. Никто не скажет, да я сейчас сам за пять минут под аргоном эту нержавейку сварю. Тупо нет ни техники, ни умений. Человек сам интуитивно понимает, что вот это он сделать не сможет. Может только ему интуитивно неприятно платить много денег за "работу для быдла".
А вот с IT другая история. Конфиг поменять или несколько строчек написать, почему это должно стоить дорого?
Вот профессиональная версия винды стоит 300 долларов, официально от Майкрософт. Ты пишешь программу, которая по сложности и возможностям намного примитивнее, а по сервису слабее. Разумно, что и стоить она должна существенно меньше.
Другая интуитивная модель. Ремонт квартиры или машины стоит меньше, чем квартира-машина. Почему обслуживание компьютерной техники, программы для неё, должны стоить больше, чем техника? Вот менталитет не готов это принять. А техника сейчас стоит немного.
>Как только что-то сложное, так всё как раз очевидно.
Нихуя подобного. Когда сервисменствовал мне регулярно говорили ДА ЧЕ ТУТ 2 ДЕТАЛИ ПРИПАЯТЬ ЖАЛЬ У МЕНЯ ПАЯЛЬНИКА НЕТ ЗАШО ТУТ 5 ТЫЩ? КАКАЯ ЗАМЕНА ЧИПА?
>А техника сейчас стоит немного.
Ну иди посмотри сколько стоит 3080, или пс5.
самое основное там поиск клиентов и работа с ними.
Согласование сроков. оплаты, материалов и т.п.
документы это мелочи, тем более большинство вчерную работают без всяких бумажек
замену чипа разве делают сейчас?
Это тупо невыгодно и не стоит того.
реболлят просто по фану в основном, как и ремонт блоков питания и т.п. - дешевле и проще купить новый.
У самого лучшего языка в мире есть такое https://rubystyle.guide/
У вас тоже что-то должно быть, хз
Другой не-сервис анон.
Часто нужны какие-нибудь замены разъёмов. И вот там вопросы возникаю, почему 15 минут работы по перепайке копеечного разъёма, при том что ты девайс сам в сервис привозишь и паяют тогда, когда им удобно, стоит как пол дня дорогой работы.
Плюс всё ещё окружено примитивным разводиловом откровенно на лохов, когда даже за быструю примитивную работу, не требующую особого опыта или инструментов просят неадекватно много.
Это реальный жесткач, алсо как тебе жесткое наебалово с настройкой телефона за пару тыщ в салоне связи?
типа - вам настроить телефон? тыща за настройку, тыща за установку приложений.
В чем проблема взять с бабысраки 2к рублей если курица не умеет и не хочет учится пользоваться телефоном?
Негуманно когда бабасрака бесплатно мозги ебет. Если сама не хочет делать, если ей родня не хочет делать то пусть платит. Аве капитализм. Вообще обьяснять тем кто не желает учиться что либо это наблагодарный труд который должен хорошо оплачиваться. Именно поэтому когда вижу что какой-нибудь мастер взял с бабысраки 30к рублей за настройку шинды мне нисколько не жаль бабусраку. Вероятнее всего она мразь которая изьебала мозги родне, думала что самая умная, за что и поплатилась.
>В чем проблема взять с бабысраки 2к рублей
Отравление рынка. Мошенники и разводилы отравляют рынок, о рынке формируется мнение, что там постоянно наёбывают, клиенты противятся этому и ищут желание себя наебать во всём.
При этом бьют с двух сторон, одни разводят на ерунде, формируя этим отношение к тем, кто услуги оказывает, другие халтуру предлагают за копейки, хотя не в состоянии сделать нормально, либо рассчитывают заработать на разводках. Но при этом формируют какое-то мнение у клиентов о стоимости услуг.
На рынке массовых услуг разводилы успешнее.
Рыночек это не всегда честная конкуренция. Посмотри на крупные компании, мелкософт спонсирует опенсорс чтобы давить мелочь, нинтенда судится со всеми без разбора. Так что все норм. К таким мастерам все ровно идут только бабысраки.
чот стыдно) смотрю на гитхабах разные исходники, часто не понимаю логики при разбиении программы на классы, функции, пакеты, каталоги.
Ну почитай про базовые вещи: закон Деметры и слои архитектуры приложения, про связность и связанность
Допустим, я общаюсь с неким API и все запросы (которые отправляются питоновскими скриптами) отправляю с одной учетки. И у меня есть набор таких скриптов с разными запросами.
1. Хочу, чтобы не светился пароль в скрипте - сейчас у меня тупо строка вида
api = apisdk.Client("serverip", "user123", "password123")
2. Не хочу вбивать пароль каждый раз, когда запускаю скрипты
Нагуглил keyring, установил.
Запустил консольку питона и руками сделал
import keyring
keyring.set_password("API","user123","pass123")
Окей, креда завелась в виндовом кейринге.
Теперь я могу дергать её внутри скрипта через keyring.get_password("API","user")
Но как долго она там хранится?
Какие плюсы относительно кейринга?
Прочитал по диагонали и так и не понял, где фактически хранится креда. Видимо, это не для меня.
Кейринг это гуишная юзерская хуйня.
Значения хранятся в переменных окружения, дотенв позволяет их подгружать из файла.
Ну смотри, ебло которое не умеет задавать вопросы. У тебя твой говноскрипт лежит в гите и ты не хочешь палить свой обоссаный логин и пароль? Так? Тогда импорти модуль который не будет индексироваться гитом. Просто я хз как понимать твое
>>34526
>Хочу, чтобы не светился пароль в скрипте -
Или поясняй что ты имел ввиду, тут телепатов нет.
Сам код их берет из переменных, дотенв загружает из файла в твоей среде. В разных средах оно использует свои переменные без всяких изменений.
Окей, под "Хочу, чтобы не светился пароль в скрипте" я имел в виду "Хочу, чтобы не светился пароль в открытом виде где бы то ни было"
Т.е. вариант хранить его в соседнем файле не подходит.
Всё верно
>Не хочу хранить в открытом виде
>Не хочу вводить каждый раз при запуске скрипта
Ты просто не знаешь, сколько креда в кейринге живет, ведь так?
В чём разница между ними то? Какие лучше использовать?
Костыль, кривой.
так подожжи
я сделал файл hui, куда вбил пару переменных (у меня не креды если что)
потом сделал в новом файле import hui и тут есть код с вызовом этих переменных
но если я выполняю второй файл, он ругаетсо на "переменная is not defined"
ага понятно, при обращении к переменной надо перед точкой название модуля указывать
а можно изменить это поведение, чтобы по дефолту все переменные искались в определенном модуле?
ок, спасибо
или так. спс
Ansible vault. Либо Keyring
Если сделать sorted(список, reverse=True), то все сортируется по убыванию первого элемента. Как сделать так, чтобы сортировка учитывала первый элемент и второй, чтобы была сортировка и по числу и по алфавиту?
В общем, есть у меня такая структура
/script1.py
/script2.py
/script3.py
/src/mod1.py
Все три скрипта включают import mod1
По понятным причинам (модуль лежит не на одном уровне со скриптами) появляется ModuleNotFoundError
Пробовал добавить /src/ в переменную PATH, но не помогло
Как заставить питон искать модули в /src/?
RTFM
Думаю начать с документации питона и книг лутца, параллельно переписывая свои шелл-скрипты на питон и решая задачки на литкоде с кодварсами. Подводные?
Сортированный список по числу и по алфавиту. Чтобы было 4,а 4,б 3,в 3,г
Сейчас сортировка только по числу, а если числа одинаковые, то по алфавиту нет
Спс броу
>Ну вот это выглядит как говно
Ну тогда засунь своё говно в ...\Python\PycharmProjects\{govno_project}\venv\Lib и не еби мозги.
Чел. Чем язык ближе твоему языку, тем он проще. Китайский до нэйтива ты никогда не подтянешь, а английский сможешь лет через 10 проживания
Ну я вот уже пол года вкатываюсь в МЛ. Трачу по 2 часа в день.
При этом у меня инглиш b1, я работаю программистом АСУТП и закончил норм вузик в ДС
Ориентировочно вкачусь через 8 месяцев
если применительно к множествам то а^в это элементы входят в A | B, но не входят в A & B
а A & B это пересечения множеств
Китайсткий это жёсткий ад, сколько там иероглифов, тысячи?
Фешенебельно.
Как это работает? Лямбда выдает Х, равный паре элементов, и эта пара сравнивается с элементами изначального списка попарно? Почему знак минус у первого элемента в лямбда-функции?
Я конечно нормально отношусь к каналу диджитализируй, но юзать вим в 2к21 это показатель ментальных расстройств.
Лямбда выдает пары и эти пары сравниваются с другими такими парами, определяя место изначальных элементов.
Минус потому что числа сортируем по убыванию.
Что до 27 лет ты желал собственную мать.
Бля, объясняю как мудак походу) Мой случай такой: есть 4 онлайн-магазина, я хочу искать один и тот же товар среди них, получать от каждого ответ и находить самый дешевый. В каждый из магазинов надо передавать разные куки, поисковая строка тоже у всех разная, но товар один.
Парсеры я уже написал, теперь думаю как можно грамотно организовать доставку сырого HTML. Any advices?
не, requests я знаю. запросы я сделал через aiohttp.ClientSession().
получилось 4 функции, выполняющих запросы и отдающих HTML, но чувствую, что это нихрена не питонвей.
Ну так напиши мап-функцию, которая в зависимости от типа магазина на твои входные данные (товар) будет выдавать свои куки (словарь с ключами-магазинами и значениями-куками).
Куда это надо гуглить?
Сделай класс на каждый сайт, там хранишь сессию и функцию для формирования урла. Потом заводишь списочек с этими объектами и гоняешь через него.
Ок, попробую. Спасибо за совет.
>Any advices?
Класс под запрос.
Дальше классы под сайты. Например класс Yobashopreauest и наследующие BolshoyYoba, SredniyYoba, MaliyYoba со статическими методами. Чисто не глядя четам у тебя за данные и тд. Тут же можешь методы написать чтобы инфа на выходе была более-менее одинаковая.
Дальше обработчик ну и дальше сам докумекаешь.
Конфигурацию смени на Python:Module
Внутри пропиши
"configurations": [
{
"name":"Python: Module",
"type":"python",
"request":"launch",
"module":"src.main"
},
ИМХО, но это отвратительно.
Лучше почитать статьи (от разрабов)/документации/кукбуки ну или глянуть видео от непоредственных юзеров/разработчиков технологий.
сотри .lock. гугл дохуя вариантов выдает, еще и решенные вопросы на SO
Простой метод .index не подходит он только первый индекс дает, а повторы игнорит. Есть какой-нибудь простой способ эти индексы получить?
в индексе можно конечно пердеть со старт стоп, но это сложно будет
Ок. Спасибо.
понятие опен сорс знаю, но абслютно не знаю, что там делать.
С++ тут HFT или микроконтроллеры
Java - Spring/Spring Boot очередной веб сервис
Python - Django/FastAPI веб сервис или сразу в Data Science по курсам/книгам.
Java сейчас очень актуальна, но и вкат дольше. Python для обработки данных охуеть как актуален. Там и задачи интереснее, чем просто CRUD писать, но и требования могут быть другие. Кроме языков тебе SQL и NoSQL надо освоить.
С++ как и MycroPython актуальны для IoT, кресты конечно же в почете, так как и ресурсы другие. Вот и выбирай.
ESP32 стоит 900 рублей, покупай и делай вебкамеры личные или JetsonNano за 12 тысяч для проекта ML на Python.
Осваиваю flask, столкнулся с проблемой:
На локалхосте форма отправляется нормально кнопкой submit с отображением другого шаблона после validate_on_submit, а на pythonanywhere проверка не проходится и отображается первый шаблон. Чудес же не бывает?
Смотри историю запросов, может что отличается.
Как узнать, имеет объект собственный атрибут/метод либо он унаследован от другого?
В документации нашел, что можно что можно накостылить модельку и связать через OneToOneField. Ты про это?
Yes
И вот я думаю как бы её исполнять, чтобы без целого браузера, может какой-то нодой?
Там в настройке каптчи может быть указано не давать задач. Ну, точнее invisible captcha
https://careers.tiktok.com/m/position/6760856207306524936/detail
Там написано MySQL. Совсем уже пукпокеры одебилились
Спасибо, друг
По-моему ООП это то к чему приходишь, когда функций становится овердохуя и они жирнеют с каждым разом.
Расширил я, значит, по вчерашнему совету дефолтную модель юзера. "Расширил" через OneToOneField - у меня теперь для всего этого есть класс Employee.
Как мне в админке для Employee выводить его имя и фамилию? В самом Employee у меня только ссылки на юзера и на роль, и админка только два этих поля отображает
Наверное, это то, что ты ищешь
Но хотя бы пытайся иногда гуглить, прежде чем вопросы задавать
https://developer.mozilla.org/ru/docs/Learn/Server-side/Django/Admin_site#продвинутая_конфигурация
Не совсем. Хуево спросил просто, хотелось бы при переходе в конкретного сотрудника иметь возможность менять имя и фамилию, объявленную в дефолтном юзере. Это мне сам шаблон менять надо?
Ладно, я увидел про инстансы в твоей ссылке. Почитаю
Я вот думаю мб чего придумать. Гит какой-нибудь освоить может. Но я же не смогу обратно в гитхаб залить файлы, не установив какую-нибудь программу?
А он по умолчанию в винде стоит что ли? Я хуи пинаю на говноработе, она никак с айти не связана.
Это да.
Да, чет не подумал. Но так он не будет просто долго архивировать и разархивировать по тем же причинам?
перекатываюсь к вам из байтоебли - надоело получать копье за ебучую тонну требований
скажите, что должен знать питон разраб? (не дата сайнтист - не прет математика на таком уровне. Либо бэк либо мл инженер)
спасибо)
Да, заебись, за 30 секунд сжало, разжало минуты за полторы, спс.
Смотря чем заниматься будешь. В веб-фреймворках все операции с БД, как правило, уже за тебя написаны
а вообще, чел, раз уж ты мне отвечаешь
скажи плез, насколько вообще работа интересная?
Я просто в бекенде ничего не смыслю и что ребята пилят на нем тоже не особо то и знаю, тк лет 5 пилил ПО для датчиков всяких
почему питонистов называют макаками? реально что ли по клавишам просто так тыкать? Я из уважения к коллегам по цеху не очень верю, что работа в ИТ может быть макакишной
для меня просто большое удовольствие вызывает решение сложных задач, чтоб прям посидеть, во внутренности системы, в которой работаешь, повтыкать
это все есть в мире бэка?
Чел, если ты дурачок то может пойдешь в курьеры в яндекс еду?
Тебе какой бэк подавай? Если очередной REST это даже Java макаки, потому что там все с фреймворком. Недавно писал сервис эмуляции протокола Штриха на питухоне. Для байтоебства есть еще micropython для ESP32 и Pi. Хочешь и там задрачивай микроконтроллеры и прочую ебалу. Правда я думаю придется на C++ или Rust с ESP32 переходить, пока еще не пришла из Китая.
Бэк в основном хуйня полная, если не сам архитектуру пилишь.
В основном хуйня так как пилишь REST API CRUD с OpenAPI.
В основном архитектуру пилят те кто умеет, а разрабы уже чисто по стеку и реализации.
Я в одно рыло такие костыли лепил, что удивляюсь как все работало. Шина данных держалась на одном RabbitMQ, лол. Зато все сам, да. Отец, системный архитектор, говорил что я дебил (ну он вообще любитель Java) и в нормальную галеру меня не возьмут за такие проделки.
А ну и проекты госовские часто на SOA (какие нахуй микросервисы) монолитах с XML и WSDL на борту. И конечно же на божественной(нет) Java. Смузихлебы с Python нужны только коммерсам и то не всегда. Куча легаси на Ruby и PHP. Скорее на NodeJS перейдут чем на Python.
насколько я понимаю, он в принципе в бэк не советует вкатываться тем, кто ждет каких-то дико охуевших задач
либо from supermodule import your_task
либо архитектор ( от себя хочу добавить, шо хуй станешь вторым без работы первым)
мимо
Дак а чем плох import supermodule, это же значит что сидишь кайфуешь лепишь круды и чинишь если сломаются, будто на фронте свободы больше? Дизайн за тебя уже придумали, библиотеки тоже
да ничем, в целом-то, и не плох
главное, чтобы работа по кайфу была
кому-то в кайф круды лепить - в чем проблема? ни в чем
кому-то хочется поебаться прям - ну тоже ок
наверное вторым просто не нужно идти в бэк на питоне - либо кресты, либо еще что-то
сегодня проитал про контору postuf
никто не сталкивался?
рили там все так хуево и главный чел мусульманин, который запрещает даже дома пить?
Слышал что бек на питоне хуйня, что он не заточен под бек и основная его роль в дата сисенсе. Что можешь рассказать об этом, брешут? Или как жить, на что глядеть
я крестовик, соре
опыт в питоне на бэке только в унике
со стороны кажется, что да - чисто для бизнес логики
но для написание безнес логики особо то ничего и не нужно знать, кроме как БИЗНЕС в котором эта логика будет
если устраивает - вперед
>БИЗНЕС логика
Именно, а учитывая, что если монолит - Java, а если монолит Java, то фронт обязательно сука злоебучий AngularJS, то питону некуда примкнуть тут. Монолит на питоне? Ну нахуй. Такая ебака грозная получается, еще и вручную контроллить по сути, JVM же нет, а если микросервисы, то уже ближе к смузихлебству. Но просто REST на питоне? Ну хуй знает, даже Хуяндекс пилит микросервисы Python/Go судя по их хабру. Но там просто так уже не выпилить Я.Такси и не запилить на каком-нибудь чистом Go, не окупится, еще и новое спагетти появится.
>>38106
Он не то чтобы не заточен. Микрофреймворков с асинхронкой (забудь ссаную Джангу) уже дофига и на любой вкус, проблема с WSGI:ASGI, хотя и тут уже есть интеграция с nginx. Просто как бы помягче сказать, ну не сдался он никому, если только не пилишь соло или весь проект не строится на ML (ну с натягом можно туда вебсервис впихнуть, хотя он особую роль там не играет)
Я написал калькулятор для курсача и суть в том, что для некст лвл у калькулятора должно быть инженерный режим. Я не придумал ничего круче, чем создать второй вид калькулятора и сохранить ui файликом.
Алгоритм такой: Метод инит конструирует все и выводит первый ui обычного режима пик1, все классно работает. Нажатие кнопки '///' делает что-то self.ui = uic.loadUi('calulate_engineering.ui') и тогда старый пик исчезает и появляется новый интерфейс. Там как бы во втором ui все остается прежним, просто добавляется пара полей, но ничего не работает, типа жмякую кнопки, а не пашет, просто болванка. Подозреваю из-за того, что метод init заново не вызвал. Как можно реализовать такую дичь?
Когда запрос на oauth делаешь, то открывается страница с кодом. Его никак не получить в ответе что ли? Пользователь сам должен ввести его?
А что тогда смотреть? Пыха, джава и модный го?
вот есть код
https://www.codepile.net/pile/5R0dKWRO
что надо поправить чтобы в результате сложения экземпляров класса File генерировалось уникальное имя файла для создаваемого объекта класса File?
Чел можешь отписать в тг @jllik, есть пару вопросиков
Ну давай, расскажи нам.
есть ли какой-нибудь способ остановить безопасно бесконечный while цикл во время выполнения?
юзаю пайчарм, в цикле идет обработка риалтайм данных с камеры. Если нажимаю стоп в ide, то весь процесс стопится и до строчек, где я закрываю камеру просто не доходит
ну типа
while True:
___do_smth()
camera.stop() # до сюда вот не доходит при остановке процесса
Не силён в прерываниях через ide, но попробуй это:
while True:
____try:
______do_smth()
____except KeyboardInterrupt:
______camera.stop()
______sys.exit()
лучший, спасибо
Пизда рулю. При попытке юзания pip из виртуальной среды выпадают максимально странные ошибки (пикрил). Причем если запускать приложение (из докера) то все пашет, втф?
Пушто ты еблан и запускаешь не из под виртуальной среды?
Сначала activate -> переход в venv и потому уже python3 *.py.
Или настраивай PYTHONPATH=${PYTHONPATH}:/home/nick/tele2/webim
бамп, помогите!
покажи echo. Ты небось в пучарме еще дрочишь?
Какой еще уебанский? Если ты сервис запускаешь через systemd, то как ты еще graceful shutdown сделаешь без обработки signal?
Самая мякотка, когда в Process вложен Asyncio Loop и надо прям аккуратно все завершить и при этом загасить, так чтобы никто не думал kill -9 послать, ибо долго блять.
У тебя запуск идёт из системных каталогов, а не из под среды. Смотри сам, что тебе интерпретатор пишет. Там должны быть пути вроде
/home/vasya/virtualenvs/porevo/bin/...
Попробуй запускать интерпретатор не через activate, а напрямую как
/home/vasya/virtualenvs/porevo/bin/python my_script.py
Нормальная ошибка. У тебя какой-то webim/stats/types.py шадовит системный и всё охуевает.
Ага, дело в том что в той же дире находится файл types.py (который есть и в стандартной либе питона в /usr/lib). Опять "приколы" питона
Какие приколы? В JS такого что ли нет? Просто находятся дебилы, у которых проблема с фантазией
Есть Лист классов и есть обычный лист
Как блять сделать дубликаты объектов в листе классов в соответсвии с кол-вом повторений в обычном листе?
Сделал ка кна скрине и оно висит нахуй
Дубликаты я посчитал удобно а дальше хз заебало уже аутировать даже
Пикрил
1. Лист классов? Чего блять?
2. Повторения считаются с помощью collections.Counter, "дубликаты" убираются с помощью set
>1. Лист классов? Чего блять?
Питоновский list содержащий объекты класса Test
>2. Повторения считаются с помощью collections.Counter, "дубликаты" убираются с помощью set
Убирать повторения не нужно нигде, наоборот в листе классов должныбыть повторения как в обычном листе на основе сравнения строк листа и полей name Объекта класса
Функция upd пытается это сделать на скрине
Ты наращиваешь при итерации, вот он и растет бесконечно. Делай через range(len).
Алсо, аппенд сделает только два. Делай extend([item] * v-1)
Да я это понял, просто пытался пояснить что хочу примерно
Через рэнж попробую, спс
а вот с extend ЯННП
У * таки выше приоритет, лол.
Это как-то связанно мю что я копировал классы и они копились как ссылки?
Сам Cmake
cmake_minimum_required(VERSION 3.16)
project(pytest C)
set(CMAKE_C_STANDARD 99)
set(ENV{PYTHONHOME} "python")
set(ENV{PYTHONPATH} "python\\DLLs")
set(ENV{PYTHONPATH} "python\\Lib")
set(ENV{PYTHONPATH} "python\\Lib\\site-packages")
include_directories(python\\include)
link_libraries(python\\libs\\python37.lib)
add_executable(pytest main.c)
Ничего не поменялось чет
Ну если ты хочешь что-то менять, то надо в цикл оборачивать, а так можно и генераторным объектом обойтись, например.
https://ideone.com/wAJ2Sb
Генераторным выражением то есть.
Та ладно, я всего-то невнимательно вставил копирование.
Только вот оно имена не всем скопированным объектам меняет а только первым двум
Ну так ты только раз копируешь. Та же хуйня, что раньше, только с копией.
Какой же ты загадочный, пиздец просто.
Какая же ты скотина. Твой высер ничего общего с решением не имеет.
Теперь по сабжу. ОП. Тебе надо вывести отдельную функцию, а не определять все в инит и создать какую-то переменную типа self.status и с помощью этой переменной по нажатию кнопки подгружать новый шаблон в созданную функцию и просто вызывать ее по нажатию кнопки.
на питоне сложно писать в ООП стиле. Выглядит чужеродно.
Ну типа ты запечатываешь хуйню всякую чтобы она не протекала везде. Типа методы класса сразу пишешь чтобы не искать функцию хуй пойми где в программе и думать как блять это работает и как это нахуй отлаживать. А так у тебя сразу в классе его методы, понятней.
>>39039
Ну эт наследование когда ты можешь методы одного класса использовать в другом. Допустим ты созда класс овощи. А потом создал класс картошка, и класс морковка, и в них используешь тот же метод что в овощах.
>>39039
Это не ООП понятия, а компутер саенсовые.
Тебе надо читать про солид и паттерны, читать код нормальных проектов, читать нормальные формулировки всех определений и еще посравнивать разные языки, потому что например какой-нибудь ISP из SOLID сильно проявляется в джаве, шарпе и пхп, так как прямо пишутся интерфейсы, но в других языках без интерфейсов выдумываются какие-то свои пути его соблюдения, инкапсуляция тоже не про модификаторы доступа на самом деле и т.д.
Каноничный ООП сейчас это джава и те языки которые с нее все украли
>Каноничный ООП сейчас это джава и те языки которые с нее все украли
Ой блять, иди нахуй, душный легасипидор. Джава у него. Ебать ты дед вылез тут нахуй, джава сиплюсплюс. Хуй тебе в рот.
Какие у тебя проблемы с джаваскриптом, говно?
>Ой блять, иди нахуй, душный легасипидор. Джава у него. Ебать ты дед вылез тут нахуй, джава сиплюсплюс. Хуй тебе в рот.
На питоне ООП во всей красе не прочувствовать по причине отсутствия модификаторов доступа, интерфейсов и абстрактных классов. Так что такие вещи как инкапсуляция и полиморфизм тут забзать не получится. Если хочется прям ООПшного ООП, то советую попробовать Java, C# или на худой конец php.
Да ладно, олдфаг из прошлого) Ты последние версии пыхи видел? Там все тоже ООП что и в джавашарпах, плюс строгая типизация есть.
Рили? А как ключ паф выделить? Айди там или имя для пути.
>отсутствия модификаторов доступа
Есть, но неявные
>интерфейсов и абстрактных классов
Напиши свой интерфейс. В чем проблема? Абстрактные классы тоже есть ABCMeta
> инкапсуляция и полиморфизм тут забзать не получится.
https://www.geeksforgeeks.org/encapsulation-in-python/
https://www.geeksforgeeks.org/polymorphism-in-python/
Короче ты хуйню сморозил. Если есть необходимость применять такой подход, то пожалуйста, чаще всего нахуй не надо, а та же Жаба заставляет тебя это делать.
refactoring.guru
На практике вообще юзаются патчи и путы? Все ведь онли на пост/гет можно делать
Смузихлебская хуйня, видел может пару раз, и то скорее всего какие-то фреймворки из коробки такое предлагают.
Короч вот. Из вьюс и сериалайзера. Из этого нужно как-то сделать патч.
> class ListLeadScoreIngesterView(generics.ListAPIView):
"""
GET songs/
POST songs/
PATCH lead/
"""
queryset = LeadScoreIngester.objects.all()
serializer_class = LeadScoreIngesterSerializer
@validate_request_data
def post(self, request, args, *kwargs):
a_lead = LeadScoreIngester.objects.create(
eventType=request.data["eventType"],
version=request.data["version"],
parameters=request.data["parameters"],
payload=request.data["payload"]
)
return Response(
data=LeadScoreIngesterSerializer(a_lead).data,
status=status.HTTP_201_CREATED
)
> class LeadScoreIngesterSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = LeadScoreIngester
fields = ("id", "eventType", "version", "parameters", "payload")
def update(self, instance, validated_data):
instance.eventType = validated_data.get("eventType", instance.eventType)
instance.version = validated_data.get("version", instance.version)
instance.payload = validated_data.get("payload", instance.payload)
instance.parameters = validated_data.get("parameters", instance.parameters)
instance.save()
return instance
Короч вот. Из вьюс и сериалайзера. Из этого нужно как-то сделать патч.
> class ListLeadScoreIngesterView(generics.ListAPIView):
"""
GET songs/
POST songs/
PATCH lead/
"""
queryset = LeadScoreIngester.objects.all()
serializer_class = LeadScoreIngesterSerializer
@validate_request_data
def post(self, request, args, *kwargs):
a_lead = LeadScoreIngester.objects.create(
eventType=request.data["eventType"],
version=request.data["version"],
parameters=request.data["parameters"],
payload=request.data["payload"]
)
return Response(
data=LeadScoreIngesterSerializer(a_lead).data,
status=status.HTTP_201_CREATED
)
> class LeadScoreIngesterSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = LeadScoreIngester
fields = ("id", "eventType", "version", "parameters", "payload")
def update(self, instance, validated_data):
instance.eventType = validated_data.get("eventType", instance.eventType)
instance.version = validated_data.get("version", instance.version)
instance.payload = validated_data.get("payload", instance.payload)
instance.parameters = validated_data.get("parameters", instance.parameters)
instance.save()
return instance
вот есть код
https://www.codepile.net/pile/5R0dKWRO
что надо поправить чтобы в результате сложения экземпляров класса File генерировалось уникальное имя файла для создаваемого объекта класса File?
Ajax как раз дёргает твой АПИ Бэка, получает новые данные и производит мутацию объектов на фронте.
Шаблонизатор уже устарел, так как обработка идёт на стороне сервера, что добавляет нагрузки. Можно и VueJS рендерить на сервере и отдавать готовый DOM, но не советуют.
Сейчас вот так выводит,
Старая добрая задачка с двоичными числами. Даны 2 десятичных числа. Надо перевести их двоичную форму так, чтобы в обоих было одинаковое число знаков
Ну ебана, вот о чем я: даны 1 и 4; 1 -> 001; 4 -> 100
Вот код на скрине, вроде работает, но меня не покидает чувство что написал его по-уебански, как лучше?
Вместо паттерна 'if diff > 0'
можешь пользоваться схемой
'0' x max(diff, 0) # в смысле умножить
в случае нуля '0' выродится в пустую строку.
Собрался я значит сделать так, чтобы после успешной регистрации аккаунта, автоматом логинилось и редиректилось на стену этого самого пользователя. Но редиректится почему-то на адрес в начале которого подставлено /registration/.
Чем это может быть вызвано и как пофиксить?
Можно сериализовать в текст в формате json, или yml, или xml, или еще в каком-нибудь формате соответствующих библиотек море, в питоне есть встроенный модуль pickle для бинарной сериализации питоновских объектов. Полученные значения можно просто в файлы записывать, можно в базу данных, а можно сразу данные писать в базу данных, в sqllite какой-нибудь.
На каждый запрос дрочить файловую систему и загружать дохулиардный список решений ради одного значения?
Переделай на тот же скулайт хотя бы.
Если тебе нужно именно с pandas работать, так там есть встроенная сериализация датафреймов о множество форматов
https://pandas.pydata.org/docs/reference/io.html
Нет, не по одному, для каждого вызова функции с каждым набором аргументов. Но все равно объем небольшой получается. В данном случае чтение и запись на диск гораздо дешевле.
>>39036
Не своетую читать шизика Мартина (или, по крайней мере, воспринимать его шизу всерьез). Инкапсуляция - это то, как ООПшники называют information hiding (https://en.wikipedia.org/wiki/Information_hiding) - это один из основных инженерных принципов вообще. Можешь начать с этой статьи.
Redis?
В ipython, а значит и в jupyter, есть магическая команда %store, кажется, она делает именно то, что надо
Вот именно это я и искал, спасибо.
ДЖАНГИСТЫ ХЕЛП
Молодец
1) Есть aiohttp веб сервис, иногда на него прилетают тяжелые запросы которые обрабатываются 100мс (вероятно это не предел) в синхронной части кода (какая-то обработка данных на pandas написаная не мной, я делаю http обертку).
Как бы мне из обработчика запроса спавнить подпроцесс и выполнять синхронный код в нем и await'ить до его выполнения передавая тем самым управление эвент лупу? (чтобы синхронный код не тормозил другие запросы).
Я думал заюзать multiprocessing, но ведь он синхронный, т.е. запустить то в процессе что-то можно, a await'ить это никак.
Может быть более правильно будет просто в основной цикл вычислений синхронного кода добавить переодический вызов await asycio.sleep(0), что бы дать возможность переключения на другие асинхронные таски? И сразу запускать скрипт с нескольких инстанциях.
2) Можно ли вывести как-то информацию, сколько примерно простаивает event loop (т.е. ему нечему передавать управление), чтобы на основе этого понимать сколько инстанциий скрипта необходимо для корректной работы (а может в будующем и автоскейлер накрутить). Понимаю что можно косвено судить по количеству асинхронных тасков или времени выполнения запроса, но хотелось бы явно.
Не совсем понял твою задачу. Ты можешь поднять микросервис через Process и кидать туда задачи через Pipe, тогда у тебя 1 процесс это вебсервис, а второй это для расчётов. Или же как вариант выделить просто отдельно сервис расчетов в микросервис и кидать туда по REST задачи. Третий вариант Celery с Redis или RabbitMQ, но нахуй надо.
Вот спасибо, похоже то что надо.
Бля, это и мне подойдет. Спасибо, анон.
Ну если гугл переводчик подойдет как азмена английского - то могу.
>Может быть более правильно будет просто в основной цикл вычислений синхронного кода добавить переодический вызов await asycio.sleep(0), что бы дать возможность переключения на другие асинхронные таски?
Про run_in_executor тебе уже ответили.
А вот по этой части грабли есть: asyncio.sleep(0) не переключит таску. Тебе надо делать asyncio.sleep(0.0000001), например, чтобы переключение было.
>2) Можно ли вывести как-то информацию, сколько примерно простаивает event loop (т.е. ему нечему передавать управление), чтобы на основе этого понимать сколько инстанциий скрипта необходимо для корректной работы (а может в будующем и автоскейлер накрутить). Понимаю что можно косвено судить по количеству асинхронных тасков или времени выполнения запроса, но хотелось бы явно.
Про asyncio прямо так не смотрю, надо в исходники лезть, но по-моему он никак не считает, сколько времени он простаивает.
Косвенный метод в том, чтобы взять
time.process_time() (количество секунд работы процесса) и сравнить с time.monotonic()
то есть ты каждую секунду, например, считаешь разницу в monotonic времени (должна быть примерно секунда) и в process_time, по чему делаешь вывод, насколько сильно у тебя процессор загружен.
По-моему там есть даже более специальные инструменты для подобного мониторинга и более точные, но я на память не помню, где они закопаны, искать надо.
Я как-то выкладывал смищное решение в таком ключе на ебанутую задачку, сейчас гляну.
Норкоман штоле?
Букашка.
Сложна, бери для котов.
У тебя всё что сложнее одного выражения это "как в перле"?
Иди посмотри современный жс, там вообще какая-то инопланетная хуйня и никто не пиздит.
>какая-то инопланетная хуйня
Это ты автор вот этого говна >>1927282 → ?
В жс есть свои конвенции и парадигмы, хоть они и малость уебанские порой но смысл в них есть. За то говно что написал ты, в любой компании будешь сразу уволен нахер. Тут не в питоне как таковом дело а в том что это максимально неподдерживаемый и лапшеобразный код
PoC, у него лол. Т.е можно писать спагетти код и потом отвечать "да вы что это просто PoC, а не говнокод", ору
Почему без точки?
Java мне немного прочистила мозги насчет абстрактных классов и интерфейсов. Особенно интерфейсы понравились.
Лучше на репо залить или фотку?
Господа. Помогите машин лернинг вкатывальщику. Может есть какие-то матхев курсы? На рутрекере или ютюбчике.
Помогите мудрым советом
что ты УЖЕ знаешь? от этого зависит все остальное.
На самом деле не понятно чего вы туда лезете.
Думаешь, зарплата говна просто не прогулявшего матстат должна быть выше джуна-программиста?
>Думаешь, зарплата говна просто не прогулявшего матстат должна быть выше джуна-программиста?
Мне на зарплату поебать. Могу за еду хуячить, при условии, что в итоге смогу подняться. Меня математика привлекает, хоть я ее и не очень знаю. Во фронтенд не очень хочется, слишком много вкатовальщиков.
Есть знания в мат статистике, теории информации, системном анализе. Но далеки от совершенства.
Вот питон начал учить.
Я сам все что нужно найду, но на это целый день убью. Думал может кто что посоветует
Ура! давно ты в питоне? много заработал на этом боте или делал чисто на энтузиазме?
Питон ровно год назад начал учить(большие перерывы вотвоемя сессий), это был первый заказ крупный, получил 5500 вроде, хотя пока не получилось найти более выгодное предложение по цена/время, все берут таймауты, проекты морозятся, а найти работу вообще нереально
Я правильно понимаю, что жабисты придумали хороший ооп, а теперь как сектанты доказывают всем что у них все неправильно, потому что по-другому?
Ебать, че вообще нет работы? Это пиздец печально.
сам работаешь в магазине или как? учишься? алсо долго писал этот прожект?
>Я правильно понимаю, что жабисты придумали хороший ооп
Реализация ООП жабы, как и плюсов, завязана на то, что код компилируемый. Там иначе просто не сделаешь.
Интерфейс - указатель на соответствующую таблицу виртуальных функций.
В питоне "утиная типизация", или "протокольная", что чуть другой подход. Со своими большими плюсами и минусами.
А суть в том, что люди на одном языке пытаются писать так, как на другом. Обычно это бывает после слов "синтаксис за пару недель легко можно выучить".
В питоне ООП просто другое. И проектировать программы надо по-другому.
Сейчас стою на некоем распутье. В институтской бытности попробовал кодить на 1С, и понеслась пизда по кочкам. Сейчас мне 26, 5 лет опыта разработки в 1С, несколько неплохих сертификатов, но душа постоянно просит чего-нибудь свежего(да и кошелек тоже). Имея в ДС доход 180 на руки закрадываются мысли что можно и больше, да и сама 1С чую надоест через года 2-3. Вот и решил зайти в первоисточник и попробовать расспросить, стоит ли начать изучать питон для будущего полного перехода на этот ЯП. В принципе у самого образование - программная инженерия, тупым бухгалтером себя не считаю, даже ООП вспомню если постараюсь. Как с работой в ДС, как с зарплатой, как со сложностью/скоростью вкатывания. Ну короче в 2х абзацах распишите какой я мудак стоит ли начинать играться с питоном по вечерам
П.с. Есть небольшой опыт написания мобильных приложения на Java, когда делал очень нравилось, хотелось бы понять есть ли интерес в работе с питоном.
Ну первые 2 года было совмещение с универом, там по большей части писюн пинал на работе
Именно. Только учти что у Java есть JVM. На самом деле сложилось впечатление, что туда притащили все и сразу, а потом обернули все во фреймворк, чтобы голова не болела у господ "ынтырпрайз" погромистов как и что писать.
Если в Питоне банальная инкапсуляция, да и видимая, то в Java слоев до implementation будет овердохуя (помним, что один класс - один файл). Зачем? В питухоне я могу описать модель ORM, обернуть ее в Pydantic и там же прописать интерфейсы под нее и будет это в db/models/user.py.
У меня был вариант реализации на Java, когда надо было кривую кодировку в UTF8 перегнать, так вот на Java не было ни единой такой реализации на Maven, а для питона готовый пакет с понятным исходным кодом. Да и те же байты легко через ord перегонялись, в Ява свое понятие байтов как оказалось и такая проблема известна.
Если например собирать тот же JSON в объекты, то в Java это сложнее чем через Pydantic. Почему так получилось я хуй знает, но как по мне направление языка не туда ушло. Вместо упрощения, его наоборот сделали комбайном. И ты тащить вместо одной функции кучу ненужного хлама или же изобретатель велосипед.
Когда мне говорят, что Питон потребляет много ресурсов (а так и есть) я напоминаю про JVM, которая может зарезервировать себе гигабайты памяти, потому что так решила.
JS и TS для фронта а не бэкэнда. TS потом все равно в JS перегоняется при деплое, кек.
Встречалось что-то ARGS, KWARGS. Но не уверен уместно ли мне тут это использовать.
Как?
>>41601
Хуйню не несите. Антивирь сканирует ехе-шник и на что-то ругается. Что-то его не устраивает. База приплетенная тут не причём. Он именно определяет как троян, присваивает классификацию. Значит реагирует на сборку или используемые компоненты. Я на c# написал хелло ворлд и на другом компе запустил, так ехешник был заблочен как полученный из неизвестного места. Антивирус на него не ругался и не удалял.
А почему это декоратор?
Я например хочу мерить время выполнение кода средним значением из 1000 раз.
Про декораторы читал. Но не понимаю почему ты решил что это декоратор.
Декоратор это функция которая оборачивает другую функцию, добавляя какой-то свой функционал.
>Я например хочу мерить время выполнение кода средним значением из 1000 раз.
Для этого есть искаробочный timeit
timeit.timeit(func, number=1000)
>искаробочный timeit
Он какой-то стремный. В примерах использования, какие-то лист компрехеншены одни. Реального использования не нашел.
Ты неправильно делаешь просто, вот же он пишет что хочет string or callable
Т.е. нужно
"""hello('privet')"""
или отдельную функцию
def test1():
hello('privet')
и тогда передаешь только test1
Есть несколько реп в корне и там же в корне файл с основным кодом. Репы ходят иногда друг в друга. Я так понимаю все пути начинаются в том месте, откуда запускается питон, даже если запускаемый файл в другой папке. У меня же первое совпадает со вторым, но я получаю ошибку спустя несколько импортов по цепочк
ModuleNotFoundError: No module named repa1.src
Но в корне есть папка repa1/src/.../utils.py
В чем может быть дело?
sys.path.append("repa1/src") не помогает.
Что ты называешь репами?
> Я так понимаю все пути начинаются в том месте, откуда запускается питон
Нет такого понятия все пути начинаются. Заглянь в содержимое sys.path, там список никак между собой не связанных путей, откуда импорты реально начинают искать модули и пакаджи.
И кто будет открывать эти страницы в браузере? Что является текстом на сайте? (не такой простой вопрос как кажется) Почему не расширение браузера типа greasemonkey? Почему именно на питоне?
Бросать 1С рано. Пробовать всякое разное однозначно стоит, не только питон.
>репами
Репозитории из гитхаба, т.е. полагается, что это цельные куски кода.
> Заглянь в содержимое sys.path, там список никак между собой не связанных путей, откуда импорты реально начинают искать модули и пакаджи.
И при запуске туда вписывается полный путь откуда все запускается же, не? Я это вроде как знаю и все равно не понимаю, что может помешать заимпортить один из репозиториев.
> И при запуске туда вписывается полный путь откуда все запускается же, не?
Только если там есть специальный путь точка, означающий текущий каталог.
Каждый раз когда ты импортируешь какой-то модуль, проверяются все пути по маскам {syspath}/{module} и {syspath}/{module}/--init--.py. Во втором случае это считается пакаджем. То что найдено, фиксируется в импорт кэше. И если ты импортируешь например foo.bar, то сначала импортируется foo, это запоминается как {packageRoot}, дальше пробуется путь {packageRoot}/bar.py. То есть, foo.bar и foo.baz обязаны лежать в одном каталоге, как и всё остальное дерево foo. Относительные импорты возможны только изнутри этого дерева и не могут вырваться наружу {packageRoot}, то есть, нельзя импортировать ../../../../../../etc/passwd.
То что ты пытаешься сделать, строго говоря, некорректно. А если там модули в этих репах, которые нужно собрать компилятором? А если там структура кода такая, что сорцы лежат в repa1/src/python/modules/src/? По-хорошему зависимости нужно ставить через pip, а не клонировать репозитории, здесь тебе не го. Используй либо pip, либо симлинки если в этих репах чистый питон, либо просто скопируй себе всё что там есть. Колёса для pip кстати можно собрать и устанавливать локально, без загрузки на pypi.
>Только если там есть специальный путь точка, означающий текущий каталог.
Нет, зачем точка, туда кажется по умолчанию добавляется полный путь к нынешней директории, а не его сокращения. В любом случае там по умолчанию прописана домашняя директория, а все происходит в ней.
> По-хорошему зависимости нужно ставить через pip
Еба, вот это удобство.
Ну я понял как надо делать по хорошему. Но это не объясняет почему у меня не работает импорт. Идея может в разных репах лежит папка src
Вот эта пустая строка в начале и означает текущий каталог. Если сконфигурировать питон так чтобы её там не было, то не будет он ничего искать в текущем каталоге.
> Еба, вот это удобство.
Нормальное удобство, ты просто не умеешь его готовить. Что за мутные репы там у тебя, почему их обязательно нужно клонировать и именно так складывать?
> Но это не объясняет почему у меня не работает импорт.
> ModuleNotFoundError: No module named repa1.src
> Но в корне есть папка repa1/src/.../utils.py
> папка repa1/src/.../utils.py
> sys.path.append("repa1/src") не помогает.
Ты просто рандомом тыкаешь во все стороны и даже не пытаешься вникать ни в документацию, ни в мой длинный пост. Папка utils.py, пиздец какая каша.
>Если сконфигурировать питон так чтобы её там не было, то не будет он ничего искать в текущем каталоге.
Какие-то репы в этом каталоге он видит, а какие-то нет.
>Что за мутные репы там у тебя
Я так код храню. Иногда нужна функция написанная где-то в другом месте и еще иногда приходится клонировать чужие сложные репы, чтобы дернуть у них что-то.
>Ты просто рандомом тыкаешь во все стороны и даже не пытаешься вникать ни в документацию, ни в мой длинный пост.
Да вникать не во что. Я знаю это. Говорю же. По идее должно все и так работать без сис-пас-аппендов. Вот просто из корня должно рабтать import repa1.src.....
Но да, я это уже от безысходности начал делать.
> Да вникать не во что
В смысле не во что? В моём посте все ответы почему у тебя что-то импортируется, а что-то нет.
> Я знаю это
Уверен?
> Вот просто из корня должно рабтать import repa1.src.....
Не должно. Имена модулей это не пути в файловой системе. Иначе тебе придётся вместо import requests писать каждый раз import C:\Programs and files\Python\Lib\site-packages\requests\--init--.py
>В моём посте все ответы почему у тебя что-то импортируется, а что-то нет.
Видимо, в глаза долблюсь.
>Не должно.
Остальные репы, кроме этой без проблем притягиваются.
>Иначе тебе придётся вместо import requests писать каждый раз import C:\Programs and files\Python\Lib\site-packages\requests\--init--.py
Нет, почему. В PATH есть путь до папки, откуда питон вызывается и еще до нескольких. Достаточно просто дописать недостающую часть пути.
> В PATH есть путь до папки
Воот. Теперь ты близок к пониманию что такое sys.path как никогда раньше. Вот только вместо бинарников, он указывает на локации с наборами импортируемых модулей.
> Остальные репы, кроме этой без проблем притягиваются.
Потому что там по счастливой случайности непосредственно питонячий код лежит, без всяких src. И не факт что они работают, даже если успешно импортировались. Мало ли как их задумал использовать создатель. Вдруг там вообще не модули, а программы, которые запустят ракету в космос когда ты будешь их импортировать?
Я не могу найти работу с сентября, но щас понимаю, что тогда совсем зеленый был, щас сильно апнул скил, но вакансий вообще нет для джунов, их 0, а те что есть либо с тестовым типа зайдите на наш сайт и напишите эссе чем он вам понравился, либо компании уровня яндекса, тинькофф, сбера и пр, куда можно пробовать, но даже тестовое наврятли получишь. С вакансий на мидлов меня просто пидорят, отказывают не глядя, в сентябре хоть тестовых 5 сделал, после нг не получил ни одного. Я студент это тоже минус к желанию меня взять на работу
>Каждый раз когда ты импортируешь какой-то модуль, проверяются все пути по маскам {syspath}/{module}
И я не вижу причин не заимпортить нужную мне репу.
В третьем абзаце про другое речь.
Не понимаю в чем моя проблема.
Selenium.
Отклеилось то что делал проект дня 4-5, потом еще деплоил день и все вроде. Но щас если мне пишут по заказам уже смело сильно больше ставлю цены, вот сегодня посмтрел тз на тг ботов, суммарно оценил в 300 деревянных, теперь просто жду ответа. Так же мне написал один кабанчик сделать бек для обзвона клиентов, я назвал 800$, он сказал согласен с ценой и сроком, прошел небольшой собес, но думаю он не выберет меня, ибо опыта все еще маловато
>Вот только вместо бинарников, он указывает на локации с наборами импортируемых модулей.
Ну я как бы и про это знал с самого начала.
>Потому что там по счастливой случайности непосредственно питонячий код лежит, без всяких src.
А, да, стоит добавить, что в проблемной репе лежит может и не только питон, но притягивается функция из файла с питоном и по дороге плохих импортов нет. Я уже тащил оттуда ее, если что. Сейчас либо проблема в верхних импортах, либо я что-то сделал с окружением.
>>42355
Второй ответ это мой же коммент, почитай
Вчера буквально зашел в раздел с книжками в шапке и забрал себе книгу по шаблонам проектирования, мне кажется мой скил улучшился раза в 2 после прочтения благодарностей автора. Все откладываю изучение докера, который уже везде требуют и даже от джунов, хотя мне так лампово на убунту ковыряться и не учить ничего. Только недавно начал часто использовать на практике всякий сахар типа лист компрехеншона, разные методы в ооп, стараюсь в язык и ооп углубляться по сути, ты?
Почитай книгу https://www.labirint.ru/books/516656/, там как раз то что ты изучаешь, я прозрел после прочтения
Алсо параллельно делаю студенческий сайтик на джанго для кафедры математики, углубляюсь в джангу, в основном пытаюсь запомнить все методы орм которые там очень классные, а так же работаю на галере по сути, все неловко сказать заказчику, что я блять не буду вновь перерабатывать код ради теста, который не факт что сработает, работаем над сервисом по накрутке в тикток, но до сих пор не разгадали всех подписей тиктока и как именно ему надо отправлять данные, чтобы он не возращал то что слишком часто пользуемся им. Рассказывай про себя
>{module} не может содержать слешей. Там только имя из a-z0-9.
Ага, т.е. вместо слешей точки. Я же правильно понимаю, что модулем становится любая папка и я могу как угодно глубоко в ней лезть за нужными мне функциями?
>Ну в целом ты делаешь что-то очень странное.
В смысле у тебя ответа нет, почему одна репа может притягиватьс, а аналогичная рядом нет?
Ссылки на гит не дам, это приватные репы для студ проекта, к сожалению, там не я один работаю.
А я пилю систему управления проектами. На джанге. Как выше писал - с фронтом проблемы
> В смысле у тебя ответа нет, почему одна репа может притягиватьс, а аналогичная рядом нет?
Ты меня типа на слабо берёшь или что? Откуда мне знать что там за студенческий хлам у тебя лежит и каким образом? Спрашивай своих братишек, которые написали эти репозитории, они тебе пояснят как ими пользоваться.
Спасибо, анон. Очень полезно провел час. К сожалению, не узнал абсолютно ничего нового и пришлось разбираться самому, и да, уже разобрался.
Какой вопрос, такой и ответ.
Да, в Vue 3 прекрасно все. Кстати они довольно быстро перекатили на TS, было бы забавно увидеть Python года через 3 со статической типизацией и высокой производительностью.
Если бы такая зарплата была в комп сервисе или хотя бы в ламповом магазине по продаже железок (не ебаной сетевой шизе типа дноэс), было бы охуенно.
работал в таком магазе -сервисе, в принципе все норм, если бы не ЗП ебаные 14к рублей за работу без выходных и праздников.
Алсо если бы в автосервисе была такая ЗП и нормальное оборудование, тоже было бы пиздато. Но я автосервис с нормальным оборудованием и условиями типа нормально отапливаемых и вентелируемых боксов видел только на картинках в журналах и в роликах на ютубе где сервисы для мажоров, которым движки чипуют за миллион.
Обычно это грязь, срач, холод и жара с уёбанным инструментом и за низкий прайс.
Вакансий тьма, только никто не будет джуна типо меня обучать, зачем, все равно через год зарплату апать, либо съебет на более теплое место и останетесь с говнокодом, либо убытками. А вот посмотреть на вакансии любые хоть фронт, хоть бек, везде зп отличные(мне такие пока только снятся), условия супер, только опыт нужен. Надежда только на то что мои проектики потм смогу показать и хоть немного выделюсь среди таких же как я и может примут куда
Мне вообще кажется что это самое сложное, просто скил удачи должен быть прокачен, один знакомый фронт начал еще в далеком 2015 наверное рулетки по кс делать, залетел в эту тему, теперь именно что 300к\нс получает в сити за эти же рулетки
Проблема в том, что мне иногда нужно добавлять новые элементы в хранилище, но похоже, что работающий метод с while True блокирует все остальные методы
Что делать?
Набросал схематично суть: https://pastebin.com/hYd4CZ13
Не силен в асинкио, но проде авейты должны выбрасывать из цикла, проверь точно ли до авейтов доходит код
У тебя какая-то странная схема с пиханием элемента в очередь.
Вообще, если у тебя исполнение пойдёт по пути else, то цикл заблокируется, у тебя не будет переключение задачи.
Это грабли asyncio и реализации очереди там. Там используются оптимизации, и если в очереди есть элемент, то await q.get() не переключит задачу. И если в очередь можно что-то положить, то и await q.put() не переключит задачу.
Переключение задачи будет только в том случае, если очередь пуста в случае get, или переполнена в случае put.
Поставь ради теста после await _queue.get() строчку
await asyncio.sleep(0.00001)
но только не await asyncio.sleep(0), потому что там тоже грабли и тоже переключения не будет.
К О Н С О Л Ь
>пишет на питоне
>не умеет пользоваться терминалом
>про линух скорее всего тоже не слышал
>чтобы запустить проект нужна IDE
>...
хорошоу.
вот тебе многослойный луковый план:
"Тирни Брендан, Келлехер Джон - Наука о данных.pdf" - обзорная болтологическая хуйня, но короткая. Это важно чтобы не спрашивать что такое X и y и прочие максимально тупые вопросы, которые машобщики считают само собой ясным, поэтому просто не описывают никогда.
Python_и_анализ_данных_Второе_издание_2020_Уэс_Маккинни.pdf - здесь самый чоткий и свежий питон с упором в обработку данных в pandas. Но питон нужно отдельно подчитывать в других книгах.
"Наука о данных. Учебный курс. Скиена" - тут второй виток машоба.
Если захочешь по-быстрому поэкспериментировать с алгоритмами в образовательных целях - есть программа Orange.
Где ХОРОШО про DeepLearning я не знаю, но попробуй снова Келлехара "Deep Learning by John D. Kelleher.pdf" или Николенко или Бишопа. Или сразу делай вид что ты элитарий и иди в ML-треде ссылки на английском читать.
Параллельно, если понравятся, предлагаю подчитать:
"Нейт Сильвер - Сигнал и Шум. Почему одни прогнозы сбываются, а другие нет " - математики нет, но пиздецки интересно.
Искусство_статистики_Как_находить_ответы_в_данных_2021_Дэвид_Шпигельхалтер.pdf - самое современное введение в статистику (и поэтому даже с учетом машоба)
Само собой разумеется, ты должен придумать себе упражнения сразу по прочтении глав. Смотреть как реализованы алгоритмы.
Придумать себе Любимую Задачу - то, которая тебя бы вдохновляла. Желательно чтобы это было не распознавание котиков/аниме/жоп, а классификация каких-то доступных тебе уже сейчас твоих табличных данных. Чтобы ты смог ее приблизительно решить освоив классические методы.
Так же будет полезно освоить Tableau Public и power bi.
Прочитать отдельные книги по Time Series Analysis и рекомендательным системам.
Так, примерно лет через 5 твой путь будет завершен.
При чём тут умение пользоваться терминалом????
тут надо знать схему использования виртуальным окружением да и ОС Линукс тут при чём??? Работал я раньше в нём да и сейчас иногда приходится. В чём прикол подобных высеров, чтобы самоутвердиться перед новичком?
Проганье на питоне автоматом подразумевает знание линуха на уровне пользователя а также умение пользования терминалом
Если бы сказал кому на работе (даже будучи стажером) что не можешь запустить прогу без пайчарма, стал бы надолго локальным мемом
Поэтому познавай терминал и UNIX
Для справки: сама прога запускается и работает как надо, проблемы лишь с venv
"Вы профессиональный вор. Грабите ночью дома. В каждом доме определенное integer число денег, которое можно украсть. Но если ограбить два рядом стоящих дома, то сработает сигнализация. Напиши алгоритм чтобы взять максимальное число денег из домов, не тригернув сигнализацию"
Я написал жадный алгоритм на пикриле 2, он в общем-то дает близкий ответ, но не всегда точный. Как решить эту задачу чтобы всегда получать точный ответ?
Они все должны быть в pip frezze
Когда запускаю прогу ничего там не качается, все зависимости уже собраны в venv
Классическая задача на динамическое программирование.
Идейно, если у тебя есть список длины N, то рассматриваешь две ветви.
Первый вариант, это ты берёшь последний элемент, и максимальную сумму по списку длины N-2
Второй вариант, это ты не берёшь последний элемент, и дальше максимум по списку длины N-1.
Можно сделать рекурсивно, с мемоизацией (кешированием), а можно идти снизу вверх.
Так а в чем проблема, пип фриз собирает все модули что есть в венв, пип инсталл устанавливает эти библиотеки определенных версий
else там лишний, да
>>42723
Вот и я не силен
Пиздец, ничего не помогает. Если заранее заполнить очередь, то все работает, как надо. Но вот потом уже не получается вставить новые элементы в эту очередь, оно просто намертво блокируется, чо бы я не делал. Похоже, я просто неправильно понимаю, как решать свою проблему
Мне нужен таск менеджер, который будет запускать пакет корутин, ставить таймаут (пакету), брать следующий пакет, который не в таймауте... ну и так по кругу
Ваши предложения???
Про какие-то грабли из асинкио и кривой вариант для обхода я тебе уже написал >>42727
Суть в том, что операции await q.get() и await q.put() работают синхронно, если есть, чего взять, или есть, куда положить.
По этой причине твой цикл легко может зависнуть намертво. Вообще, поставь отладочную печать, чтобы понять, что там происходит.
>Мне нужен таск менеджер, который будет запускать пакет корутин, ставить таймаут (пакету), брать следующий пакет, который не в таймауте... ну и так по кругу
Пока не очень понятно, что у тебя таймаут и т.п. То есть ты планировщик (ака скедулер, scheduler) реализуешь?
Тут разные подходы могут быть. Во-первых глянь на функции вроде loop.call_later(), эта функция работает на низком уровне asyncio.
Во-вторых, я бы делал схему, когда есть очередь задач, которые уже надо выполнить, без таймаута, и очередь таймаута. Твой планировщик должен перекладывать задачи из второй очереди в первую, когда придёт время.
Глять заодно на PriorityQueue, если тебе нужно сортировать, выбирать задачи, которые раньше других надо выполнить.
Я торможу, звиняюсь.
Всё проще, у тебя строка
await q.add_item(item) # вот эта функция уже никогда не исполнится
и не должна исполняться никогда, потому что loop_queue() содержит вечный цикл.
await означает, что бы ждёшь, когда функция что-то вернёт, но ждёшь асинхронно. То есть с точки зрения твоего кода в функции main() это как синхронный код. Он асинхронный в том плане, что передаёт управление другим задачам.
Это я сообразил. Но как же мне тогда крутить свою бесконечную(круговую) очередь и подкидывать в нее новые задачи?
>>43139
>Пока не очень понятно, что у тебя таймаут и т.п. То есть ты планировщик (ака скедулер, scheduler) реализуешь?
Да, это скедулер, который должен работать постоянно в фоне.
>Глять заодно на PriorityQueue, если тебе нужно сортировать, выбирать задачи, которые раньше других надо выполнить.
Это в ближайших планах, будет несколько очередей и некий балансировщик, да. Но мне бы сначала разобраться с самым базовым функционалом.
Вот часть реального кода из моего проекта. Вероятно, я делаю полную хуйню, но тогда направьте в нужную сторону, что ли, а то я уже конкретно запутался с этим асинком
https://pastebin.com/5nhSB94r
> Но как же мне тогда крутить свою бесконечную(круговую) очередь и подкидывать в нее новые задачи?
Во-первых замечания по стилю. Делать вот это
loop: asyncio.AbstractEventLoop = None
передавать loop в функции не надо. Это устаревший стиль, актуальный для питона 3.5, которые сейчас считается obsolete и активно выпиливается. Там была особая магия с тем, что можно пересоздавать циклы обработки сообщений, и куча проблем из-за этого. Это можно забыть, как страшный сон, и просто делать
self.loop = asyncio.get_event_loop()
или
self.loop = asyncio.get_running_loop()
У тебя код завязан на специфику 3.7 (contextvars, typing), поэтому можешь и функции для asyncio оттуда использовать смело.
Я не вникал особо в твой код, но там есть вот такое вот:
62: self.loop.run_until_complete(self.consume_queue())
это синхронный вызов, он завершится только тогда, когда завершится цикл в consume_queue, то есть судя по всему никогда, если только какого-нибудь исключения не будет.
Логика асинхронного программирования схожа с логикой многопоточного.
В многопоточном у тебя есть треды, которые время от времени переключаются. В asyncio аналог треда это задача, Task. У тебя скедулер в asyncio держит задачи и переключает с одной на другую, получается, что несколько задач работает одновременно. В то время как внутри задачи всё последовательно идёт, операция за операцией.
Соответственно, идея такая. Ты свой планировщик оформляешь как независимую задачу (сервис).
Как вариант, создаёшь объект
my_scheduler = TaskScheduler()
и запускаешь его как задачу
scheduler_task = asyncio.create_task(my_scheduler.consume_queue())
Потом в других задачах ты можешь делать
await my_scheduler._queue.put()
или синхронным вызовом
my_scheduler._queue.put_nowait()
Таким образом твой планировщик работает где-то в фоне и выполняет какую-то работу, а общаешься ты с ним через очереди.
> Но как же мне тогда крутить свою бесконечную(круговую) очередь и подкидывать в нее новые задачи?
Во-первых замечания по стилю. Делать вот это
loop: asyncio.AbstractEventLoop = None
передавать loop в функции не надо. Это устаревший стиль, актуальный для питона 3.5, которые сейчас считается obsolete и активно выпиливается. Там была особая магия с тем, что можно пересоздавать циклы обработки сообщений, и куча проблем из-за этого. Это можно забыть, как страшный сон, и просто делать
self.loop = asyncio.get_event_loop()
или
self.loop = asyncio.get_running_loop()
У тебя код завязан на специфику 3.7 (contextvars, typing), поэтому можешь и функции для asyncio оттуда использовать смело.
Я не вникал особо в твой код, но там есть вот такое вот:
62: self.loop.run_until_complete(self.consume_queue())
это синхронный вызов, он завершится только тогда, когда завершится цикл в consume_queue, то есть судя по всему никогда, если только какого-нибудь исключения не будет.
Логика асинхронного программирования схожа с логикой многопоточного.
В многопоточном у тебя есть треды, которые время от времени переключаются. В asyncio аналог треда это задача, Task. У тебя скедулер в asyncio держит задачи и переключает с одной на другую, получается, что несколько задач работает одновременно. В то время как внутри задачи всё последовательно идёт, операция за операцией.
Соответственно, идея такая. Ты свой планировщик оформляешь как независимую задачу (сервис).
Как вариант, создаёшь объект
my_scheduler = TaskScheduler()
и запускаешь его как задачу
scheduler_task = asyncio.create_task(my_scheduler.consume_queue())
Потом в других задачах ты можешь делать
await my_scheduler._queue.put()
или синхронным вызовом
my_scheduler._queue.put_nowait()
Таким образом твой планировщик работает где-то в фоне и выполняет какую-то работу, а общаешься ты с ним через очереди.
Разве это так важно?
Отвечу тебе серьезно, в консоли запусти батник виртуального окружения. Он лежит вроде вот тут
venv/Scripts/activate.bat
После этого пишешь python main.py
Все
asyncio.create_task, а на остальные callback done. loop.run_forever()
Суть в том чтобы луп не останавливался, а таски подкидывакшь
Интервьюверы любят литкод, а я нет =))
Есть приложуха, часть данных хранится в бд прикрученной к джанго, часть - в google firebase.
Модель джанго типа:
>class Currency(model.Model):
>..name=
>..description=
>
>..def chart(self):
>....return queryset from google firebase where currency_name==self.name
Графики к ней хранятся в Firebase:
>DailyCurrencyPrice:
>..datetime=
>..min_price=
>..max_price=
выводится все на тупом жс в обычный джанговский шаблон типа
><div id="chart-currency">...
><script>
>var array={% for currency in currencies_list %}
>..{% for data in currency.chart %}
>....{{ data.something }}
как бы мне просчитывать допустим средние значения ( типа average=(min_price+max_price)/2 ) данных выгребаемых функцией def chart класса Currency из данных выгребаемых из DailyCurrencyPrice Firebase ?
У джанго кверисетов .annotate() было, но это ж только для того что в джанго орм, а тут я левой либой (fireo) выгребаю
Есть приложуха, часть данных хранится в бд прикрученной к джанго, часть - в google firebase.
Модель джанго типа:
>class Currency(model.Model):
>..name=
>..description=
>
>..def chart(self):
>....return queryset from google firebase where currency_name==self.name
Графики к ней хранятся в Firebase:
>DailyCurrencyPrice:
>..datetime=
>..min_price=
>..max_price=
выводится все на тупом жс в обычный джанговский шаблон типа
><div id="chart-currency">...
><script>
>var array={% for currency in currencies_list %}
>..{% for data in currency.chart %}
>....{{ data.something }}
как бы мне просчитывать допустим средние значения ( типа average=(min_price+max_price)/2 ) данных выгребаемых функцией def chart класса Currency из данных выгребаемых из DailyCurrencyPrice Firebase ?
У джанго кверисетов .annotate() было, но это ж только для того что в джанго орм, а тут я левой либой (fireo) выгребаю
Короче чет я тупанул, вопрос-то не к джанге был: https://octabyte.io/FireO/fields/custom-field/#extend-db-value
Это копия, сохраненная 12 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.