— Какие книги считаются лучшими? На слуху чаще всего Лутц, но там очень много воды. Ещё на слуху Марк Саммерфильд, Эл Свейгарт "Автоматизация рутинных задач с помощью python". Эти книги рекомендуют чаще всего, но книги довольно старые, а питон развивается.
— А как учить джангу? Нахожу книги по джанге 1.х, можно их использовать? У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать даже для версий 1.x, т.к. принципы остаются теми же. Но лучше хотя бы с версии 2.0, слишком много мелких изменений в базе.
— Какие веб-фреймворки стоит учить в начале двадцатых? Что бы не говорили, Джанго живее всех живых и умирать не собирается (и Django REST Framework), очень перспективный асинхронный FastAPI, асинхронный AioHTTP. Flask ещё где-то используется, но уже legacy. Прочие фреймворки или у нас экзотика, или это вымирающее легаси как Торнадо.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но частично переработанная под язык Python: https://www.composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Ролик на американском языке про многопоточность и асинхронность, построение своего event loop с нуля, помогает понять, как устроена асинхронность внутри: https://www.youtube.com/watch?v=MCs5OvhV9S4
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
>>3188296 >в Си нет ни ООП Да вы затрахали, есть конечно, просто не делается искаропки. Схлопывание хвостовой рекурсии тоже вроде реализовали первыми в си
>>3187471 (OP) аноны, используют ли хадуп и прочие библиотеки для больших данных в питоне? имею в виду, не в теории возможность их использовать вместе, а на практике в компаниях? или хадуп это чисто под жаву
>>3188968 >Работы в разработке на питоне нет. Работаю джуном. >Питон - плохой язык, который учит плохому Например? Что тебе в нем не нравится? Ну может внем хуево реализовано ооп и нет строгой типизации это да. Но в целом удобноый язык без ебучих {} после каждого чиха. На мой взгляд отделять блок функции или класса табом гораздо лучше чем плодить {эти { ваши {скобки}}} + дохуя библиотек и готовыми решениями.
>>3192219 Бля поставь видимыми И будет тебе def foo(): \treturn 'хз что тебе не нравится' Так то отделять отступами это как раз по человечески. Ты ж не отделяешь абзацы в тексте скобачками. Это фича блин, язык становиться более читаемым. Меня больше возмущала отсутствие строгой типизации по началу.
>>3192593 >Нельзя делать популярным язык с экспериментальным синтаксисом Си когда-то ровно таким и был. Если бы все придерживался твоих охуительных принципов, мы бы до сих пор писали на каком-нибудь монстре типа фортрана.
>>3192666 Всё так. Но петухонщики восторгаются, хотя не могут освоить даже -тся/-ться. Жаль, что Scala пошла по той же кривой дорожке. >>3192696 Я начинал с Паскаля, он куда лучше этого убожества. И при этом C-like выдержал проверку временем, его базовые идеи прижились. Lisp ещё лучше, но он не для всех.
>>3192715 >И при этом C-like выдержал проверку временем, его базовые идеи прижились. Да и Питон, как видишь, чувствует себя отлично. Haters gonna hate.
>>3192603 Тогда все языки были экспериментальные. Сейчас почти все языки общего назначения используют сиподобный синтаксис, даже, прости г-споди, php, и это удобно, гораздо легче читать программы, даже если языка не знаешь. И тут вдруг питон вылез со своими отступами.
>>3192666 Объективно это дело привычки. Но если принимать во внимание другие области человеческих ремесел, где есть запись информации по определенным правилам: письменность, математика, ноты. Везде блоки информации разделяют отступы, а не скобочки. Таким образом можно сказать, что для человека запись без скобочек лучше, а если тебе бомбит - значит синдром утенка.
>>3192734 Хотя ноты наверное не корректно сравнивать, ноты это по сути график, но во всех других случаях скобочек нет и разметка идет в виде отступов. Документы, поэзия - веками отступы использовались без дополнительной разметки - всё это наглядно демонстрирует что скобочки человеку для разметки и читаемости не нужны, лишние символы.
>>3192734 >>3192747 У тебя инвалидные аргументы. В математике никаких отступов нет, там как раз сплошные скобочки. В музыке тоже нет отступов, а специальные обозначения для блоков как раз есть. См., например, реприза. Текстовый документ - это неструктурированные данные, плюс там ещё есть и другие способы выделения: разные шрифты, жирный, полужирный, италик, подчёркивание, заглавные буквы. Давай всё это ещё в программирование притащим.
>>3192760 В математике формулы, уравнения и их решения мы компонуем в последовательные блоки по точно таким же правилам как и обычный текст. Для того чтобы разделять мат.записи, формулы и прочее между собой мы скобочки не используем, мы просто следующую формулу или решение с новой строки пишем и всё. То, что в математике в скобках пишется и в прочей разметке в точно такой же степени и в Питоне в скобочках пишется, речь не об этом не о разметке математических действий например, а о разметке именно синтаксической. В математике нет ни каких специальных скобочек для синтаксического разделения.
>Текстовый документ - это неструктурированные данные Текст в точно такой же степени структурирован как и код языка программирования. Точно такие же буквы складываются в обозначения неких абстракций, абстракции идут друг за другом и формируют логику. Если ты этого не понимаешь, то так себе ты погромист.
Экспериментировал с запросами на простых форумах всё просто. На бордах тоже ничего сложного по идее не должно было бы быть, на всех WebKitFormBoundary и парсеный-нераспарсеный пейлоад за счёт него выглядит очень по разному. Примерно как ниже показал. Но вот не знаю как правильного его отправить, навскидку глянул советуют не как дату, а вот как-то так отправлять post(url=url, files=files).
В моем случае всё еще отягощается вот такой пургой с кучей спецсимволов, борда с которой я вожусь не сосач если что. ------WebKitFormBoundaryY1APBYjD Content-Disposition: form-data; name="e063dvnw♾1of⛵i8k☿4g9z⛢b5txypl"/☰C0x@9☁57⛶Q4bmP Мало того в конце всё ещё интересней, подсчитывается хэш всей этой пурги name="hash", ошибка в символе приведет к несовпадению хэша. Разбирать как это всё хэшируется пока нет желания. Хотел просто поприколу продублировать запрос, да вот не знаю как правильно прицепить пейлоад. Из того что эксперементировал ничего не вышло. Может что посоветуете?
task: post board: b thread: 120234
------WebKitFormBoundaryNaIR1AUuHyKekGAZ Content-Disposition: form-data; name="task" post ------WebKitFormBoundaryNaIR1AUuHyKekGAZ Content-Disposition: form-data; name="board" b ------WebKitFormBoundaryNaIR1AUuHyKekGAZ Content-Disposition: form-data; name="thread" 120234
>>3192036 > нет строгой типизации обычно принято говорить сильная-слабая типизация
В питоне сильная типизация. Для сравнения, в JS слабая типизация.
Ещё есть статическая-динамическая типизация. В питоне динамическая. Надеюсь ты не тот статикошиз, что тут по тредам бегает.
Мне как разрабу в динамической типизации не нравится то, что она и для примитивных типов вроде целых чисел, из-за чего большая просадка в производительности идёт. На любую примитивную арифметическую операцию большой оверхед идёт.
Ещё принципиальный минус, что нет декларации типов. Легко сделать ошибку из-за этого, читаемость страдает. Вот в JS есть декларации.
Ещё минус в области видимости. В питоне минимальная область видимости это функция, так внутри питон устроен. Сейчас все пришли к тому, что удобнее, когда может быть область видимости блок, внутри цикла, if-else и т.п. В том же JS так уже давно. Но в питоне это жёстко встроено, хрен уже переделаешь
бесскобочность спорное решение, и плюсы есть, и минусы. Пожалуй я бы предпочёл, чтобы они были. Если ставить скобки в стиле Java, они уже не перегружают код.
>>3192696 Когда пишешь обычный код, отступы вместо скобочек норм, привыкаешь. Но вот этот подход ломает возможность в коллбэках функции-классы определять. На самом деле ограничивает. И косяки иногда бывают из-за отступов, стандартная история, это когда вложенные if, а потом else, который может легко слететь при рефакторинге
>>3192732 >Сейчас почти все языки общего назначения используют сиподобный синтаксис, У го другой синтаксис
А php старый язык, его создавали тогда, когда в мэинстриме были си-подобные языки, в то время это C/C++/Java, причём делали не из расчёта на то, что серьёзно что-то будет, не продумывали. Его писали на Си, поэтому идеи тоже взяли от си, как проще
>>3194041 >В питоне сильная типизация. Обьясните простыми словами в чем смысл такой классификации, что она на самом деле отражает и для чего нужна. В википедии написано что эти понятия придумали независимо друг от друга два дида-основателя и их трактовки что называть сильной типизацией разнятся, так что когда кто-то говорит "слабая\сильная типизация" надо во-первых уточнить что он имеет в виду, чью трактовку, а потом спросить зачем он это вообще сказал.
>>3194476 >простыми словами В жыесе ты можешь сложить число с строкой, интерпретатор автоматически сделает приведение типов. В питоне получишь TypeError.
>>3194644 >Но в питоне я могу сложить целое число с флоат, разные типы, не такая уж и "сильная" получается типизация А есть языки в которых нельзя? По-моему в традиционных языках во всех можно. Более спорный момент, что должно быть результатом выражения 3/2 а именно 1 или 1.5 но числа это своя специфика вообще, всегда
А вот прозрачное переделывание строки в число и наоборот это уже явный признал слабого типа.
>>3194677 >А есть языки в которых нельзя? Ada. И если ты думаешь что это какой-то забытый язык, то нихера, критические системы для космоса, авиации и прочего транспорта пишутся буквально на 4х языках: си, кресты, ада и ассемблер. Ада только в США правда.
>>3194695 >си, кресты, ассемблер Это всё ассемблер и его синтаксический сахар.
>ада Ну судя по всему какое-то невероятное говно без задач, которое сделали только по заказу министерства обороны сша, когда какому-то сапогу пришло в голову что у армии должен быть свой супер мега язык. ПОТОМУЧТО.
>>3194695 >Ada Ну давай всё-таки современный мало-мальски массовый язык. Современный, это который после 1985-90 года взлетел, а не говно мамонта из 60х
>>3194677 >Более спорный момент, что должно быть результатом выражения 3/2
Ничего он не спорный. Мы же к определенному типу данных применяем определенный алгоритм. Если этот алгоритм называется деление без остатка, то мы и получим тип данных который ждем. А вопрос "типизации" насколько я понял сформулирован таким образом "как себя ведет язык если всунуть другой тип данных туда где ожидается не он". Но это всё равно хуйня какая-то и глупость, если из этого правила есть куча исключений. Впрочем похуй.
Начал тут питонировать, и встал вопрос. На каком основании классы "не видят" друг друга, если они объявлены внутри другого класса? Почему так?!
При этом, если эти классы не являются "подклассами" другого класса (т.е. объявлены не внутри класса, а просто в файле - хз как правильно сказать), то все нормально - они могут "видеть" друг друга. Что я делаю не так?!
>>3195774 По той же причине по которой ты из внутреннего класса не сможешь достучаться до обычного атрибута, объявленного в классе Video. Классы тут не при чём.
Сап прогачам! Недавно вкатился в питонирование, и до нынешнего момента вполне успешно постигал тонкости этого занятия. Сейчас же полнейший затуп. Решаю задачу по циклу "for". По условиям задачи дается список из чисел, нужно его перебрать и разделить на простые и составные числа, и записать их в новые списки primes и not_primes, соотвественно. Написал рабочий код, который, приводит совершенно не к тому результату который требуется (все на скрине). Вобщем уповаю на вашу помощь! Сам уже три час над этим колдую и ничего не выходит(((
>>3195798 if i % j == 0: break; else: is_prime = False поменять на if i % j == 0: is_prime = False
Если хочешь делать break из цикла, чтобы не выполнять лишние итерации, то перед break'ом надо сначала занести число в список 'not_primes'
>>3195793 Да блин, это пипец. Хочу сложить все в один класс, чтобы было красиво, но не получается. Как поступить? Отказаться от "вложенных" классов и все классы делать "внешними"? Я не понимаю...
>>3195812 Ага, так и думал, что где-то в этом месте проблема.Спасибо! Стало лучше, списки выводятся, однако в списке простых чисел какая-то ересь все равно. Все числа, кроме 3 и 15 продублированы по нескольку раз, а число 2 так вообще не вывелось.
>>3195842 У тебя сейчас алгоритм следующий: 1) взять некоторое число i (от 2 до 15) 2) если число i не является простым (т.е. когда срабатывает условие i % j == 0), то добавить его в список 'not_primes' и перейти к следующему i (т.к. внутренний цикл 'for j ...' прерывается командой break) 3) при этом, число i будет добавляться в список 'primes' каждый раз, когда текущее число j не является делителем i (т.е. когда условие i % j == 0 не срабатывает) - из-за этого некоторые числа в списке 'primes' повторяются несколько раз, и из-за этого в 'primes' попало число 9, которое не является простым (проверили 9 % 2 - 2 не является делителем 9, добавили 9 в 'primes', проверили 9 % 3 - оказалось, что 9 - не простое число, добавили 9 в 'not_primes', перешли к следующему числу - 10)
+ ты убрал проверку значения переменной 'is_prime' и сейчас никак ее не используешь
Как должно быть: 1) Берем некоторое число i и в самом начале считаем, что оно простое, пока не доказано обратное, т.е. is_prime = True 2) Среди чисел j таких что (j = от 2 до i): смотрим, есть ли такие числа j, что j является делителем i. 3) Если хотя бы раз выполнилось условие i % j == 0, то выходит, что число i не простое: is_prime = False 4) Если мы смогли пройти весь внутренний цикл 'for j...' и условие i % j == 0 не выполнилось ни разу, значит число i простое - is_prime осталось True 5) Проверка значения переменной is_prime должна проходить вне внутреннего цикла 'for j...' (т.е. после него)
P.S.: 1) Проверять от 2 до i нет смысла, т.к. делитель числа i не может быть больше половины числа i (т.е. разумно проверять только от 2 до i // 2) 2) Если было установлено, что число i не простое (is_prime стало False), то можно делать break из внутреннего цикла 'for j...'
>>3195867 От души, чел! Вот про проверку is_prime вне цикла 'for j...' 'это ты в точку попал. Я этот момент в глаза продолбил! Все, теперь все запахало как нужно!
>>3195887 > Вот так можно через Video.Data Интерпретатор все равно ругается на тайп-хинты для аргументов и возвращаемого типа. Внутри тела метода уже можно использовать Video.Data, но это хуйня какая-то - если поменять имя класса Video на другое, то придется и в тело метода вносить правки.
Короче, действительно надо эти классы вынести и не ебать мозга.
>>3195899 Хз, я как питонист видимо еще не дорос до уровня, на котором используют такое преимущество, как отсутствие типов. А тайп-хинты я для себя прописываю, чтобы понимать что происходит.
>>3195910 Зачем пихать неизвестно что во все дырки? Вот у меня есть какой-нибудь класс и метод который что-то делает с каким-нибудь типом данных. Если в этот класс прилетит рандомная хуйня, которую там никто не ждет и так исключение высрется, это же ошибка. А если у нас тут полиморфизм, то чекаем тип или есть прекрасные именные атрибуты, например. Почему все так ноют про эти типы? Я думаю это всё из за того что в питухон приходят из других языков со своим уставом и вот так привыкли делать, а надо по-другому, надо ПИТОНИЧЕСКИ.
>>3195899 >зачем вообще писать на питоне с типами? Чтобы было удобно читать и понимать код. Чтобы в IDE ты мог навести на тип и посмотреть, как он определяется, это про сложные типы, конечно. Чтобы ты в принципе понимал, что нужно пихать в функцию, какой тип
Декларации крайне полезны
Это промежуточный вариант между статической типизацией с массой своих минусов и динамической
>>3196406 >когда написано str, а тебе прилетает int Меня вообще удивляет, как вы так код пишете, что у вас контракты нарушаются внутри кода, ладно если внешние апи какие-то долбите.
Почему тут срабатывает __init__ метод класса В? Если я правильно понял, super() это сокращение от super(__class__, self). Вызываем конструктор класса Х(). Интерпретатор ищет метод __init__ сначала в Х (согласно MRO). Не находит, идет в класс А. В классе А срабатывает __init__, который в свою очередь вызывает super(A, self). self в данном случае это объект класса Х, поэтому поиск идет в MRO объекта от класса Х, но после класса А, т.е В? https://www.online-python.com/d6fB4AJEiS
>>3196332 Это никакой не промежуточный вариант, это и есть попытка сделать типизацию в языке, который для этого не предназначен. Может лучше тогда взять язык с типами?
Сап, погромач Вопрос общий и нубский, говорю сразу. Не вкатун, делаю по фану, но перфекционизм ебет
Есть задача - читать некий текстовый файл (10+ мб) с периодичностью 0.5-1сек и собирать по 3 похожие строки с ключевыми словами в объекты для последующего использования.
Как делаю сейчас: читаю последние 50кб файла, фильтрую их в цикле по ключевому слову, проверяю все ли собрано для объекта, создаю объект класса и распихиваю данные из строк по его переменным
Как думаю надо делать: так же прочитать файл, запихнуть вообще все строки в массив, пройтись по этому массиву и уже тогда отфильтровать строки и создать из них объекты
С одной стороны, 2 цикла получается, делающие почти одно и то же. С другой стороны, не должно быть проблем с тем, что какие то данные для объекта проебаны по той или иной причине
Как вообще это делать правильно то в итоге? Для текущей задачи допустим похуй, но если надо весь файл потом чекнуть, создавать из него массив выглядит тупо
>>3197380 >фильтрую их в цикле по ключевому слову Ах да, забыл уточнить, что каждый объект должен состоять из данных из 3х строк, которые идут всегда в одном порядке, но между ними дохуя левых строк
>>3197380 >читаю последние 50кб файла Не понял, почему читаем именно последние 50кб. Или ты читаешь файл кусками по 50кб от начала до конца?
Короче, лучше, наверное, не выносить все содержимое файла в массив - вдруг у тебя входной файл будет иметь слишком большой размер. Хотя, с другой стороны, если гарантированно, что размер файла небольшой, то может для твоей задачи и лучше держать содержимое файла внутри массива, чтобы быстро обращаться к содержимому без необходимости повторного чтения.
В общем, чтобы было понятнее, нужен отрывок исходного кода.
>>3197380 Правильно будет наверное конкурентности навернуть. Один тред читает (кусками) файл и складирует их в очередь. Второй тред таскает из очереди кучки строк и обрабатывает их.
>>3197468 ну вот я так и делаю. Только у меня 3 условия if keyword in line, потому что у меня 3 варианта ключевых слов. В принципе, поскольку порядок строк не меняется, я в теории могу потом по полученному массиву проходится каждые 3 элемента и получать свои 3 строки и разбивать их на объекты Но что если какая то строка проебется или еще че
>>3197398 >почему читаем Ну мне же нужны только свежие строки. Я не хочу читать весь файл из 110к строк или больше. Ну верней хочу, но этот функционал будет позже и в ручном режиме. Сейчас мне надо реализовать автоматическое чтение каждую секунду на предмет новых строк (конечно я не читаю каждый раз, я проверяю размер сперва)
>>3197567 Это понятно. Ну в общем как я понял, ответ заключается в том, что лучше сперва фильтровать строки в массив, а уже потом работать с этим массивом, а не пихать все в массив или наоборот сразу обрабатывать строки при парсе файла
А то у меня щас как у тебя в прошлом посте, только в условиях сразу разделяются строки на нужную инфу и присваиваются переменным временного объекта, после чего при наличии всех переменных создается объект класса и добавляется в итоговый массив. И мне кажется это не надежно
>>3197595 Чел это всё индивидуально. Главное помни что у тебя файл открыт всё это время не пихай туда ничего что не касается этого файла и извлечения информации из него. Нашлось три строки делай break файл сам закроется и уже дальше продолжай.
>>3197608 Не не, я закрываю файл в функции чтения, когда получаю 50кб последних строк, только потом передаю их в парсинг целиком как есть. Если длина файла не меняется, то и чтение не происходит. Но тут я кстати не уверен, насколько надежно это работает
>>3197698 >запоминай на какой строке остановился Да, этот вариант я тоже рассматривал. Но тут же получается, что при каждом запуске будет 1 раз читаться весь файл. В принципе, наверно это не проблема. Но в чем преимущество от чтения с конца заданного кол-ва байт?
Я конечно пока так далеко не заглядывал, да и нуб, но на ум приходят разве что потенциальные проблемы с добавлением новых строк в файлы проги в будущем.
Типа будет же функция, парсящая весь файл и собирающая вообще все строки в файл проги для подсчета и хранения статистики по запросу (нажатию кнопки). И логично, что при поиске новых строк для текущих функций проги мне надо будет добавлять их в этот файл на лету наверно тоже. Не делать же мне при каждом запуске проги сверку статистики в файле проги с файлом в котором я ее собираю. Или делать?
>>3197842 Когда ты читаешь файл с определенной точки, ты не читаешь байты которые были до этой точки. Записывай дату изменения своего файла чтобы знать менялся он или нет. записывай положение курсора чтобы читать только новые байты.
>>3197909 Это я понимаю. Но в таком случае, мне же нужно будет сохранять готовые данные в постоянный массив (между тиками чека файла) и убирать оттуда устаревшие? В принципе, получается на этом этапе устаревшие данные можно сохранять в свой файл для статистики. Звучит логично
Потому что щас получается у меня все просто срабатывает заново каждые 0.5сек (кроме чтения, если длина файла та же)
>Записывай дату изменения Из метаданных? Это не работает, я пробовал. По всей видимости файл остается открыт владельцем какое то время после записи
>>3198467 >>3198476 Если ты прочитал файл и запомнил положение указателя tell(), а потом снова открыл файл и после этого положения появились ещё байты, то очевидно что файл дописали. Нет блядь хочу каждый раз читать 10мб файл целиком и высирать хэш. Вот кто тупее мовный клоун или тот кто его слушает?
>>3198529 А як у файле змянілі некалькі байтаў? Пацерлі і дапісалі столькі ж новых? Прапанаваны табой мэтад не ўлічвае гэты варунак. Яго можна ўжыць у якасці аптымізацыі перад выклікам md().
Запускаю из питона js-код вот так: context = execjs.compile(combined_code) Собственно более простой у меня так и работал. Но есть те в которых есть объект window, естественно из браузера запущенный через хтмл всё работает. А как сделать чтоб всё это запускалось из питона.
Понятно есть жуткие костыли в виде селениума. Но можно без этого может как-то адаптировать код? Я хз.
А как в файле изменили несколько байтов? Потерли и дописали столько же новых? Предложенный тобой метод не учитывает это условие. Его можно применить в качестве оптимизации перед вызовом md()
>>3200523 Анон которому это надо писал выше, что сейчас читает последние 50 байт файла и вообще, похоже что у него в файл только дописывают, непонятно откуда набижали желающие каждый раз весь файл целиком читать чтобы хэш считать. Хэш считать это вообще самый последний варик, если ни каких других не осталось. Все софтины которые я видел как могут изьябываются чтобы полностью файл не прочитывать, а то это же пиздец. Представляю анон наслушается советчиков и у него скрипт будет каждую секунду 10мб файл перечитывать. который просто дописывается.
Чем больше изучаю питон - тем больше проигрываю в голос с этого недоязыка. По пунктам. 1. ООП нормального нет. 2. Приватных методов и аттрибутов нет, есть какая-то нелепая хуета с запеканием имен. 3. Скорость говно говна 4. Зачем-то сделали возможность добавлять на ходу свойства и методу экземплярам класса. Результат - дичайший жор памяти. Если хочешь нормально - юзай __slots__. Вопрос - а какого хуя сразу не сделали __slots__ изкаропки? А хуй его знает. 5. Какие-то невнятные рывки в сторону ФП с костылями.
>>3202648 → >2. Приватных методов и аттрибутов нет, есть какая-то нелепая хуета с запеканием имен В крестах есть приваты, но (по крайней мере по гугловому стандарту) их все равно надо префиксить всякой хуйней. Вот незадача.
>>3201858 сунул тебе пипиську, обтекай. Не те задачи написал. Каждый язык решает свои задачи. Если хочешь писю быстро-быстро сувать в шлюху процессор - юзай с++ или си
Но тут нигде не написано, как получился csv-файл. В смысле, мне же надо на каком-то этапе использовать свою прогу, получать спектрограмму от собственных тестовых аудиофайлов. Может, я не ту функию использую и обучение с практикой разойдутся.
Так что. Там где-то написано, как эти файлы получились и я просто в глаза долблюсь? Или это общеизвестное знание?
>>3204154 >ищу датасет Ты явно даже не понимаешь что это такое. "Датасет" может быть чем угодно. Реквест "ищу датасет" читается как "ищу хз чё"
>нигде не написано, как получился csv Ну хуй знаю открой код да посмотри или спрости в репозитории где софт взял, правда тебя там скорее всего на хуй пошлют, сопли нуфагам вытирать тотлько ИТТ любят.
>Не нашел нейротред Попробуй следующий раз искать не жопой, на дваче отдельная доска для этого есть.
>>3204271 >Ты явно даже не понимаешь что это такое. "Датасет" может быть чем угодно. Реквест "ищу датасет" читается как "ищу хз чё" Я буквально следующим предложением уточнил. Мой классификатор должен по аудиозаписи понимать, мужской голос или женский.
>на дваче отдельная доска для этого есть Если ты про /ai/ то там в основном готовые юзают
Ну да ладно, проблему я уже решил. Нашел сырой датасет, безо всяких там спектрограмм.
А тебе спасибо за охуенную любовь к вытиранию соплей ньюфагам, ну прям охуенно помог.
Проблема такая, открываю в Вижиал Студио много всякого кода из разных папок, но постоянно нужно прописывать или прямой путь к файлу или через костыль. Потому что по умолчанию папка проекта например c:\Studio и он все результаты работы прёт туда и она же является путём по умолчанию для всякого такого with open('image.png', 'wb') as out_file: out_file.write(pic)
Можно как-то настроить VS чтоб если файл image.png находится рядом с кодом, то оттуда же брался и путь.
Если честно давно заебала эта тема, хочешь скрипт проверить по пути с\хуй\пизда и надо его вручную раз за разом забивать или использовать свою функцию. Если открываешь *.py двойным кликом, то естественно пути указывать не надо, а вот в VS надо. Подскажите можно как-то пофиксить?
>>3206252 Если у тебя есть директория проекта C:\Studio, то ты и не должен ничего снаружи открывать и ничем снаружи пользоваться. По хорошему ты должен иметь виртуальную среду на уровне своего проекта созданную через venv или poetry, чтобы все зависимости находись внутри .venv а скрипты запускаемые в этом проекте тоже были в корне проекта или в поддиректориях с файлами __init__.py
Посоны я слегка тупой и на питоне на досуге всякой хуnтой страдаю, самоук во все поля.
Решил вот скачиватель видосов с ютаба для Андройда на питоне запилить. Короче суть в том что для конвертов видосов yt-dlp использует ffmpeg, который, как я понял, он не может на андройде с нихуя просто так юзануть.
Ну я поседел попердел в chatgpt, погуглил чё как, наткнулся на вот это: https://github.com/ArqiesAr/FFmpeg-Kit-Python Я так понял, что надо скомпилять ffmpeg под нужные архитектуры и с помощью враппера потом его запускать. Или же не нужно и там уже на этом гите всё что нужно есть?
Ну в принципе я вообще нихуя не понял и методом рандомного тыка перепробовал всякое. Скачал с этого гита /com/ с /android/ffmpeg-kit-android-lib/src/main/java/com/, запихнул в свою папку с сурс кодом. Нихуя.
>from jnius import autoclass >from jnius import
>FFMPEG = autoclass('com.sahib.pyff.ffpy')
выдаёт ошибку:
FFMPEG = autoclass('com.sahib.pyff.ffpy') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\...\Python\Python312\Lib\site-packages\jnius\reflect.py", line 209, in autoclass c = find_javaclass(clsname) ^^^^^^^^^^^^^^^^^^^^^^^ File "jnius\\jnius_export_func.pxi", line 22, in jnius.find_javaclass File "jnius\\jnius_utils.pxi", line 79, in jnius.check_exception jnius.JavaException: JVM exception occurred: com/sahib/pyff/ffpy java.lang.NoClassDefFoundError
В конце описания он там пишет: Building (Skip this part, its for myself lol) Run android.sh at project root directory to build ffmpeg-kit and ffmpeg shared libraries.
Что (вроде) ничего самому строить не надо. Короче я вообще хз. Что в этом сраном FFMPEG = autoclass('com.sahib.pyff.ffpy') должно находится то блеать? .so либы, *.class джава классы? Пиздец, помогите тупому. Умоляю. Как какать?
Что я хочу: Управлять ботом в тг через другого бота. Хочу, чтобы бот остановился, если прочитает в файле единичку. Для этого корутина должна остановиться.
Я беру корутину, в ней запускаю корутину с ботом, а затем бесконечно проверяю файл. Если надо - останавливаю корутину с ботом. Проблема в том, что бот не останавливается от task.cancel(). Только от task.result(). Так можно?
По сути, как я понял, надо всего-то обмазаться ффмпеговскими либами или джава классами и уметь их вызывать с питона.
Но поскольку я в гитхабе умею разве что склонировать гит и запустить setup.sh, думал может тут кто шарит и сразу своим прошаренным оком поймёт что да как там надо тыкать, чтоб нужные библиотеки высосать.
>>3208406 О бля отправилось. Кароче есть свежие книжки хорошие на русском? Читал Eric Matthes - Python Crash Course на ангельском, и чет чем дальше тем больше понимал что какое то туманное говно в голове образуется(остановился на 18 главе), возможно дело не в языке. Спрашиваю чтобы 600 страниц говна не читать. Пока зырю автоматизацию рутинных задач, но чет она старая, может чет новее есть. С меня тонны нефти.
Аноны, подскажите что именно прочитать. При запуске скрипта появляется вопрос "Ввести данные вручную(1) или автоматически(2), по умолчанию автоматически" и юзер должен ввести ответ или просто нажать enter. При любом ответе должны получится две переменные
Как можно добавить в каждый элемент списка кортежей [(val1, val2, val3), (val4, val5, val6), (val7, val8, val9)] значение val10, чтобы получилось [(val10, val1, val2, val3), (val10, val4, val5, val6), (val10, val7, val8, val9)], не разбирая каждый элемент в цикле? Что-то типа zip бывает для таких случаев?
Делаю телеграм-бота. Сейчас прикручиваю к нему апи. Как мне защитить хостинг от бомбардировки запросами, если вдруг его кто-то найдет? Ничего секретного я пока хранить не планирую, однако, как сделать так, чтобы на запросы только я получал ответ?
Есть некая функция которая принимается в себя объекты классов. Нужно проверить, есть ли в классе функции, которые вызывают остановку эвент лупа. Может ли пистон в такой уровень рефлексии?
Заебали в вакухах писать "автоматизация на питоне". Да что это значит, блять? Написать однострочник чтоб упаковывать в архив и перетаскивать на сетевую шару? Что?
>>3215381 >вакухах Чел, думаешь у тебя есть шансы устроиться куда-то, если ты: не оканчивал вузик не олимпиадник не имеешь коммерческого опыта по спецухе 1, желательно 2 года
>>3215751 1. Один кандидат-вкатун откликается не на одну вакансию. 2. Качество как минимум половины из этой тысячи - супер хуевое. 3. Всегда можно накрутить.
>>3215461 1. Оканчивал вузик. 2. Школу закончил без троек. 3. Имею коммерческий опыт от продажи пк и сборок их до построения скс-ок на виланах, линуксового админства, телефонии, виртуалок, контейнеризации, сиайсиди пайплайнов, написания ванлайнеров на баше.
Я просто спросил до какой степени копать питон чтоб этого хватило дево-псу.
>>3215963 >Я просто спросил до какой степени копать питон чтоб этого хватило дево-псу. Ну если ты девопс, то очевидно же, что подразумевают под автоматизацией - написание скриптов для всех девопс-задач (разворачивание, CI/CD, инфраструктура, облака, логирование, и т. д.)
Смарите, надо извлечь кое-что из xlsx файла. Строчек не так много, всего 100к, но ебейшее количество колонок. Делаю через openpyxl, все очевидные и гуглящиеся оптимизации включены. Скорость терпимая, но на 35к в несколько раз замедляется, хотя там нет никаких отличий на вид, память не течет. И хуй знает, как его профилировать или дебажить, как даже найти, на какой строчке начинается. Весь код внутри, сводится к: for i, row in enumerate(sheet.iter_rows(values_only=True)): pass
>>3216140 для всего этого есть ямлики, ансибл, терраформ, там своя логика и свой синтаксис. плюс можно немного это всё прикостылить башем. Видимо, подразумевается, что костылить нужно питоном.
>>3216921 Да, целиком. Я же писал, что с оптимизациям. Покопался там в кишках модуля и добрался до xml парсера отдельных элементов, чтобы вылавливать только нужные, но проблема где-то ещё глубже. Так что сдал как есть, пусть себе тормозит, лол. Тем более, что дальше снова разгоняется, как оказалось. Какая-то проблема с конкретным файлом.
>>3217491 >Потому что такие задачи обычно делают через баш скрипты. Мля, я приду в тред немецкого и спрошу, как будет "люблю тебя, моя любимая, любовною любовью люблю любовь любви", а мне скажут - ээ нет, чувак, обычно под любовь французский заточен, на-ка тебе на нём перевод. Я в Пейсон тренд пришёл, нахуя ты мне Баш свой пихаешь?
Вопрос про Джангу. Делаю сайт про походы. У меня календарь, на котором даты походов должны быть окрашены в определённый цвет. Я создал класс Date и класс Hike, Date вторичная модель для Hike, foreign key - category. Через API получаю список дат в JS скрипте, прохожусь по ним в цикле, ячейки календаря, содержимое которых совпадает с датами, делаю активными. В чём проблема? Заказчик попросил, чтобы при наведении на активную дату появлялось всплывающее окно, попап, так называемый. В этом попапе фоном должно быть фото, которое является полем Hike. Как мне его получить в JS скрипте? Если я пишу в скрипте dates.category, то я просто получаю id похода, к которому привязана дата. Помогите пожалуйста, с меня как обычно, нихуя.
>>3218032 Быстрофикс. Не dates.category, а dates.category. Dates - это конкретная дата, которую я получил в js скрипте, category - ключ, через который дата связана, с походом. А вот у этого похода есть поле photo, вот его мне бы получить в скрипте.
>"pyinstaller" не является внутренней или внешней командой, В рот ебал Питухона. Версия 3.12, сегодня утром работало, сейчас - нет. Что делать то? Вин 10
>>3187471 (OP) Подскажите, пожалуйста. Есть множество файлов Excel, из которых нужно собрать данные в общую таблицу в другом файле. Перед тем, как брать данные, нужно обновить каждый файл Excel (там сводные таблицы). В самой программе это делается через Данные - Обновить всё. Каким образом это можно реализовать в Python, желательно с помощью библиотеки openpyxl?
Ошибок не выдается. Но программная среда зависает. Python отжирает 12 Гб памяти. В итоге ничего не происходит, приходится снимать задачу через диспетчер задач.
Какой есть простой способ IPC с питоном? Нужно из другой хуйни вызывать код на питоне и получать ответ от него. Тупо запускать скрипт с аргументами каждый раз большие накладные расходы. Надо при старте запустить его и дергать при необходимости.
>>3219462 Для выполнения этой задачи на Python можно использовать несколько библиотек, включая openpyxl и pandas. Однако, для обновления сводных таблиц в Excel, библиотека openpyxl не подойдет, так как она не поддерживает выполнение макросов или обновление сводных таблиц. Для этого нужно использовать pywin32, который позволяет управлять Excel через COM-интерфейс.
Вот общий подход к решению задачи:
Открыть каждый файл Excel. Обновить все сводные таблицы в файле. Сохранить и закрыть файл. Считать данные из обновленных файлов и собрать их в общую таблицу. Пример кода, который выполняет эти шаги, приведен ниже:
python Копировать код import os import pandas as pd import win32com.client as win32
def update_excel_files(file_paths): excel = win32.gencache.EnsureDispatch('Excel.Application') for file_path in file_paths: workbook = excel.Workbooks.Open(file_path) workbook.RefreshAll() excel.CalculateUntilAsyncQueriesDone() # Дождаться завершения всех вычислений workbook.Save() workbook.Close() excel.Quit()
for file_path in file_paths: df = pd.read_excel(file_path, sheet_name='Sheet1') # Укажите имя листа или используйте другие параметры all_data.append(df)
# Считываем данные и собираем в одну таблицу collect_data(excel_files, output_file) Объяснение: Обновление файлов Excel:
Используется win32com.client для запуска Excel и открытия каждого файла. Метод RefreshAll обновляет все связи и сводные таблицы в книге. Метод CalculateUntilAsyncQueriesDone обеспечивает завершение всех вычислений перед сохранением. Save сохраняет изменения, а Close закрывает файл. В конце Quit завершает работу Excel. Сбор данных:
С помощью pandas открываются обновленные файлы. Данные из всех файлов объединяются с помощью pd.concat. Объединенные данные сохраняются в новый файл Excel. Этот подход позволяет автоматизировать процесс обновления и сбора данных из множества файлов Excel. Убедитесь, что у вас установлен pywin32 и pandas:
sh Копировать код pip install pywin32 pandas Также имейте в виду, что для выполнения этого скрипта необходимо, чтобы на компьютере был установлен Microsoft Excel.
>>3218032 Для реализации всплывающего окна с фото похода при наведении на активную дату, вам нужно будет получить дополнительную информацию о походе вместе с датами. Вот пошаговый подход к решению этой задачи:
Изменение API для передачи дополнительной информации: Убедитесь, что ваше API возвращает не только даты, но и дополнительную информацию о походах, к которым эти даты привязаны. Например, фото похода.
Обновление модели и сериализатора: Обновите ваши модели и сериализаторы Django, чтобы включить эту информацию в ответ API.
Изменение JS для обработки новой информации: Обновите ваш JavaScript код, чтобы обрабатывать полученные данные и показывать всплывающее окно с фото похода.
Шаг 1: Обновление API Обновление сериализатора Предположим, у вас есть сериализатор для модели Date:
python Копировать код from rest_framework import serializers from .models import Date, Hike
class HikeSerializer(serializers.ModelSerializer): class Meta: model = Hike fields = ['id', 'name', 'photo'] # Включите здесь нужные поля
class DateSerializer(serializers.ModelSerializer): hike = HikeSerializer(read_only=True) # Включаем сериализатор Hike
class Meta: model = Date fields = ['id', 'date', 'hike'] # Включаем связанный поход Теперь ваш сериализатор будет возвращать информацию о походе, включая фото.
Обновление представления Теперь обновите ваше представление, чтобы использовать этот сериализатор:
python Копировать код from rest_framework import generics from .models import Date from .serializers import DateSerializer
class DateListAPIView(generics.ListAPIView): queryset = Date.objects.all() serializer_class = DateSerializer Шаг 2: Обновление JavaScript Теперь, когда ваш API возвращает дополнительную информацию, обновите ваш JavaScript код для обработки этих данных.
Пример JavaScript кода:
javascript Копировать код fetch('/api/dates/') .then(response => response.json()) .then(data => { data.forEach(item => { let date = item.date; let hike = item.hike; let photo = hike.photo;
// Найти ячейку календаря по дате let cell = document.querySelector(`[data-date="${date}"]`); if (cell) { cell.classList.add('active'); cell.addEventListener('mouseover', () => showPopup(cell, hike)); cell.addEventListener('mouseout', hidePopup); } }); });
.popup-content img { max-width: 100%; height: auto; } Этот подход должен обеспечить, что при наведении на активную дату появится всплывающее окно с информацией о походе и фото.
Может, про пет-проекты поговорим? Кто что делал, что лучше писать сейчас, с чем возьмут на работу, и всё такое. Я вот сайт сделал, на джанге, но там больно уж простой бэкенд, просто обьекты из базы данных загружаются в шаблоны, и там уже обрабатываются. Поэтому сейчас сижу и думаю, чтобы ещё написать.
Можно ли сделать так, чтобы в админке джанго отображался календарь, в котором можно выбрать сразу несколько дат? Допустим, юзер заходит в админку, создаёт мероприятие, у мероприятия есть поле "даты", он нажимает на это поле, появляется календарь, в котором можно выбрать сразу все даты мероприятия. Как это сделать, хотя бы в двух словах скажите, плиз.
Хой, питоны, имею графическую софтину на kivy, работает в цеом заебись (памяти жрет скромно, процессор и видеокарту тоже щадяще жрет), но:
1. Как я понимаю, отрисовка в kivy реализована примерно как эдакий SVG, и при обновлении любого виджета обновляется вообще вся графика. Из-за этого анимации пиздец съедают видевокарту и проц, и чем больше графических инструкций, тем хуже. В простое нагрузки нет, но у меня всегда на экране есть одна анимация, в итоге все весьма хуево. Можно ли как-то изолировать отрисовку одного этого конкретно виджета, чтобы его обновление не триггерило перерисовку всех других? Он один хуй находится в статичной менюшке, его ничего не может перекрывать или типа того.
2. У меня есть в проге весьма тяжелые вычисления, которые должны крутится в реальном времени и потому не терпят никаких подвисаний программы. Чего смог упростил, где смог использовал numpy, некоторые вещи вынес в отдельный процесс, а сами вычисления крутятся на отдельном потоке (что не дает прироста производительности, но они должны крутиться независимо от потока kivy, иначе возникает дессинхронизация), и было бы заебись как-то может обойти GIL или вроде того, чтобы графический поток и логический не разделяли ресурсы одного ядра (опять ж, условная анимация или перемещение внутренних окон может нехило сожрать проц). Повесить эти вычисления на отдельный процесс задача сложная и хуевая, там вычисления связаны с БД, а с БД связаны графические виджеты (для синхронизации данных в БД и того что на экране показано), если это и возможно сделать, то очень тяжело (хотя я слышал про shared memory, может, это решение? В любом случае не хочу с IPC дрочиться, на самом деле). Че делать не знаю.
>>3221923 Наверное можно, но я скорее всего не стал бы, если в гугле похожих примеров нет. Проще взять кастомный виджет откуда-нибудь, да хоть на жквери. И впендюрить его заместо джанговского.
Раз уж заговорили про джангу, такой вопрос. Предположим, в админке я выбираю первую дату мероприятия и последнюю. А дальше что делать? Как мне сделать, чтобы в календаре, который выводится на странице, выбрались не только первая и вторая, но и даты между ними?
Хой пистоны. Имею алгоритм кубического сплайна, простая числодробилка на чистом пистоне, встроенные типы используются, изначально был первый вариант, я хотел его ускорить и написал второй, но он блядь оказался раз в 8 медленее и я не понимаю почему:
Работаю ручным тестером, хочу освоить автотесты и пойти работать за 300к наносек, подскажите, пожалуйста, с чего начать изучение питона? Какие книжки посоветуете?
Когда-то в вузе лет 5 назад на базовом синтаксисе его освоил (типа вывести четные числа от 1 до 100. И то писал говнокодом.
Сейчас хочу с нуля освоить питон до уровня, который позволит писать автотесты (в идеале хочу понимать ООП, паттерны проектирования, киссдрайсолид и вот это вот всё).
Какая книга доходчиво может объяснить всё это с помощью питона, учитывая, что я туповатая свинота?
всё изучал с гуглом (транслитом), осваиваю супер-быстро, просто нужна инфа с простыми сравнениями, например.
документацию читать я могу, но хуево, т.к. там есть некоторые языковые приемы, которые 99.9 разрабов сами не знают и идут в гугл переводить, а значит они такие же как и я, а значит английский знать для изучения не обязательно, хз че вы все доебались с этим пунктом
Есть ли у анончика список вопросов для джуниор/миддл разраба на джанге и фастапи? Пролистал, что предлагает интернет, там какой-то простецкий кал. С меня как всегда нихуя :3
Аноны, если сайт обмазан дичайшими перделками, всё так переливается элементы пагинации появляются плавно и исчезают и постоянно зависают, красиво то как ммммм. С этим говном только селениму может совладать?
>>3229344 >С этим говном только селениму может совладать? недавно этой темой интересовался, и вроде как если сайт не отдает готовый хтмл, там типа надо чтобы броузер запускался и дергал кнопки https://pptr.dev/ >Puppeteer is a Node.js library which provides a high-level API to control Chrome or Firefox over the DevTools Protocol or WebDriver BiDi. Puppeteer runs in the headless (no visible UI) by default but can be configured to run in a visible ("headful") browser.
а так селениум вроде тоже такое может, запуск headless browser
Здарова, положняк такой: надо хранить адреса и соответствующие им значения. Адрес - 2 байта (нужно 2048 адресов), значение - 1 байт, надо уметь производить слияние двух таких фреймов данных (по адресам). Количество адресов динамично, имеют хаотичный порядок.
В целом то словарь заебись подходит на роль нужной структуры данных, адрес - ключ, значение - ну, значение. У него и чтение быстрое, и запись - слияние шустрое, синтаксис очень приятный, а вот создается, зараза, долго, памяти жрет много, да и на выходе мне нужны байтовые данные.
Так чего не байтовый массив сразу? Мне нужен быстрый доступ по ключу, надо знать список ключей, уметь делать merge. Для байтового массива это все будет нихуево так долгие операции, ведь ключи надо будет вычислять на ходу. Можно избавиться от адресов, используя просто статичные байтовые массивы по 2048 байт, тогда индексы заменят собой адреса, решая проблему скорости доступа а с тем и слияния, но тогда мне надо отдельно хранить ключи, и по памяти тогда я еще больше отсасываю, чем просто со словарями, и это я еще не говорю про удобство использования - инициализировать байтовые массивы это гомоебля без смазки.
Какую структуру стоит использовать? У меня используются словари, и в целом все нормально работает, но проблемы имеются и я хочу от них избавиться.
>>3229539 >>3229344 Аноны. Как определить точнейшие координаты элемента на экране внутри окна браузера? Всё время какую-то хуйню находит. Я помню лет 10 назад над этим вопросом бился так и не победил, просто распознование изображения прикрутил и забил.
Но вот прошло 10 лет, все сайты с адаптивной версткой везде подгрузки, js и анимации. Неужели это всё ещё задача не имеющая общего решения?
Может дело в том что я работал с Хромом, может в рпере или лисе координаты нормально находятся?
Здарово, решил посчитать свои деньги. Поэтому пошёл вкатываться в питон, чтобы написать программку. Сейчас осваиваю сам язык, а затем буду изучать библиотеки для гуи/парсинга/графиков. Так-же пока думаю о том как будет выглядеть само приложение. Надо и данные с МосБиржы подгружать для котировок, вести историю закупок активов, считать чистый и номинальный доход без вычета инфляции и ндфл, календарь дивидендов и купонов, оценивать диверсификацию портфеля и его актуальную стоимость на данный момент и.т.д. Есть какие-нибудь книжки по архитектуре самих программ? Жду ваших советов мужики.
1. Изучение Python: - "Python Crash Course" by Eric Matthes - "Automate the Boring Stuff with Python" by Al Sweigart
2. Для GUI: - PyQt или Tkinter - популярные библиотеки для создания графического интерфейса
3. Для парсинга: - Requests и BeautifulSoup для работы с веб-страницами - pandas для работы с данными
4. Для графиков: - matplotlib или plotly для визуализации данных
5. Книги по архитектуре программ: - "Clean Architecture" by Robert C. Martin - "Design Patterns: Elements of Reusable Object-Oriented Software" by Gamma, Helm, Johnson, Vlissides
6. Для работы с API МосБиржи: - Изучите официальную документацию API МосБиржи - Используйте библиотеку requests для отправки запросов
7. Для хранения данных: - SQLite для локального хранения данных - pandas для работы с данными в памяти
8. Советы по разработке: - Начните с простого прототипа и постепенно добавляйте функциональность - Используйте объектно-ориентированный подход для структурирования кода - Разделите логику на модули (например, модуль для работы с API, модуль для расчетов, модуль для GUI)
Аноны, подскажите какой-нибудь хостинг где можно бесплатно ПОИГРАТЬ С ПИТОНОМ. Имею в виду сервер, который мне разрешит загрузить свой код, который оттуда сможет например запросы делать и курится там автономно. Такое вообще бесплатно бывает? Хостинги же дают всем желающим место под сайт с доменами второго-третьего уровня yousite.zapupa756547567.1gb.ru где ты можешь что угодно делать как в песочнице. А вот с питоном как? Это всё таки не сраный CMS он процессор нагружает, какую нибудь рассылку делать может. Я думаю это на бесплатных тарифах запрещено? Поясните плз за это вот всё и ссылочку. Мне нужно для обучения и экспериментов.
>>3187471 (OP) Как научиться грамотно пользоваться стандартной библиотекой? Пишу уже лет 5 на языке (но не работал, лол, сторожем работаю), до этого на сишке по приколу писал, сейчас такой проектикт нихуевый по масштабу есть. Речь про всякие itertools, collections, functools. Решаю все свои задачи в лоб, без библиотек, тупо циклы, ветвления, и этим, конечно, можно написать что угодно, но я понимаю, что те же задачи можно решить элегантнее, быстрее.
Например, с байтовыми данными я работал через int.to_bytes и from_bytes, а потом научился пользовать struct и прям круто стало. Освоил next, filter, enumerated, defaultdict, и применяю, когда уместно. Next прям нравится для поиска.
>>3233402 Твой вопрос примерно звучит так: делаю 5 лет всякую фигню, пишу простые скриптики. Но хочу быть крутым программистом и писать крутой код. Вот просто хочу и всё. Что для этого нужно? Ну учиться нужно. Опыт нужен.
>>3233402 >Освоил next enumerated Ты это должен был сделать в первый день изучения языка, это буилд-ин функции, самые базовые т.е.
>filter Рудимент языка, устаревшая функция. Ведет себя как генератор но генератором не является. Проще свой генератор написать, а компрехенсон и более читаемый и в 10 раз быстрее работает и чаще даже места меньше занимает, если однострочник.
>defaultdict У словаря есть метод setdefault, который делает то же самое, но в некоторых случаях медленнее defaultdict на несколько микросекунд, что в большинстве случаев не важно.
Запустил multiprocessing.Process в main(), он с нуля всё приложение стартанул в своем инстансе. ОС виндоус. Пошел смотреть пишут, что в ЮНИКС используется метод fork который с текущей точки процесс делает, а вот в виндоус spawn, который с нуля запускает всё приложение? Не расточительно ли это? Может я что-то не так понял? Может он только имена импортирует и на самом деле это не так "тяжело" как кажется? Я знаю тут сидят мудрейшие из людей, с глубочайшим пониманием подкапота и всех вещей, не раз мне поясняли по хардкору. Поясните за это молю.
А мультипроцес мне нужен чтобы gui от логики отделять, если что.
>>3233402 На РАБотку устройся, там у более опытного челика будешь моментами спрашивать, а не стоит ли этот велосипед заменить на функцию A из стандартной библиотеки. Еще очевидное решение, но ты можешь свой йоба-проект подрефачить, посмотреть и подумать, где можно упростить свои велосипеды.
Имею класс, он наследуется от словаря. Чтобы его создать, приходится сначала создать словарь и передать этот словарь в конструктор моего класса. Как итог - замедление раза в 2 из-за лишнего копирования. Выглядит примерно так: MyDict({k:v for ...})
Можно ли как-то без создания этого транзитного словаря, который создается лишь чтобы быть скопированным далее?
аноны открыл я тут видосы по питону, начал смотреть. вещает хрен: задача определить на каком этаже такой номер квартиры. 20 квартир на парадную, пятиэтажка.
пример он в обучалке показывает через целочисленное деление : apart_number = 12
Привет анон, тут помогут с вопросами по питону от самых маленьких? result = 4 / 2 if isinstance(result, int): Почему не работает? Функция не коллит заданный выше var. Помогите лучше понять синтаксис пистона.
>>3235610 Так, я кажется разобрался. Как удалить пост? Всё работает, просто результат 4/2 в питоне - не целое число. Результат деления питон показывает как 2.0 почему-то, лол.
>>3235610 Так это получается не рабочий скрипт, потому что при / результат всегда будет floating point, а при // всегда будет integer.
Есть ли какой-то рабочий вариант как проверить результат деления? Типа проверять последнюю цифру результата деления, если 0 то целое число, если не 0 то не целое?
>>3235624 >А что ты сделать собирался? Ничего, я просто изучаю питон с нуля. Пробую делать практические задания чтобы лучше разбираться в синтаксисе языка.
>>3235666 Бросать ошибки наверх. Можно делать проверку в иф и бросать ошибку. Представь у тебя функция вычисляющая квадратный корень. Ты делаешь в ней проверку на неотрицательность аргумента, чтобы что? Очевидно что проверять пользоательский инпут должен код отвечающий за него, а не эта функция. Поэтому код принимающий ввод пользователя должен проверять что число неотрицательное и передавать твоей функции. А функция должна посылать исключение для отрицательного числа, чисто как контракт из бизнес логики, которая может работать только в определенных границах. Фактически приложение будет работать без исключений, но будет защита от хрупкости при рефакторинге, если кто-ибудь уберет из кода инпута проверку неотрицательности.
>>3235685 Человеческий фактор. Только что создал 200 миллиардов экземпляров класса с наследованием от словаря и без оного, передачей в обоих случаях конструктора словаря в аргумент. Разницы 0.1 микросекунда, ты очевидный бариста вкатун с курсов, который в душе не ебет что делает, просто повторяет шаблон с урока или с чата гпт, без понимания процесса. Таким образом ты садишься жопой на горлышко бутылки в другом месте. Кто знает может ты даже не знаешь что такое наследоваться. Попробуй перезагрузить компьютер.
>>3235743 >Представь Самомнение, выше гор. Мне ничего представлять не нужно, каждый первый школьник так говнякает. Говнокод называется. Самое смешное что в тебе не капли рефлексии нет, ты свое невежество защищаешь.
Пытаюсь вкатиться в докер. Хочу сделать образ со своим маленьким проектом на postgres+python. Похоже, postgres не работает. Я пока даже не понял, как прозвонить его порты. Ошибка connection to server at "127.0.0.1", port 5433 failed: Connection refused Is the server running on that host and accepting TCP/IP connections?
Что мне засунуть в докерфайл, чтобы этого избежать?
>>3236903 На каждый тип одежды в классе прикид заводишь массив того что уже надето. >>3237100 mac, linux, win? docker создаёт свою виртуальную сеть, внутри которого живут приложения. Для разработки можешь замапить порт 5432 на localhost флагом -p, потом сделаешь всё в compose, чтобы они в одной сети были.
>>3235743 Короче просто возьми какой-нибудь учебник по питону, не для начинающих, где все эти конструкции изложены, специфичные для питона.
Те главы, которые хорошо знаешь, пролистаешь очень быстро, а в других что-то новое для себя найдёшь.
Собственно только так.
enumerate это уж совсем какая-то база-база. next вещь сомнительная, лучше научить свои генераторы реализовывать, если ещё не умеешь (раз enumerate что-то продвинутое по твоей оценке, то легко), всякие контекстные менеджеры, и чтобы руками из создавать, и там через contextlib.contextmanager. Это пример вещей, специфичных именно для питона
Что лучше использовать для объединения однородных констант в одну, чтобы меня при этом не отхуесосили за говнокод? Например, есть описания полей в моделях, и я хочу вынести все эти описания в одну общую константу в виде пар ключ-значение. Тупо словарь или лучше какие-то более извращенные варианты?
>>3237730 разумнее сделать какой-нибудь класс для этого, чтобы обращаться не как consts['const_1'] а consts.const_1
BTW, в модуле collections есть namedtuple, как раз позволяет подобный фунционал. const_class = namedtuple('const_class', ('var1', 'var2')) consts = const_class(var2=1000, var1='var-1') lдальше можешь обращаться как consts.var1 при этом плюс в том, что тут read-only, как раз получается как константы настоящие.
Минус в том, что это более тормозное решение, надо с этим аккуратнее быть.
>>3238453 А оно тебе надо? У тебя нет никакого бэкграунда судя по вопросу про линукс и записи на курсы. Отсидишь 30 часов слушая про математику, алгоритмы и прочий кал, а в конце поймёшь, что нужно ещё 60 часов сопутствующего говна изучить, а потом ещё и ещё. Будешь вечно что-то гуглить, читать, садить зрение, спину, станешь жирным и нервным. А что по итогу? Работы нет, учить очередную нейросеть или рисовать админку на джанго за 40к оклад нахуй надо.
Быть плиточником, автослесарем, электриком, токарем, да заниматься любой рукастой работой гораздо интереснее чем питонить. Серьезно чел, посмотри на рост недвижимости, посмотри как круто красить тачки в мастерской, варить металлоконструкции, ты всегда будешь подтянутым, сильным, через пять лет ты будешь работать на себя или будешь начальником, а не червём пидором, которому будет ебать мозги тупая шалава из менеджмента на созвоне
Допустим у меня есть миллион объектов размером +- 1кб, которые мне нужно постоянно хранить в памяти (или же восстанавливать из базы данных, если вдруг исчезнут. При этом они структурированы по id пользователей от 1 до 100к и по id файла от 1 до 100 (или же допустим что это неупорядоченные интовые переменные). Как мне лучше все это хранить? На вскидку приходят: Словарь со словорями с объектами Таблица связей user_id - file_id так как у нас типичная связь многое ко многим. Что из этого лучше?
>>3238865 >При этом они структурированы по id пользователей от 1 до 100к и по id файла от 1 до 100 (или же допустим что это неупорядоченные интовые переменные). У 1 пользователя может быть до ста файлов и у одного файла может быть до 100к пользователей
>>3238865 >Что из этого лучше? Миллион это мало. Словарь. В чем вообще проблема. сидишь с линейкой, если память позволяет - словарь. если память не позволяет - бд, но с бд можно очень легко обосраться и даже не понять. Так что если ты нуб - сиди на словаре до упора. пока память есть.
Когда и где использовать weakref? Делаю модуль событий, чтоб связывать объекты БД с их графическим отображением, типа, поменяли title у объекта в БД - и сразу же поменялись данные в виджете. Вот только приходится бинды все руками самому потом удалять (если удалять виджет, например), я правильно понимаю, что именно тут мне может помочь weakref? Типа, не останется ссылок на объект, и бинды CPython сам подчистит. Или не?
>>3221928 Короче, вторую проблему решил рефакторингом и переписыванием всякой тяжелой ебанины на Cython. Но че с этим делать: > 1. Как я понимаю, отрисовка в kivy реализована примерно как эдакий SVG, и при обновлении любого виджета обновляется вообще вся графика. Из-за этого анимации пиздец съедают видевокарту и проц, и чем больше графических инструкций, тем хуже. В простое нагрузки нет, но у меня всегда на экране есть одна анимация, в итоге все весьма хуево. Можно ли как-то изолировать отрисовку одного этого конкретно виджета, чтобы его обновление не триггерило перерисовку всех других? Он один хуй находится в статичной менюшке, его ничего не может перекрывать или типа того. Ваще хуй знает. И нагуглить не получается никак. Тут разумисты сидят, может все же подскажут. OpenGL там как-то дергать или че...
Еще другой прикол. У меня есть цветовая схема в программе и возможность ее настройки прям в режиме реального времени. Это охуенно удобно для разработки, цвета подбирать, да и красноглазым понравится. Все хорошо, кроме того, что если я меняю, например, цвет текста у Label, то какого-то хуя он меняется и у Button, хотя в цветовой схеме они имеют различные значения, ссылаются на разные ColorProperty. Связано это с тем, что Button наследуется от Label. Если поменяю цвет Button, то цвет Label останется неизменным, но поменяются и все наследники Button, хотя параметр color ссылается на другой ColorProperty. Он бинды не сбрасывает при изменении параметра color или че? Срань какая-то.
>>3240215 >Ваще хуй знает. И нагуглить не получается никак. Тут разумисты сидят, может все же подскажут. OpenGL там как-то дергать или че... Итак, решение было нащупано и найдено. Внезапно. Если кому еще это надо:
У класса Window есть render_context. Нужно будет переписать у App функцию _run_prepare, добавив туда добавление нового контекста и canvas для этого контекста, а так же переписать ему функции update_viewport и on_draw, и новую - on_draw2 (для нового контекста). Сделать это надо перед добавлением root виджета. Выглядит это примерно так: https://pastebin.com/jJFdXJgC
Дальше, в виджете, который вам надо отрисовать изолировано, используйте это во время инициализации: self.parent.canvas.remove(self.canvas) Window.canvas2.add(self.canvas)
Как видите, виджет остается в Layout, в котором и находился - значит, он будет как и прежде на своем месте, изменение размеров или перемещение - это все будет работать, как и прежде. Просто рисоваться он будет изолировано.
И это для отрисовки (нужно дергать руками - сделайте бинды на то, что у вас меняется в анимации или еще где, и вызывайте): Window.on_draw2() Window.dispatch("on_flip")
Так отрисуется только то, что находится в этом втором canvas.
Думаю, можно это масштабировать, сделав список контекстов или словарь Widget: RenderContext у класса Window.
Что будет, если удалить этот виджет? Ничего хорошего. Если у вас возможны ситуации, при которых он удаляется, то переназначьте у Window так же и класс remove_widget.
Аноны, как вы свои программы передаете друзьям, коллегам, однокашникам и прочей живности, которая не тыжпрограммист. Я раньше использовал pyinstaller но он в режиме одного файла блокируется защитником виндуса, да и этот "один файл" на самом деле просто самораспаковывающийся архив, который засирает временные файлы и требует время на распаковку каждый раз во время запуска. 10 раз программу заспустил и у тебя temp 1 гигобайт весит. Надо в скрипт добавлять функцию которая поддитрает. В общем хуйня какая-то, а кучу файлов передавать некрасиво. Какие ещё есть популярные решения и такие же одноклеточные как pyinstaller - одну строчку вбил и готово.
>>3241106 >10 раз программу заспустил и у тебя temp 1 гигобайт весит Не замечал за ним такого. Алсо, пусть просто накатят python, епт, там установка в одну кнопку.
>>3241177 >пусть просто накатят python Чеееееел. В 90% случаев никто этого делать не будет. А если начнут, то заебут "я тут нажала и оно перестало работать".
>Не замечал за ним такого. Плохо смотрел. Когда пайинсталер запаковывает в 1 файл программу, при её запуске в temp распаковывается архив примерно в 2-3 раза больше по размеру. Если например у тебя в программе cv2 и pyautogui используются то такая программа будет весить 60 метров и при каждом запуске будет высирать временных файлов на 180 мб.
Причем при каждом запуске новая папка высирается. а старая не удаляется сама.
>>3241211 60 точно было от numpy, scipy, kivy, еще до кучи мелочевки. От numpy и scipy я правда отказался и теперь exe по 30. Ну я просмотрел пути сейчас и нет там в temp ничего от pyinstaller.
>>3241215 Чел. Если у тебя пайинсталер запаковывает в 1 файл, это просто архив который каждый раз распаковывается во временные файлы в директорию начинающуюся с _mei. Если не знаешь где у тебя временные файлы добавь print(sys._MEIPASS) Эта переменная появляется после запаковки пайинсталера в режиме 1 файл.
>>3241239 >windows 7 Вижу что вы человек культуры.
У меня была старая версия pyinstaller,обновился, кстати последняя 5.13 видимо в этом всё дело было. Впрочем это так то и не было особой проблемой - удалял файлы из скрипта. Да и то что при каждом запуске 180 метров распаковывается это в любом случае неудобно.
>>3241249 У меня на новых версиях pyinstaller не собирается kivy, ну или это из-за multiprocessing, не стал особо разбираться, остался на старой просто.
> Вижу что вы человек культуры. У меня фимозное железо, о чем я выше и упомянул.
>>3241258 Ну... В любом случае мне как минимум лень перекатываться, даже если это имеет какой-то смысл помимо обновлений безопасности. Хотелось бы, наверное, новые версии пистона потрогать? Читал, что там с GIL боряться.
>>3241274 >Почему так, как думаешь? Наверно потому что это самораспаковывающийся архив без цифровой подписи, хотя антивирусы на него не ругаются, но я ещё не пробовал обновленный pyinstaller может с ним такого нет (вероятность этого крайне мала)
Сделал я значит телеграм бота. Хочу теперь людям его показать. Купил хостинг за 200 р/месяц. postgres нет - ладно, переписал на mysql. Теперь вопрос - как запустить скрипт-то? На панели управления есть shell-клиент, там можно запустить, но как только выйдешь, все вырубится. Допустим, я упаковал все, связанное с запуском в script.sh, но когда пытаюсь его запустить, говорят, что нет допуска.
Дополнительно. Как обеспечить, чтобы бот, в случае чего, не упал на полдня, если сервер перезагрузится, пока кто-нибудь меня не ткнет? Мне приходит в голову разве что проверять, что bot.py запущен специальным скриптом через CRON раз в пять минут
>>3243022 >Допустим, я упаковал все, связанное с запуском в script.sh, но когда пытаюсь его запустить, говорят, что нет допуска. Так, с этим разобрался. Я раньше с линуксом много не работал, лол.
Аноны, вот у меня гуи в отдельном треде от логики. Как теперь по всем понятиям сигналы в логику посылать и чтобы пацаны не засмеяли. Например, делаем словарь где ключ это строка, а значение это Event() (ну или другой сигнал), а потом под кнопки в гуи этот словарь подкладываем? Например вот у нас кнопочка старт туда добавляю d["вычисления поехали"].clear() Так нормально? Просто сигналов много, а в словаре они компактно собраны и их можно удобно перекидывать по тредам. Ну как?
У меня есть бот. Нужно, чтобы он работал постоянно, но после загрузки на сервер обнаружил, что он вырубается раз в несколько часов. Вопрос: как обеспечить бесперебойную работу сервиса? Обнаружил, что на линуксе существует крон. Придумал две идеи: Раз в две минуты кроном запускать скрипт, который проверяет, что бот запущен, и если бот не запущен, то запускает (не знаю, может ли на линуксе меняться pid у процесса. Как вообще большие мальчики решают эту проблему? Мне приходит в голову только ботом раз в минуту класть в файл текущее время. тогда если в файле не текущее время, чекер, запускаемый через крон, будет знать, что надо запускать файл). Идея 2. Кроном запускать бот раз в час на один час. Тогда отпадает необходимость что-то проверять, зато регулярно у бота будут обрываться диалоги.
Вопрос, как лучше всего обеспечить бесперебойную работу?
>>3245337 может ты просто не можешь понять его вывод? Что делает приложение? Ты уверен, что правильно понимаешь следующие концепции: - классический memory leak в смысле кучи в Cи. - RSS и как с ним работает cgroups ?
>>3245898 > Ты уверен, что правильно понимаешь следующие концепции:? Забыл освободить память или забыл удалять какие-то объекты из списка - какая в целом разница, если итог одинаков?
Я исправил причину, так как знал при каких условиях происходит проблема и докопался до причины. Вот если бы было непонятно из-за чего...
За профилировщик спасибо, думаю, понадобится однажды. Мне по CPU нравится профилировщик yappi.
Решил поиграться с докером и docker-compose (я не тот анон, у которого постгресс не взлетел). Хотел сделать модно-молодежно, фастапи и nginx поднимаются в двух контейнерах внутри одного compose, фастапи вообще наружу не торчит, красота.
Но! Тогда получится, что в мой фастапийный репозиторий протекут конфиги nginx а нахера они там нужны. И еще, если у меня два пет-проекта хостятся на одной vpsке, и сейчас там на входе стоит nginx и по маске урла раскидывает запросы на разные порты, то как это все организовать в докере? Не ставить же мне nginx за вторым nginx где первый роутит запросы между разными сервисами, а второй чисто обслуживает конкретный сервис. Какой-то оверхед получается, не?
>>3246829 Попытался нуиткой свой проект собрать, через полчаса выключил нахуй компиляцию на половине, побоясь для своего некроноута температур в 80 градусов с ебанутой нагрузкой. Так и не понял, какого хуя он всякие нампаи компилировал, если я их не использую.
>>3246861 Понятно, что он ищет все вхождения модулей. В фреймворке, что я использую, есть импорт numpy, но он происходит только при условии запуска на андроиде или ios. А я под винду собираю. Наверное можно как-то их сборку запретить.
Пытаюсь вкатиться в программирование. Анончики , помогите с циклами. пиздец руки опускаются. На курсах обьясняют простые вещи, а домашки пиздец сложные задают.Есть может туториалы какие годные? А то во всех обучалках обычный перебор, а на практике каките-то неебейшие дроби в степенях n...
А так проходи собесики на интересующие тебя вакансии, выписывай вопросы оттуда к себе, ищи ответы на них в свободное время, и по кругу, пока не будет от зубов отскакивать.
Nuitka реально хороша, мой kivy проект пакует аж в 11мб standalone. Еще б я понял, как от библиотек TIFF, WEBP, OGG, OPUS избавиться - выиграл б еще мегабайта 2. Они не идут с SDL2 по стандарту (TIFF и WEBP точно), пересобирал kivy, изменяя pyx и pix файлы, вырезая импорт библиотек звука, видео, и все равно линкуются... ох уж эта мания к снижению размеров, мде
Есть много устройств (аудиокарт). Все их нужно по-особому конфигурировать набором команд вида: set amixer {key} {value}
Многие {key} управляют обобщённым свойством, например громкостью или гейном микрофона. Другие {key} уникальны для устройств и просто нужны "чтобы работало".
Но для одних устройств громкость выставляется так: alsamixer set MasterVolume 100 А для других громкость выставляется так: alsamixer set VMuxerDACZalupaZhopa 100
И там и там управляем общим свойством - громкостью.
Хочется публичный интерфейс который бы сам переводил и репамил эти особеости установки параметров под каждое устройство, а я бы просто делал "audiocard.set('volume=100')"
Как лучше обрабатывать и хранить конфиги, чтобы был доступен публичный интерфейс с human-readable {key}-{value}, а под капотом для каждого переводилось в device-friendly {key}-{value}?
Может либы есть под это?
Пока думаю придётся писать класс с вложенными словарями и намедтуплами. Но вообще проблема "сделать переводчик с человеческого на драйверный" должна быть распространена.
>>3187471 (OP) Аноны, возможно ли как-то скомпилировать питоновский проект в установочный файл для Линукс (deb) или чтобы программа сразу запускалась без установки? Для винды все элементарно, а вот с GNU/Linux не знаю.
Аноны, поделитесь мудростью. Вот есть у нас в приложении некие пути, которые всегда зависят от того, откуда запускается приложение. И уже на основе этого базового пути подставляем относительные пути для файлов приложения. Например приложение запускается из D:\my_app\run.exe Это у нас базовый путь, потом от него делаем относительные пути. D:\my_app + \images\pic.jpg D:\my_app + \config\settings.ini D:\my_app + \output\log.txt
В каком месте приложения и каким образом все эти пути держать. Например мне нужно чтобы из разных фалов приложения можно было дернуть путь до лога, этот путь нужен в нескольких местах.
Т.е. нужно: 1) сначала получить базовый путь D:\my_app 2) потом собрать все пути какие есть в приложении 3) нужно чтобы этот объект с собранными путями был виден где угодно, передавать как аргумент и таскать везде объект с путями слишком некрасиво.
Какая питоническая мировая практика коммерческой разработки на лучших галерах по этому поводу?
>>3251897 А как быть если мне надо в ручную указать особый base_dir, который может отличаться в зависимости от разной среды и прочего. Т.е. мне нужен объект куда я передам base_dir, он там сделает все пути и уже оттуда я буду пути дергать.
>>3251904 Ну т.е. запускаю приложение оно в main смотрит где находится получает base_dir и ещё некоторые переменные и на основании их делает пути. И все пути должны быть в одном месте. Т.е. если у меня путь к картинке в 10 местах неудобно потом его переделывать. Я вот думал класс сделать для путей, но боюсь изобрести велосипед.
Почему все советуют Лутца? Он же конченный совершенно.
Во-первых, книга на 1500 страниц -- это же пиздец. У человека пропадет любое желание что-то делать уже на половине.
Во-вторых, упражнений нет вообще. Я уже давно понял, что учебники без нормальных упражнений -- это лютый кал. Именно самостоятельная работа приносит наибольшую пользу. Все остальное, это в одно ухо влетело, в другое вылетело.
>>3252071 кто все? Шапка питон-треда, которая лет 7 сколько я ее помню, в этом состоянии?
Никто не советует. Тягомотина - пиздец. Просто он довольно подробный. Можешь держать по другой и сверяться по тем или иным вопросам. Но за последние 10 лет появилось много чего получше.
>>3252083 1) Абсолютный путь к корневой директории вычисляешь своим хитровыебаным способом с переменными 2) Путь к картинке всегда задаешь относительно корневой директории 3) Коннкатинируешь 1 + 2
>>3246122 Незразумела навошта табе асобны кантэйнер з nginx. Я звычайна піхаю проксі у вобраз з прыладай, на ім жа статычны змест. Асобным кантэйнерам у мяне толькі база звестак, каб можна было абнавіць прыладу і пакінуць старыя дадзеныя. Але для малых праектаў табе непатрэбны проксі ўнутры кантэйнера. Разам з FastAPI ужывай сэрвер кшталту uvicorn у адным кантейнеры. Такім чынам будзе толькі адзіны проксі на VPS.
Господа, посоветуйте как обмануть систему и по минимуму использовать JS для веб-UI. Возможен ли бэк на фласке/Фаст-апи, а фронт на FastUI, или Flet, или Jinja. Или без JS невозможно? Пет- проект, красота неважна.
>>3253805 Советую смириться и затерпеть джаваскрипт. Тебе же это как разрабу в плюс будет, потому что познакомишься с другим ЯП, немного иной концепцией программирования, будешь лучше понимать других разрабов. Мне на проекте сказали, что фронта у нас нихуя нету и в ближайшие месяцы не появится, поэтому сиди, разбирайся с реактом, потом сделаешь вот эту, эту и эту хуйню. Ну я с основами разобрался, ознакомился с концепцией хуков, чувствую себя лучше. До этого там же на jQuery писал, тоже полезный опыт. Так вот, имхо, полезнее зажав нос разобраться в классическом фронтенд фреймворке, чем вникать в какую-то мертворожденную залупу, которая никогда не достигнет даже минимальной популярности, и в итоге сдохнет. Знакомый флаттер-разраб сейчас страдает потому что нихуя вакансий нету.
Сап, аноны Я джавист с 3 года опыта работа в индустрии (IT отдел банка), но меня дико заебал бездушный энерпрайз. Вот думаю вкатиться в машинное обучение/искусственный интеллект. Как я понял, пайтон в этой области это go to. Что посоветуете почитать, чтобы можно было быстро выучить минимально необходимый технический стек: базовый пайтон + основы машинного обучения, фреймворки и т.д. В сети очень много академической литературы, не хочу с этим заморачиваться.
>>3255755 Спасиб. Блин, но вот многовато придется учить. Мне уже 27 лет даже как-то стремно пытаться перекатиться в совсем другую область. С другой стороны, я одинокий инцел и свободного времени много. В любом случае, спасибо за ссылку, это то, что я хотел.
>>3255835 >Блин, но вот многовато придется учить Оно так только выглядит. Я думал, ты по верхам попробуешь эти темы закрыть, вкатиться и дальше уже въебывать, как учил Антон Назаров. Если у тебя дохуя свободного времени - можешь попробовать еще курс DLS от МФТИ. Бесплатный, идет в режиме учебы 2 семестра, ебашить надо, но вроде толковый. Но я бы сейчас охуел с того чтобы почти год куда-то там вкатываться без гарантий, когда я уже в колее бэкендера. Занимало бы это не год, а, хз, 3 месяца, я бы еще подумал.
>>3256139 Когда процесс заходит в функцию и делает setdefault он устанавливает 30 как значение. Далее прибавляет к 30 те же самые 30. Следующий раз когда он заходит в функцию он пытается выполнить setdefault, но т.к. значение ключа уже есть он ничего не делает и идет дальше и прибавляет к 60 ещё 20.
setdefault лучше всего подходит для изменяемых типов данных, а неизменяемые типа числа как у тебя чаще всего особо смысла нет так использовать
def add_item(b, c=1): ....if b not in a: ........a.setdefault(b, c) ....else: ........a += c
>>3256217 Все книги НОРМ. Книг неНОРМ не существует в природе. Любая книга проходит через издательство/переводчиков, где они решают публиковать/переводить её или нет. Потом ещё есть рецензенты, которые исправляют косяки/подсказывают. Книга проходит через десяток рук, прежде чем опубликоваться. Неужели ты думаешь, что кто-то публикуешь хуйню. Типа, зачем издательству это? Чтобы не было продаж?
>>3246829 Поставил нуитку скомпилировал файл и вот что заметил. Если перехватывать исключения, например сис эксептхук, там не будет писаться строка где исключение случилось, только блок кода, например метод и _репр_ исключения. Понятно что это из за компиляции в си, но неудобно для отладки же. Или я что-то не понял.
>>3187471 (OP) Огромное спасибо за шапку и коллекцию книг!
Есть ли в интернете подобным образом оформленные тематические сообщества? На любом языке. Гугл будет совать платные книги и курсы, реддит полагаю выпилит ссылки на книги, у SO формат вопрос-ответ.
Последнее время постоянно борюсь с желанием выкачать интересующие тематики просто на всякий случай.
>>3259473 Ну и нахрена тебе эти книги нужны. По каждой библиотеке есть отличная документация. Все кратко и по делу от создателей технологии. А в книгах всегда воды много.
>>3259473 >Гугл будет совать платные книги О бомже мой! Какая наглость! Как посмели авторы требовать денег за свой труд! Какие ироды, не могут уже и бесплатно поработать, ишь ты!
>>3260533 Импорт это базовый синтаксис, про него в доках всё написано. Про стиль, как желательно делать отступы и прочее говно написано в ПЕПе и это живая тема без правил, если есть необходимость какая-то, то ты можешь вообще всё по-другому у себя в проекте организовать.
>>3256252 Доброе утро, блеать! Теперь издать книгу стоит копейки! Их даже не печатают. Сразу в электронном виде продают. Конечно, дохуя развелось посредственных книжонок.
Сап питонач, нужна помощь потому что на стакэксчейнже как решить проблему не нашёл а самостоятельно в голову решение не приходит. Необходимо в текстовом файле изменить строчку-флаг. Условно: >kthrho = 0.2 Заменить на >kthrho = 0.4 При этом заранее неизвестно чему может равняться этот флаг, поэтому просто поиск строчки "kthrho = 0.2" не работает. Создавать новый файл с новым флагом тоже нельзя из-за особенностей задачи.
Почему питон так плох в режиме однострочников? Почему на перле можно написать огромный код и запустить perl -e "..", а python -c ".." начинает ругаться на какие-то отступы, какие могут быть отступы в однострочнике, вы совсем поехали там?
Посоветуйте минимальную среду для Linux, банально замену ipython чтоб можно было функции отлаживать. Типа слева пишешь код, справа видишь в консоли результат. Какие вообще подходы? Сейчас если хочу протестить regexp или математику, то открываю ipython (но он не может в функции). А если пишу код, то пишу в vim и в соседней вкладке терминала запускаю. Что можно оптимизировать?
>>3260224 >По каждой библиотеке есть отличная документация Бля меня всегда улыбают люди, которые при каждом чихе уповают на документацию. Типа просто читайте документацию там же всё понятно)))))
Это те же самые люди, которые свои собственные проекты не документируют никак, типа просто читайте код моего проекта там же всё понятно)))))))
Ну типа, сколько ты своих собственных проектов задокументировал? Прям с примерами, подробно расписываешь? Чтоооо яяяя???? Это другие должны, я никому ничего не должен!!!
А пыясните как тяжело давался переход на классы? Как я понимаю классы это как функция только они могут стать частью конструктора другого класса, в этом суть ООП, так? То есть если что-то масштабное без них не обойтись.
Как вообще с классами быть, в фотошопе есть стерка, а есть маски, так вот в самом начале я волевым усилием пересел на маски, ну потому как так правильнее. Может так и с классами сделать?
>>3265615 >Как я понимаю классы это как функция только они могут стать частью конструктора другого класса Хз. Я ООП не знаю. Мне казалось, классы - это шаблоны для функций, то есть буквально "классы функций". А то что в классе можно написать явную функцию, то это просто следствие того что можно написать обобщение. Если есть общее - то можно прийти к какому нибудь частному. ООП это про обобщение функционально го программирования. Вот на чистом С, есть функции. И когда делаешь что-то больше hello world, можно заметить, что некоторые функции схожи некоторым принципом. То есть они работают практически одинаково, за исключением некоторых частных изменений. И само собой разумеется, возникает потребность сделать некоторый "класс" таких функций. То есть объединить все эти функции одной какой-то конструкцией, чтобы все они представляли её частный случай. Например класс "фигуры", который бы содержал способ отрисовки фигур при помощи линий. И из этого класса можно получить функции для отрисовки квадрата или треугольника. А можно получить и другой класс, например "прямоугольники" (не сложно ведь немного изменить класс так чтобы он рисовал только прямоугольники. Класс это как бы "функция функций". Полиморфизм и инкапсуляцмя по-проще. Полиморфизм, это способность делать операцию универсальной относительно типов (зависимой от типов). Например, в С, 2/4 =0, если 2 и 4 - целые. А вот если 2 и 4 - флоаты, то результат будет другой (0.5). А операция одна. Инкапсуляция подразумевает разделение программы на "зоны видимости". То есть одна часть программы, может ничего не знать про реализацию функции max(), но использовать её. Инкапсуляция есть и в не-ООП языках, например слова static и extern в С позволяют сокрыть что-нибудь от зоны видимости файла.
>Как я понимаю классы это как функция только они могут стать частью конструктора другого класса Нет. Полно проектов которые пишутся на С, чисто в функциональной парадигме. OpenGL, Xorg, Links2, Doom 1, ядра операционных систем. ООП - просто один из подходов. Строго говоря, писать в парадигме ООП можно и на ассемблере. Как кто-то говорил: "в начале появилось ООП, а потом программирование". То есть мыслить категориями классов и объектов, можно и на машинном коде перфокарт. Другое дело, что на ассемблере, нет встроенных способов создать функуию, не говоря уже о классах. На ассемблере есть только команды и макропроцессор, даже циклов и условий нет. Приходится и функции и стековые фреймы, и циклы изобретать самостоятельно. Чем больше таких "изобретений", тем больше код становится нечитабельным и непонятным. Вообще-то говоря, код на ассемблере в принципе нечитабельный. Это нужно привыкнуть к асм-байтоёбству, чтобы в последовательности команд, окначивающихся на jz видеть "цикл". Поэтому и существует условно ООП поддержка со стороны языка, чтобы смотреть на код и видеть ровно то, что подразумевает парадигма. Чисто для удобства.
>>3265656 Никак. Я безработный. А что, в чем я не прав? Можно заняться аутизмом, и сказать что функциональное программирование и ооп никак не связаны, но толку то от этого? На практике все равно связаны, точно так же как связано структурное и функциональное программирование. Но это всё какие-то тупорылые доёбы для аутистов. Не думаю что на собеседовании на это будут обращать внимание. Тем более, я помню чела который устроился в IT, указав в ряде языков программирования html. А что никто не доебался что на html программы не написать?!
>>3265677 Да это траль не обращай внимание. Я вот вообще никакие собесы не прохожу, тупо дрочу питон в своё удовольствие. Мне как бы классы не особо нужны, функций хватало, но охота понимать и их.
>>3265717 Так самозанятый это просто раб у охуевшего в край кабана. Самозанятость это просто ширма для серого найма. От собесов и остального корпоративного бытия не избавляет.
>>3265720 Не у одного кабана (это действительно подмена трудовых отношений), а у многих. Не нравится какой-то кабан, шлешь нах его. Завтра на его месте пара других. Мелкие проектики, иногда что-то крупное.
Python. Есть функция трансформации T(n: int) -> int выполняется 60 секунд (долго!). N - список значений n. Требуется вернуть список трансформированных значений N (т.е. T(n)), но только тех, где T(n)>0. Предложи решение, которое удовлетворяет следующим критериям: 1. в одну строчку 2. эффективно с точки зрения времени выполнения 3. не использует map() / filter()
Это задача для HH, плюс мне интересно, так что полного решения не прошу. Однако подскажите кто-нибудь. Я додумался вот до чего: Для экономии времени в голову приходит только сделать из N множество, получить словарь, set_N set_n_item: T(set_n_item) и с помощью итератора представить ответ, обращаясь к этому словарю каждый раз. Только нужно либо а) создать и заполнить словарь set_N и использовать его в одной строке либо б) использовать генератор или что-то в этом роде, чтобы set_N заполнился один раз, а затем я мог получать в итераторе значения результата либо в) Вся эта муть с множеством ни к чему, просто внутри итератора я должен проверять, нет ли уже в итераторе нужного ключа. Итак, подскажите пожалуйста, в какую сторону копать?
b = [max(l) for l in [list(row) for row in list(zip(*[(lambda n, T, N:[T if n_item == n else -1 for n_item in N])(nn,T(nn), N) for nn in set(N)]))[::-1]]][::-1]
>>3266455 b = [max(r) for r in list(zip(*[(lambda n, T, N:[T if n_item == n else -1 for n_item in N ])(nn, T(nn), N) for nn in set(N)])) if max(r) > 0] Обновление
>>3187471 (OP) Какие идешки нынче в моде и топовыми считаются? Раньше вроде какую-то конкретную в шапке советовали Дажо насо юзает, а теперь почему-то ее вырезали
>>3265615 Я раньше тоже долгое время писал не используя классы. Это было из за того, что я был самоучкой, в классах не видел смысла тем более что весь нужный мне функционал я мог реализовать через функции, а в классах эти self cls и прочая лишняя шляпа. Но в один прекрасный момент, по прошествии лет я осознал - вот я знаю дохуя вещей, от туда, отсюда, отовсюду, всё по верхам и как следствие не знаю ничего толком. Я понял что чтобы овладеть делом, нужен академический подход. Взялся за литературу, методично прошел с самых основ и вкатился в классы.
И я пожалел что столько времени тянул. Человек существо которое мыслит абстракциями. Классы очень помогают формализовать через код эту нашу мыслительную особенность, структурировать логику. И я считаю что именно в этом их главная суть и вообще главная цель ООП. На старый код мне теперь больно смотреть, хочется всё переписать с классами. Я иногда пишу как раньше, но только когда нужно быстро сделать какой-то небольшой скриптик или маленькое приложение.
>>3267556 >Человек существо которое мыслит абстракциями. Вообще если наука когда-нибудь ответит на вопрос чому людям нравится музыка, песни и в целом любая информация которая упорядочена в гармонической форме - тогда человечество приблизится к пониманию сути сознания.
Я вижу в этом сходство. Людям например нравятся стихи и музыка - это ни что иное как информация, запакованная в абстрактные и законченные блоки - куплеты, припевы, рефрены. Слова и звуки в этих блоках гармонично считаются друг с другом, продолжают друг друга и при этом несут общий метасмысл. ООП и классы как частность - это то же самое от погромирования.
Такой кайф когда твой код упакован в прекрасные гармоничные блоки и всё работает как часы. Это буквально как песня. Функциональное погромирование тоже хорошо но это как рэпчик, причем русский. Кому-то нравится.
>>3267641 >кто пишет в редакторе кода В каком редакторе кода? Ты имеешь в виду в проприетарном текстовом редакторе, коим является Sublime text? Ну я пищу в Нотепаде++. Всё это дело привычки. Пробовал в IDE - НИУДОБНА. А в нотепаде всё настроено, по одной клавише всё собирается, запускается. Грузится всё молниеносно, никакого лишнего функционала. Синтаксис подсвечивается хорошо, навигация по функциям, по файлам. Всё есть. Плохо чтоль? Хорошо! Наверное главное преимущество IDE в управлении окружением и в дебаге, который замораживает среду в момент исключения и можно посмотреть в памяти все переменные что в них и откуда взялось. Но менеджить окружение лично мне не нужно, дебаг очень классный но всё равно это не пересилило удобство и привычку.
>>3267676 Да я вот и задумался, чтобы перейти, потому что тоже неудобно.
Тогда еще один вопрос. Сегодня над ним продолбался весь день, но так и не смог найти ответ. Я пробовал правда не в нотпад++.
В общем, у тебя есть проблема, что при переходе в метод объекта, тебе открывается весь список метод с похожим именем, которые определены по всему проекту, а не конкретно этот метод, который вызывается от объекта конкретного класса?
И второй вопрос, про автокомплит и документацию по аргументам. Сейчас вроде как показывает, но не для все методов, а только тех модулей, которые непосредственно есть в проекте, а не импортируемые из вне
>>3267629 >чому людям нравытсо музыка Бо яна праўдзіць твае спадзяванні, калі паўторваецца запамятаны матыў. Праз гэта вызваляецца дапамін і робіць табе прыемна. Калі клясы робяць табе прыемна, ты праграміст-наркаман.
>>3267641 Перешел на Zed с VSCode. Понравилась, такой приятный редактор. VSCode почему то надоел, да и телеметрия не нравится, хотя нахрен я кому нужен.
>>3267764 Да я пока пару дней как юзаю. В принципе 10-ку важных шорткатов можно сказать запомнил. Сначала хотел на Vim, но это что то совсем забористое. Искал какой нибудь легковесный бесплатный редактор, поробовал Sublime, Notepad++, Geany. В одном коменте увидел рекомендацию на Zed, пересел на него. Понравился простой приятный дизайн, напомнил Atom, ну и шустрее конечно чем VSCode, Недельку-две поработать и мне кажется освоишь полностью. Хотя многих расширений из коробки как в VSCode не хватает, ну да ладно, не страшно.
>>3267788 Да я задумался, потому что пишу на пайтоне, а сейчас решил ради интереса посмотреть, что там на с++. А под него как оказалось нет адекватной IDE.
У тебя проект большой? Просто у тонны кода, и в IDE все же удобнее перемещаться по проекту, если надо поправить какой-то метод, класс. Но вроде как не критично.
>>3267789 я больше сетевик, у нас на серваках проги и виртуалки крутятся. Там в основном Java, XML и немного Python. Стоит обычный Notepad, на нем правим скрипты. Просто для своего рабочего проекта, мне что то захотелось что-нибудь "стильно, модно, молодежно", решил вот Zed попробовать. Для веба и скриптов пойдет, а вот как с ним в Легаси работать даже не знаю. >что там на с++. А под него как оказалось нет адекватной IDE. Eclipse, Clion, Visual Studio - не нравится?
>>3267851 Eclipse точно нет, не понравился, когда учился на джаве еще. Clion — платный же. Но по сути, тоже будет, что и pycharm. Visual Studio — пробовал несколько раз, но тоже что-то постоянно в нем мешало.
>>3187471 (OP) Год учил джаву, началась тряска что дажва это сложно и вообще там суровые банки. а там суровые проверки и васькам там не место. короче испугался, страх овладел мной и я решил может начать быстро учить пайтон где не суровые банки и может быть будет проще.
Я совсем долбоеб или в этом что-то есть?
В целом у меня тряска сильная, нужно делать выбор, а с этим у меня всегда траблы ибо корзинка.
>>3267961 >Я совсем долбоеб или в этом что-то есть? Да, совсем. Бесят люди, которые наслушаются всякую хуйню, слухи в интернете, что кто-то чёто спизданул, приходят и просят их обнадёжить/подтвердить/развенчать/отговорить. А вот хуй тебе! Блять мало ли в интернете ёбанных шизиков. Я же не обязан переубеждать каждого шизоида, которому чёто мерещится. В следующий раз нахуй пишите, откуда конкретно у вас та или иная инфа. Просто "какая-то бабка нашептала" это не ответ. Если ссылаетесь на какую-то инфу, то приводите источник. Например "по данным infoq" или "по данным ютуб блогера немчинского". А так, мне вот ответили анонимные васяны с двача - иди нахуй. Кто тебе ответил, у того и спрашивай.
>>3267961 Чувак, вернись к Джаве. Это просто инструмент для работы. Не бойся всяких проверок и прочей хуйни. Тебя СБ вначале только проверят (если конечно пойдешь в Банк работать) и на этом все.
>>3268068 >, что программирование везде одинаковое Разве? Я сам не эксперт. Но мне показалось что "программирований" как минимум два: 1)то где известны входные данные и по ним получаются выходные. 2)то где полный набор входных данных неизвестен. Вот компьютерная игра: мы ведь там нажимаем на кнопки, следовательно мы в определённые фрагменты программы подаём новые данные, которые при запуске у неё не было. Что подразумевают под "программирование везде одинаковое" я не понимаю. Разное ведь!
>>3268094 > то где полный набор входных данных неизвестен Ну и какой набор данных в компьютерных играх не известен? > Что подразумевают под "программирование везде одинаковое" я не понимаю. Разное ведь! Веб макаки крудошлёпы наверное имелись в виду.
>>3268094 >Разве? ЕСТЕСТВЕННО! Везде плюс-минус одинаково. Типы-хуипы, классы-хуясы, циклы-хуиклы. От того что возьмёшь питон или джава, от этого классы или циклы исчезнут? Цикл фор он блять и в Африке цикл фор! Конечно, в тонкостях отличия есть.
Везде один и тот же ёбанный принцип: 1) Объявить хуйню - функцию/класс/тип/объект 2) Дать ему функционал - циклы/условия/события 3) Протестировать хуйню 4) Задокументировать хуйню 5) Двигаться к следующей хуйне
Если ты допустим делаешь ёбанный сайт, он же не превратиться в спутник или марсоход?
>>3268081 >Ну и какой набор данных в компьютерных играх не известен? Как это "какой"?! Набор действий игрока неизвестен. Игры, как и любые другие интерактивные программы, ожидают от пользователя ввод дополнительных данных, исходя из которых они выполняют один из своих внутренних функции. Простая игра: на ввод ей подаются данные об уровне, действия игрока, а на выходе она выдаёт "картинку", которая отражает состояние уровня. Нажал кнопку "вверх", программа среагировала, и перевела персонажа вверх. А нажал бы "вниз" результат был бы другой. Получается что своими действиями ты задаёшь данные программе, ведь на уровне ядра есть только системный вызов read, и нет никаких "дополнительных интерактивных вызовов". Так что технических различий между "подачей данных во время выполнения" и "подачей данных в начале игры" никаких нет. Но можно заметить что это принципиально разные виды программ. Ведь во втором случае, мы получаем результат ещё даже не дождавшись окончательного ввода, а после окончательного ввода мы ничего не получим. В первом же случае наоборот, после окончательного ввода мы получим результат, а до него ничего не получим.
>>3268132 >Везде плюс-минус одинаково. Типы-хуипы, классы-хуясы, циклы-хуиклы На ассемблере циклов нет. На С нет классов. А на Make нет.. о боже... последовательности действий. Ведь make - декларативный язык. Вот так незадача.. Что-то не клеится. Если уж сводить все к одному, то можно все свести к ассемблеру и последовательности команд. Вот только в тот момент когда ты напишешь на ассемблере свой "мультиплексер", для параллельных процессов, то тебе уже придётся мыслить в категориях "другого программирования". Почему ты так задрочен на ООП. Программировать ведь можно и вовсе без понятия "последовательность действий", на декларативных языках. Так что ты меня не смог убедить что "программирование везде одно". Звучит просто как чванство технаря, который привык гайки крутить и думает что весь мир одна большая гайка которая крутится
>>3268143 Ну и кому он нахуй нужен, этот ассемблер! Да и вообще, не пизди. В ассемблере и в makefile циклы есть! Общего смысла не меняет. Ну окей, нет классов. Есть функции. От того что ты заменил классы на функции, программирование стало более низкоуровневым, пропали какие-то абстракции, всякие там штучки-дрючки, синтаксический сахарок. Люди стали больше текста писать. Там по сути всё тоже самое и осталось.
>>3268135 > Нажал кнопку "вверх", программа среагировала Потому что это действие известно и ожидается? > А нажал бы "вниз" результат был бы другой Потому что это другое известное действие, которое ожидается?
Пишешь такой бэкенд, пришёл гет запрос, программа среагировала. Пришёл другой гет запрос, результат был бы другой.
>>3268154 >В ассемблере циклы есть! Где? jz это не цикл, это команда. Сама по себе она цикл не создаёт. На ассемблере циклы нужно самому пердолить, возвращаясь в начало каждого цикла, вычитая значение из регистра, и потом выполнять jz. Целых три команды вообще то. Это не цикл. И даже условных конструкций нет: нужно целых два goto чтобы из реализовать.
>>3268155 >другое известное действие, которое ожидается Ну так ты таким образом "подкидываешь" ей данные во время её действия. Игрок буквально висит на вводе и бесконечно вводит новые данные, которые меняют результат пока программа ещё не завершилась. В то время как неинтерактивная программа, просто выдаёт результат. Хотя я так подумал, можно конечно всё то что пользователь вводит просто приплюсовать к началтным данным. Ведь наверное, игра может и сама в себя играть. Но хз, умозрительно рисуются разные концепты.
>>3267868 Ну тогда в Zed поработай там посмотришь, зайдет или нет. Так то тебе по сути нужен блокнот и терминал. Эти все ide и редакторы кода очень схожи. Ну может VSCode - чемпион так как удобен огромным количеством расширений под каждую технологию.
>>3187471 (OP) Привет, ребята. Нужен совет. Я нахожусь в Германии и у меня есть примерно 1 год, что бы найти чем я буду заниматься. (выбрать профессию). Я хочу рассмотреть программирование, т.к почти всю жизнь провел за пк и мне хотелось бы и работу свою связать с пк. Из успехов - за год я выучил B2 немецкого с нуля, думаю это тоже +- неплохой результат. То есть стремление учиться и желание есть, вроде как не совсем тупой.
В Германии я думаю пойти на Асубилдунг (это что-то между технарём и универом) - т.к мне что бы туда попасть нужно что бы работодатель меня выбрал и грубо говоря согласился меня учить, после чего со мной заключают контракт на 3 года когда я работаю рабом за примерно 1000-1200 $ 3 года.(в это время 20 % времени я буду в колледже учить базовые предметы и 80% уже работать на предприятии как и все(джуны)). Конечно, хотелось бы закончить образование посильнее, но для него нужно будет еще 2 года учиться(язык, сдавать Абитур(как у нас ЕГЭ/ЗНО), документы готовить), только что бы поступить и потом еще 4-5 лет учиться. В общем это очень тяжело приезжему без идеальных знаний языка на уровне. Поэтому выбрал пусть через техникум с зп 1200 3 года и потом после завершения учебы сразу 2500(по меркам Германии это конечно смешно, но всё же). Дальше рост вплоть до 4к с этим образованием(через в общей сложности 5 лет после начала учебы) - я думаю в мире айти это не очень большие деньги и хорошие условия, тем более для Германии, но увы.
Я прошел базовый Html/css курс за пару недель, конечно идеально верстать сайт не могу, но базовые вещи понял. Дальше я выбирал что учить - меня интересует в принципе все, что связано с ботами/играми/ но для этого нужны в идеале плюсы или хотя бы с шарп. Это тяжелый язык как для 1ого не имея при этом базы в программировании вообще. Люди, которые в программировании давно посоветовали мне начать с Питона т.к это считается самым простым для изучения и популярным языком.
Так ли это? Какие у вас вообще есть советы для новичка? В принципе, на данный момент я готов каждый день тратить примерно около 4-5 часов на программирование(потому что нужно учить ещё немецкий/английский). Возможно, кто-то из вас тоже вкатился достаточно позно и у него есть какие-то советы. (сейчас мне 27).
Пока решил изучать по книге Эрика Мэтиза на русском языке, что бы вникнуть во всё. Что бы попасть на эту учёбу 3 годичную, т.к я иностранец, то для моего рюзему будет огромным плюсом написание каких-нибудь своих программ.
В общем то вопрос, имеет ли смысл вкатываться на 3 года за 1200 (этого будет хватать только на еду и оплату жилья) и через 5 лет расчитывать на 3-4 $. Или вы посоветуете другие варианты, возможно имеет смысл выучить немецкий до С1, устроитсья на обычную работу которая будет приносить 1500 в месяц и сасомтоельно учить программирование и через 3 года условно уже самому получив какие-то знания, пытаться устроиться на работу? Есть ли в этом смысл? На первый взгляд, 3 летняя учёба пусть за 1200 но зато структурированная + с набором опыта выглядит достаточно неплохо. Но есть проблема, после подписания контракта в случае чего нельзя будет сменить компанию на этот период.
В общем буду рад любым вашим советам и опыту) Всем добра
>>3268609 >3 летняя учёба пусть за 1200 но зато структурированная + с набором опыта В принципе этот вариант вполне приемлем если готов вести аскетичный образ жизни и перетерпеть эти 3 года. Так то время быстро пройдет, может и задачи будут интересные. Если хочешь связать свою жизнь с компами то можно выбрать этот вариант. Главное начни а там по-любому будут "окна" и возможности для дополнительного заработка.
Можно ли технически эксплуатировать уязвимость в зависимости, которая лежит в requirements.txt, но при этом никак не используется в коде приложения? Нас безопасники дрочат только по очевидным проебам в пентесте, но вот задумался, стоит ли почистить старые зависимости, которые уже не используются в проектах.
>>3268609 Перекатился в Германию @ Чтобы сесть на жопу и сычевать за пекарней.
Вышел бы лучше на нормальную работу, пробзделся, немецкую траву потрогал бы.
Я бы на твоем месте реализовывал бы второй вариант. Учить ЯП в свободное от более реальных дел время и дальше. У тебя же учебная нагрузка и так большая будет, тут если только один ЯП учить - большие сомнения что ты был бы проф.пригоден через год, учитывая что ты полный нуфаг, а тебе там кроме ЯП ещё кучу всего надо делать и учить.
Аноны, подскажите пожалуйста. Какие дашборды используете вместо платных Tableu и Power BI. Нашел список бесплатных альтернатив и думаю попробовать Apache Superset. У кого есть опыт работы с таким или другим опенсурсом. Поделитесь опытом. Благодарю.
>>3268609 Единственное что имеет смысл делать в Дерьмании это работать, потому что там зп выше. А так это такая же блинолопатия, так что нах ты там сидишь без работы - я в душе не ебу.
разрабатываю калопровод на drf + react + postgre, пока что просто в докере запускаю на manage.py runserver как и на чём надо деплоить? nginx + gunicorn? и как вообще со статикой будут дела обстоять, надо ебаться или нет?
>>3269817 Да оно так кажется, что выше) Обычный чел на обычной(почти всегда, тяжелой, т.к без перфект немецкого никуда не возьмут) - работе в месяц будет получать 2000-2200 евро. 800 уйдет на квартиру в лучшем варианте, зимой 1000 На продукты - 500, что бы 3 раз в день кушать, без ресторанов и прочего Заправить машину - 200 Оплатить интернет/телефон/какие-то расходники еще 100-120 вот и получается что ты тратишь 800кв 500еда 200машина(до работы), 120 техника = 1620. Вот и получается что получишь ты в месяц в лучшем случае 380 евро на руки, которые сможешь "потратить на себя" - при этом будешь вьебывать за эти деньги целый месяц на ишак-работе. Деньги вроде бы не маленькие, но учитывая что ты в Германии и тут все очень дорогое - то сам понимаешь, на что их хватит(толком ни на что).
Поэтому отсюда и вариант и желание выучить профессию, пусть на которой будут платить 3к через 3 года, но это будет профессия в помещении под вентилятором и не убивая свое здоровье на условной стройке/складе/
Без образования( моё тут не катируется - юр.фак) - всю жизнь тут будешь подай-принеси за 2000-2500(максимум)
Аноны если есть пиксельный кликер, его можно сделать для нескольких окон сразу что бы слал клики ? типо для каждого окна отдельно ? Ну грубо говоря я запущу 3 окошка с играми и для каждой он будет кликать по пикселям, делая эти свои снимки экрана.
Как это будет в коде выглядеть, типо вот скрип выделяет окошко нейм, а для нескольких будет просто в цикле перечисление окошек и для каждого запуск функции с кликами ?
>>3271863 Всё можно. Только клики обычно это высокоуровневые сигналы апи, а у приложений бывает свое поведение, например приложение если не на переднем плане может не принимать клики по своей логике.
>Как это будет в коде выглядеть Ну смари сверху кода будет импорт, потом два пробела, потом код, потом нудисы твоей мамки.
>в цикле Лучше конечно сделать потоки или запускать каждый клик в субпроцессе, тогда они не будут друг друга тормозить. А если ты в одном цикле запустишь, то пока одно окошко будет обрабатываться другие его будут ждать.
Кто знает по бесплатным дедикам, там вообще выход в интернет есть? На pythonanywhere.com залил простой кусок кода: response = requests.post('https://api.myip.com', json={'key':'value'}, timeout=3) print(response.json()['ip']) Ошибка. На компе работает нормально, локально там код тоже запускается, а в инет выход вообще есть?
В этой теме полный ноль, понятно если деньги закинуть то все будет, но хотелось тупо потестить что да как.
>>3272789 Я бы для чего-то простого использовал облачные функции или gitlab CI. Ну или гитхаб. Но если опыта нет, то много времени потратить придётся, скорее всего.
>>3272080 > сделать потоки или запускать каждый клик в субпроцессе Ясно спс, а можно же написать скрипт который будет запускать другой скрипт для каждого из нужных мне окошек ? такое возможно в питоне ?
>>3272783 Дэдзік - гэта dedicated server, разумееш, гэта сапраўдны кампутар, што стаіць у спецыяльным памяшканні, займае месца. Табе ніхто яго не дасць. Забудзся на гэта. Выканаць свой гаўнакод ты можаш на розных пляцоўках, напрыклад на https://replit.com/@ploomum/SadRespectfulMoto працуе.
Поясните тупому. Есть aiogram, есть бот, я хочу чтобы:
Пользователь отсылает сообщение. Этот апдейт обрабатывается одним хендлером, а потом передается дальше и обрабатывается другими.
Типа: @Хендлер(без фильтра) функция ответить_1(): { бот.ответ("я тя услышал")}
@Хендлер(фильтр_текст "привет") функция ответить_2(): { бот.ответ("и тебе привет")}
В итоге если пользователь послал "привет", бот отвечает "я тя услышал" а потом "и тебе привет" Если сообщение, например "а у коня хрен 30 см", бот пропустит приветствие, но все равно ответит "я тя услышал"
Пробовал с разными роутерами, с небом, даже с аллахом, все равно апдейт отрабатывая по хендлеру уничтожается. Кажется, я просто чего-то не понимаю.
Сап двач Я вообще не разбираюсь в этом вашем кодинге, но мне моча ударила в голову, чтобы реализовать такой прикол У меня есть локальная LLM через LM Studio, есть яндекс станция По идее существуют навыки яндекс алисы, с помощью которых запрос можно перенаправить на нейронку Но у меня ваще ниче не получается ЛЛМ запускается в локальном сервере, выяснил, что можно запустить в интернет через ngrok, но тоже чето не получается Вот кусок кода со стороны нейронки, который работает:
import openai from flask import Flask from flask import request import json # Set the base URL and API key for the OpenAI client openai.api_base = "http://localhost:1234/v1" openai.api_key = "not-needed" # Create a chat completion response = openai.ChatCompletion.create( model="Orenguteng/Llama-3.1-8B-Lexi-Uncensored-V2-GGUF", # this field is currently unused messages=[ {"role": "system", "content": ""}, {"role": "user", "content":""} ], temperature=0.7, max_tokens=1024, )
# Print the chatbot's response if 'choices' in response and len(response['choices']) > 0: print(response['choices'][0]['message']['content']) else: print("Нет ответа")
Помогите пж доделать эту херь если что у меня есть Яндекс облако, в котором могут быть сохранены функции для алисы
Если сделать import math, то надо чтобы функцию использовать явно указать названии модуля откуда она, типа math.sqrt() а если сделать from math import * и таким образом все функции импортировать, то уже не нужно Наверное в этом есть какой-то смысл, просто я не понимаю
Столько разных методов для строк, чисел. Понимаю, что просто тупо зубрить их сейчас это идиотизм, но если пробежаться глазами по всем, то потом, когда они понадобятся, то уже не вспомнишь, что был такой-то метод, который сейчас в твоей ситуации будет полезен и будешь костылями решать проблемы.
Я вот не зная о .replace() два цикла нагородил, чтобы пробелы из строки убрать
>>3274814 Нихуя. Вешаем на два роутера: первый без фильтра, второй с фильтром.
Если сообщение не подходит под фильтр - то оно принимается первым. Если подходит - вторым. Только вторым. А мне надо чтобы оно прошло через первый тоже.
Так что ты сам долбаеб и тебе даже вопрос мой не понятен.
Чят, а вы что спрашиваете на собесах мидла/синьки? У нас работа с даткой, поэтому веб и асинхронщина не интересует, гоняю по чистому по питону, и кажется что у меня скучные поверхностные вопросы. Сначала вопросы про принципы ооп; вопросы про всякие конструкции, декораторы, итераторы, контекст менеджеры, зачем это нужно, как сделать свой, какие дандер методы и проч; какой нибудь вопрос-наебка с мутабельным дефолтным аргументом; поверхностная скука про GC и GIL; и так в полчаса укладываюсь без лайвкодинга. Если мидлов по этому еще интересно гонять, то синьки скучают, говорят что "ой тут теория а хрычка не предупреждала ну я не помню я не знаю". Грустно их после этого сливать и думать, что это их проблема что они даже на поверхностные вопросы не могут ответить или это моя проблема, что я никак иначе не могу оценить знания и спрашиваю скуку. Так вот, чего бы спрашивать ИНТЕРЕСНОГО? Метапрограмминг не предлагать.
def test(string): temp = [] result = "" for i in range(len(string)): if string != " ": temp.append(string) for i in range(len(temp)): result += temp return result
?
На самом деле я хз, всё можно сделать Своими руками
Но я слышал что использование методов по типу replace() немного ускоряет/оптимизирует код. Однако, в работе этих методов всё-равно нужно разбираться
Пытаюсь разобраться с сериализацией в yaml. Когда дампаю в ямл, возникают какие-то ебучие записи, начинающиеся с двух восклицательных знаков, которые при десереализации выдают ошибку. Откуда эта хуйна берётся? Как сделать, чтобы её не было?
Аноны, а посоветуйте литературу по дизассемблу этого вашего Пайтона, а то я чёт не особо вникаю в это ваше высокоуровневое программирование!! Например: Пик-1, я хочу понять, что делает компьютер, когда работает этот генератор. И что вообще такое этот ваш генератор?? Хочу посмотреть, куда прыгает компьютер, когда этот ваше генератор работает, хочу посмотреть где хранится старое значение месаги, в каком регистре сохраняется адрес на новую область памяти, когда шифр Цезаря "начинает свою работу", и что происходит со старым значением месаги???? Пик-2, в общем, цель такая, чтобы понимать эти ваши высокоуровневые "фишки", и читать эти ваши высокоуровневые "тексты" так же, как пик-2, в котором всё чётко и ясно разложено по полочкам. Поэтому прошу совета насчёт лит-ры по дизассемблу Пайтона, либо что нужно делать, чтобы дойти до понимания этих ваших высокоуровневых "текстов".
Читаю про dsa немного и понять не могу это всё просто абстракция над обычными листами, массивами и тд?
Я так понял в питоне только и есть что листы, туплы (и вся стандартная залупа дальше по списку), массивы через модуль стандартный, и dequeq. А все эти стаки, очереди, linked листы, я всё это сам должен делать и это не отдельный тип хранения данных, а просто логика как я работаю с ними? Типа хочешь себе стак, то просто делай dequeq и добавляй в него данные в конец, а бери в начале, вот тебе и стак? А если будешь брать в начале, то хоба, у тебя теперь очередь (надеюсь правильно пишу русские названия)?
Ещё в статье какой-то писали так, что linked листы чуть ли не базовый тип, прям база база, это знать надо, а в другой по питону пишут, что они не нужны в питоне, можно только по приколу разве что самому(!) их сделать, если тебе интересно ковыряться с этим
Ну и как этот ваш Пайтон хранит строки?? Кто-нибудь может мне это объяснить? Это не набор последовательных ячеек памяти, это какая-то "разнобойная" мешанина из ячеек памяти!! Причём удивительно то, что букву 'l' он хранит всего в одной ячейке (пик 3-4). Как я понимаю, что каждый элемент строки он сохраняет куда попало, а затем берёт указатели на эти все "куда попало" и, мб, схороняет их в массив, оттого, мы можем обращаться по индексам к элементам строки.
>>3277318 Пик-1 - так яснее. Пик-2-3 - та же хрень, если строки разбить на элементы и сделать из них список. Причём, если делать таким образом список, состоящий из цифр, то этот список он хранит последовательно, только одна ячейка для одного элемента списка занимает 48 байт, Карл (пик-4)!!! Что он туда сохраняет? Тайны Массонской ложи? Гей-порно в 48р???
>>3277324 А теперь, аноны, ещё более удивительные вещи: 1) Если выводить алфавит, то тут можно утверждать, что символы идут последовательно, с разницей в 48 байт (пик-1). 2) Теперь, если собирать рандомную строку и нашего алфавита (строки a), а затем сравнить адреса элементов рандомной строки и исходной, то окажется, что каждый элемент этих разных строк имеет каждый один и тот же адрес (пик-2-3). 3) Если поступить так: из алфавита, состоящего из букв нижнего регистра, вычесть алфавит в верхнем регистре, то разница между адресами каждого элемента будет 1536. Зная, из предыдущих двух пунктов, что символ занимает 48 байт, то поделив 1536 / 48, мы получим 32!!! 32 символа это разница в таблице ASCII между 'a' и 'A', что и показывает последняя строчка (пик-4) - это разница между 'a' и 'Z' в таблице ASCII, точнее 7 это все символы между 'a' и 'Z' плюс сама 'Z'.
>>3277399 Вот об этом (пик-1) 3-й пункт моего предыдущего поста. Теперь мне думается, что строка в Python это не последовательно расположенные ячейки памяти, а тупо массив указателей на вшитую в Python таблицу символов. Зачем и почему хз!! Зачем пиздят в учебниках и в тырнетах о том, что строка это последовательно расположенные ячейки памяти - хз!!! ЕБУЧИЙ ЗАГОВОР!!!!!! Если строка в Python это массив указателей на вшитую в него таблицу символов, то как тогда выглядят слайсы? Получается, что слайсы выглядят типа пик-2?
>>3277399 Так вроде питухон строковой объект каким-то особым образом хранит чтобы он в памяти лишнее место не занимал. Типа если ты создашь массив каждое значение в котором будет строка "huy" у тебя памяти не хватит, а так они все будут ссылаться на одну и ту же строку. Но это не точно, мне эта тема вообще не интересна была я краем уха что-то такое читал когда пытался невпихуемые питонические типы данных как-то запихнуть в память. В итоге просто взял бд
>>3277567 >Так вроде питухон строковой объект каким-то особым образом хранит чтобы он в памяти лишнее место не занимал.
Ну вот, если в первом варианте сбора рандомной строки можно было ссылаться на непонимание работы ссылок, то даже в этом вариант (пик-1-2), когда рандомная строка никакого отношения не имеет к исходной строк, подобные элементы (т.е., например, буква 'a' в исходной строке и буква 'a' в рандомной строке) разных строк "занимают" одну и ту же ячейку памяти. Поэтому действительно, строки это просто массивы указателей на таблицу символов. Конечно, наверняка, это как-то по-другому называется, но я хз куда копать - везде пишут, что это последовательные ячейки памяти. Так-то, конечно, массив это последовательные ячейки памяти, но это не просто массив символов, как это пытаются представить в книгах и тырнетах, а именно массив указателей на ячейки определённой таблицы символов.
>>3277687 Забавные штуки позволяет делать этот ваш Пайтон. Короче, логически строки это действительно массивы указателей на объекты (в данном случае символы), но со своими приколами. Указывают разные элементы строки на один и тот же участок памяти, потому что это фишка Пайтона (называется интернирование), которая позволяет экономить место, типа чтобы не плодить одни и те же объекты (одни и те же буквы, например) в памяти, Пайтон одним и тем же элементам присваивает один и тот же адрес, который указывает на один символ.
>>3276536 Ты для начала изучи основые, матчасть вообще и базу по языками и всему прочему, что и для чего. А потом такие глупые вопросы сами собой отпадут. Дизасемблерщик хуев.
>>3277927 Ты чего так сильно возбудился то, педик?? Услышал где-то, что дизассемблят только компилируемые языки, а интерпретируемые нет? Педик, посмотри на пик! Видишь, справа на картинке, педик? Это называется байткод Пайтона. Но, если считать дизассемблом изучение этого байткода, то это просто шутка какая-то, потому что сам этот байткод написан на другом языке (скорее всего на Си). Чтобы понять внутреннее устройство Питона нужно читать именно тот код, который есть суть байткода Пайтона, педик, шурупишь??? Вся эта магия "лёгкости" Пайтона, на самом деле, неимоверный труд линкеров и лоадеров, чью работу и можно изучить и понять, если задисассемблить не в "потешный" байткод, а в настоящий ассемблированный код. Ну либо читнуть исходники этого байткода. Вот я и спрашиваю, педик, где можно читнуть эту литературу, в треде, где люди должны были заинтересоваться внутренним устройством языка, на котором кодит весь этот тред. Педик!
>>3277992 > где люди должны были заинтересоваться внутренним устройством языка, на котором кодит весь этот тред Те кто интересуются кодом интерпретатора в ужасе от гвидокостылей сваливают на другие языки. Питон не тот язык в потроха которого лезут.
Питон - это язык для того, чтобы напохуй что-то написать быренько, всем похуй как это работает, все поебать что там внутри происходит, интересуютя этим только разработчики интерпретаторов этого говна, которые все пытаются там ускорить это неускоряемое говно с GIL'ом. Никто в серьез не пишет на питоне что-то большее, чем прототипы и небольшие приложения. Ты пытаешься косить под умного, будучи совсем глупым, еще и с надменным стилем написания "в этом вашем". Думаешь ты пришел в этот тред и все такие удивились что ты смог на си написать какую-то залупу из 10 строк? Уебок, тут сидят дяди которые на си десятки лет писали и видели миллионы строк кода на ассемблере. А на питоне пишут, потому что это быстро и удобно для определенных целей. Лично мне вообще похуй как там че питон делает внутри, абсолютно, я даже не задумывался об этом никогда, как и пологается при использовании языков такого высокого уровня. Если я захочу побыть байтослесарем, я пойду на С++ напишу что мне нужно, вот там да надо знать все как внутри работает, потому что у языка абсолютно другая целесообразность применения. А тут нет. Короче иди нахуй дауненок.
>>3278025 >Никто всерьез не пишет на питоне что-то большее, чем прототипы и небольшие приложения. >даже не задумывался об этом никогда, как и пологается при использовании языков такого высокого уровня.
Ты сам себе противоречишь, педик!!! Как ты собираешься писать прототипы, чтобы потом реализовывать их, допустим, на Си, не понимая, как эти прототипы устроены внутри?
>>3278133 Педик, какие-нибудь вразумительные аргументы будут? Давай так, чтобы мне понять, можно ли с тобой вести продуктивную беседу, ответь, пожалуйста, на вопрос: Какая величина больше - километраж увиденных и опробованных твоею мамкой больших, чёрных хуёв; или, как здесь, >>3278025 >видели миллионы строк кода на ассемблере увиденных дядьками строк на ассемблере?
>>3278168 Какие тебе аргументы, ты несешь дичайший бред сумашедшего. Нахуя мне с тобой вообще дальше разговаривать, иди со своим лечащим врачом разговаривай лучше, анскил.
>>3278278 Это "писать типы" на деле просто "писать типы" больше никакого от них толку нет, кроме лишней писанины, интерпретатор тебе ошибку не выдаст и не ругнется даже никак. Я заебался сейчас после рефакторинга небольшого отлавливать баги и не состыковки кода. Мое приложение упало раз 15 прежде чем я пофиксил все недочеты. И большая часть из них была, типа перенес функция в класс - забыл дописать self функция падает, тоже самое и с переменными класса. Немного поправил функцию которая должна возвращать строку с путем, она в некоторых случая стала позвращать Path из-за чего падало все непредсказуемо, бля ну это пиздос, такихх ошибок может быть тысячи, которые в статически типизированном языке тупо невозможны в рантайме и все вылезут на этапе компиляции, либо на этапе подсфетки кода в редакторе, но в питоне ты их заебешься отлавливать в рантайме. Я уже 10 раз пожалел что начал на питоне свою хуйню писать. Хотя там либа только для питона нужная мне. Но уж лучше запускать питон субпроцессом для доступа к данным сервиса через эту либу из статически типизированного языка, чем отлавливать кучу рантайм багов. Ну его нахуй короче. Питон это язык для программ не больше 400-600 строк.
Это как надо говнякать спагетти и кататься ебалом по клавиатуре, что у тебя блоки кода начинают срать во все стороны произвольными данными. Никогда не понимал этих нытиков, которые что-то сложнее хело ворлд не могут написать без святой типизации, которая им сопельки вытрет. В питоне есть аннотация типов, что тебе ещё нужно, чорт. А если ты забываешь self дописать, ну что поделать - обосрался с синтаксисом, скил ишуе.
>>3187471 (OP) В pandas команда df['date'].astype('datetime64') юзает же формат YYYY-MM-DD по умолчанию? Формат явно прописать можно? Я знаю как это делать через pd.to_datetime, мне интересно именно по методу astype.
>>3278509 Да нет, просто язык говно by design. Такое же говно было и с джабаскриптом, который по итогу превратился в строго типизированный тайпскрипт потому что все поняли что анрил что-то сложное писать на говне без типов. Вообще питон изначально довольно говенный язык, просто баблишко и влияние корпораций решают, а так же простота использования и вката. Любая обезьяна которая еще вчера бегала с камнем в руке сейчас может выучить питон и гордо называть себя "РАЗРАБОЧИКОМ" очка тут в питоне это и плюс и минус, простота использования оборачивается другой стороной медали в виде сложности написания реальных приложений сложнее пары сотен строк. Если один человек может допустить кучу багов отловимых только в рантайме, то сколько сможет допустить комманда разработчиков? И вопрос тут не скила, а вопрос безопасности языка. Для меня питон такой же небезопасный как и си, си даже может будет побезопасней, все таки типизация какая никакая там есть, нету эксепшенов и есть goto, который в случае ошибки может перекинуть нас на блок освобождающий ресурсы, главное соблюдать все правила, но с питоном хоть тут и невозмоно мемори лики, очень легко выстрелить себе в ногу и пока ты не прогонишь все бранчи своего приложения в рантайме ты никогда не поймешь есть ли там баг или нет. Единственное отличие в том, что на питоне куча высокоуровневых либ котоыре в пару десятков строк могут тебе сделать то, что ты хочешь, где на си или даже С++ тебе бы пришлось писать кучу бойлерплейта и сотни или тысячи строк. Поэтому питон должен оставаться в своей естественной среде в виде скриптового языка для консольных утилит, которые можно написать на коленке.
>>3278644 Всё о чем ты разнылся это всего-лишь помощь в дебаге и отладке, которую дает типизация. В питоне если ты не можешь что-то больше 100 строк написать не обосравшись с типами у тебя есть аннотация типов, которая используется IDE, который тебе каждое использование переменной проверит и если она используется не соответсвенно заявленному типу - подсветит ошибку.
>>3279577 Я тоже его начинал как не-программист, да и сейчас уровень у меня околонулевый. По началу реально просто. Условные конструкции, циклы и функции идут как маслице - все очень дружелюбно, просто и понятно.
Подозревать неладное начинаешь на переходе от функций к классам и иттераторам.
Начинается все с вопросов уровня "какого хуя в одном месте функция библиотек принимает аргумент в скобках, а в других идет как параметр через точку" и "какого хуя функция ничего не возвращает, при этом переменные класса список меняются, а перменные класса инт - нет". И начинаются вопросы, что там вообще происходит с хранением данных, наследованием и областью видимости имен.
Плюс довольно хуевый дефолтный упаковщик pyInstall, который 20 строк кода пакует в екзешник, который может весить и 5 мегабайт и все 80. Как будто он всю ветку зависимых библиотек полностью засовывает, лол. Еще и работает через раз. Правда там и другие упаковщики есть, я пока еще не все варианты опробовал.
Все такие моменты я просто принимаю как данность и просто стараюсь запомнить. Ща набегут, обзовут меня быдлом, дебилом, дегенратом, котоырй не хочет учить матчасть, но я в рот ебал, и мне это нахуй не надо, так что сами идите нахуй.
Вообще я питон даже не как язык программирования воспринимаю, а как компьютерный мультитул, в том числе и для домащенго пользования. Переводить pdf-ки в docx, компрессия фоток, API, какая-нибудь несложная считалка которая автоматом дописывает текст для типовых отчетов, или наоборот программа, которая ищет в сотне текстов какое-нибудь слово, и выводит по 2 предложения до и после, что-нибудь такое. Недаром в репозиториях лежит 130к библиотек для него.
До этого немного писюкал на паскале в школе с очень смутным пониманием, в университете С++ блядский, который я вообще не вкуривал и делал как-то по аналогии информацию тогда просто не умел искать нормально и все. Питон первый язык от которого не тянет блевать. Только regex гумозный, надо будет его как-нибудь задрочить, набить руку просто.
Обновлял кто пайчарм до 2024.2.2 версии на 12 винде? Не видит установленные пакеты. Кеш валидировал, в %APPDATA% и %LOCALDATA% всё удалял, полностью сносил и заново ставил - не помогло.
>>3280518 Хуясе, я думал это только у меня траблы с пайчармом, потому что на 7 винде сижу. Спасибо Билу гейтсу за вскоде, который без лишних вопросов цепляет pip из терминала.
Я тебе по секрету скажу во всех языках базовые конструкции одинаковые циклы, ветвления, переменные, арифметика, функции, структуры Слегка отличаются синтаксисом и сахарком. Даже классы, это, по сути, обычная структура данных плюс несколько функций для работы с ней, плюс всякий сахарок.
И все программирование состоит из этих базовых конструкций, никакой магии нет. В любом языке, сделать то, что у тебя на пикче элементарно. А вот сделать из этого сложные системы -- это уже задача.
>>3279577 Это ты еще про генераторы не читал сокрощальщик def matrixA_by_matrixB(A: list[list[float]], B: list[list[float]]): return [[sum([row_element*column_element for row_element, column_element in zip(row, column)]) for column in [[row[j] for row in B] for j in range(len(B[0]))]] for row in A] if len(B) == len(A[0]) else None
Помогите, я даун. Надо вспомнить питон, решил почитать стандартную либу, поделать каких-то простых задач и решил написать функцию, чтобы соединить n многострочных текстов в один ряд, с вертикальным центрованием по самому высокому. Блять, у меня реально опухоль в мозгу или сифилис мозга, я не знаю. Как это сделать как нормальный белый человек? Почему я могу придумать только какое-то дерьмо на 100 строк. Это же точно решается аккуратно и нормально строк за 10. Придумал два варианта, оба ублюдское говно.