Предыдущий: >>3136432 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://online-python.com/ - листинги и онлайн-запуск
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://goonlinetools.com/snapshot/share/ - для листингов, без регистрации, но с капчей
#######################################
Вопросы-ответы:
— С чего начать изучать питон?
У питона намного лучше официальная документация, чем у большинства других языков. Есть там и учебное пособие для начинающих: https://docs.python.org/3/tutorial/introduction.html , неофициальный перевод на русский язык: https://digitology.tech/docs/python_3/tutorial/introduction.html (для питона версии 3.8, но разницы почти нет)
https://github.com/yakimka/python_interview_questions - интересная подборка, масса разнообразных тем и вопросов, для продолжающих, всё на русском
— Какие книги считаются лучшими?
На слуху чаще всего Лутц, но там очень много воды. Ещё на слуху Марк Саммерфильд, Эл Свейгарт "Автоматизация рутинных задач с помощью python". Эти книги рекомендуют чаще всего, но книги довольно старые, а питон развивается.
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— А как учить джангу? Нахожу книги по джанге 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
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущая шапка: https://goonlinetools.com/snapshot/code/#154ln61u1e2e5b4kfv6w8r
Катись нахуй, драник
Ни в пизду, ни в Красную Армию питон ваш.
Одним словом - учебный язык людей, не осиливших С.
>в Си нет ни ООП
Да вы затрахали, есть конечно, просто не делается искаропки. Схлопывание хвостовой рекурсии тоже вроде реализовали первыми в си
360x640, 0:59
Python - язык для школьников и data science.
Работы в разработке на питоне нет.
Питон - плохой язык, который учит плохому.
Понял
аноны, используют ли хадуп и прочие библиотеки для больших данных в питоне?
имею в виду, не в теории возможность их использовать вместе, а на практике в компаниях?
или хадуп это чисто под жаву
Почему код в окне вывода дублируется?
>Работы в разработке на питоне нет.
Работаю джуном.
>Питон - плохой язык, который учит плохому
Например? Что тебе в нем не нравится?
Ну может внем хуево реализовано ооп и нет строгой типизации это да. Но в целом удобноый язык без ебучих {} после каждого чиха. На мой взгляд отделять блок функции или класса табом гораздо лучше чем плодить {эти { ваши {скобки}}}
+ дохуя библиотек и готовыми решениями.
>отделять блок функции или класса табом
Невидимым символом, ага.
Петухон давно пора сжечь и обоссать.
Бля поставь видимыми
И будет тебе
def foo():
\treturn 'хз что тебе не нравится'
Так то отделять отступами это как раз по человечески. Ты ж не отделяешь абзацы в тексте скобачками. Это фича блин, язык становиться более читаемым. Меня больше возмущала отсутствие строгой типизации по началу.
Даже Гвидо сказал, что это было ошибкой. Нельзя делать популярным язык с экспериментальным синтаксисом.
>Нельзя делать популярным язык с экспериментальным синтаксисом
Си когда-то ровно таким и был. Если бы все придерживался твоих охуительных принципов, мы бы до сих пор писали на каком-нибудь монстре типа фортрана.
>какую форму заполнить
https://ccbv.co.uk/projects/Django/5.0/django.views.generic.edit/FormView/
>Это фича блин, язык становиться более читаемым
Ага, то-то от нее куча народу бомбит
Менее читаемым он становится
Ну таким образом ООП и в ассемблере есть и вообще везде, просто не из коробки
Речь то и идёт про из коробки
А ты кто по масти?
>Ага, то-то от нее куча народу бомбит
Утята, не способные выбраться за пределы си-подобного синтаксиса с нее бомбят
>И при этом C-like выдержал проверку временем, его базовые идеи прижились.
Да и Питон, как видишь, чувствует себя отлично. Haters gonna hate.
Тогда все языки были экспериментальные. Сейчас почти все языки общего назначения используют сиподобный синтаксис, даже, прости г-споди, php, и это удобно, гораздо легче читать программы, даже если языка не знаешь. И тут вдруг питон вылез со своими отступами.
Объективно это дело привычки.
Но если принимать во внимание другие области человеческих ремесел, где есть запись информации по определенным правилам: письменность, математика, ноты. Везде блоки информации разделяют отступы, а не скобочки. Таким образом можно сказать, что для человека запись без скобочек лучше, а если тебе бомбит - значит синдром утенка.
Хотя ноты наверное не корректно сравнивать, ноты это по сути график, но во всех других случаях скобочек нет и разметка идет в виде отступов. Документы, поэзия - веками отступы использовались без дополнительной разметки - всё это наглядно демонстрирует что скобочки человеку для разметки и читаемости не нужны, лишние символы.
>>192747
У тебя инвалидные аргументы. В математике никаких отступов нет, там как раз сплошные скобочки.
В музыке тоже нет отступов, а специальные обозначения для блоков как раз есть. См., например, реприза.
Текстовый документ - это неструктурированные данные, плюс там ещё есть и другие способы выделения: разные шрифты, жирный, полужирный, италик, подчёркивание, заглавные буквы. Давай всё это ещё в программирование притащим.
https://www.youtube.com/watch?v=BgxklT94W0I
В математике формулы, уравнения и их решения мы компонуем в последовательные блоки по точно таким же правилам как и обычный текст. Для того чтобы разделять мат.записи, формулы и прочее между собой мы скобочки не используем, мы просто следующую формулу или решение с новой строки пишем и всё.
То, что в математике в скобках пишется и в прочей разметке в точно такой же степени и в Питоне в скобочках пишется, речь не об этом не о разметке математических действий например, а о разметке именно синтаксической. В математике нет ни каких специальных скобочек для синтаксического разделения.
>Текстовый документ - это неструктурированные данные
Текст в точно такой же степени структурирован как и код языка программирования. Точно такие же буквы складываются в обозначения неких абстракций, абстракции идут друг за другом и формируют логику. Если ты этого не понимаешь, то так себе ты погромист.
Но вот не знаю как правильного его отправить, навскидку глянул советуют не как дату, а вот как-то так отправлять 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
> нет строгой типизации
обычно принято говорить сильная-слабая типизация
В питоне сильная типизация. Для сравнения, в JS слабая типизация.
Ещё есть статическая-динамическая типизация. В питоне динамическая. Надеюсь ты не тот статикошиз, что тут по тредам бегает.
Мне как разрабу в динамической типизации не нравится то, что она и для примитивных типов вроде целых чисел, из-за чего большая просадка в производительности идёт. На любую примитивную арифметическую операцию большой оверхед идёт.
Ещё принципиальный минус, что нет декларации типов. Легко сделать ошибку из-за этого, читаемость страдает. Вот в JS есть декларации.
Ещё минус в области видимости. В питоне минимальная область видимости это функция, так внутри питон устроен. Сейчас все пришли к тому, что удобнее, когда может быть область видимости блок, внутри цикла, if-else и т.п. В том же JS так уже давно. Но в питоне это жёстко встроено, хрен уже переделаешь
бесскобочность спорное решение, и плюсы есть, и минусы. Пожалуй я бы предпочёл, чтобы они были. Если ставить скобки в стиле Java, они уже не перегружают код.
Когда пишешь обычный код, отступы вместо скобочек норм, привыкаешь. Но вот этот подход ломает возможность в коллбэках функции-классы определять. На самом деле ограничивает. И косяки иногда бывают из-за отступов, стандартная история, это когда вложенные if, а потом else, который может легко слететь при рефакторинге
В общем сомнительная фича языка
>Сейчас почти все языки общего назначения используют сиподобный синтаксис,
У го другой синтаксис
А php старый язык, его создавали тогда, когда в мэинстриме были си-подобные языки, в то время это C/C++/Java, причём делали не из расчёта на то, что серьёзно что-то будет, не продумывали. Его писали на Си, поэтому идеи тоже взяли от си, как проще
>В питоне сильная типизация.
Обьясните простыми словами в чем смысл такой классификации, что она на самом деле отражает и для чего нужна. В википедии написано что эти понятия придумали независимо друг от друга два дида-основателя и их трактовки что называть сильной типизацией разнятся, так что когда кто-то говорит "слабая\сильная типизация" надо во-первых уточнить что он имеет в виду, чью трактовку, а потом спросить зачем он это вообще сказал.
>простыми словами
В жыесе ты можешь сложить число с строкой, интерпретатор автоматически сделает приведение типов. В питоне получишь TypeError.
Но в питоне я могу сложить целое число с флоат, разные типы, не такая уж и "сильная" получается типизация.
>Но в питоне я могу сложить целое число с флоат, разные типы, не такая уж и "сильная" получается типизация
А есть языки в которых нельзя? По-моему в традиционных языках во всех можно. Более спорный момент, что должно быть результатом выражения
3/2
а именно 1 или 1.5
но числа это своя специфика вообще, всегда
А вот прозрачное переделывание строки в число и наоборот это уже явный признал слабого типа.
>А есть языки в которых нельзя?
Ada. И если ты думаешь что это какой-то забытый язык, то нихера, критические системы для космоса, авиации и прочего транспорта пишутся буквально на 4х языках: си, кресты, ада и ассемблер. Ада только в США правда.
>си, кресты, ассемблер
Это всё ассемблер и его синтаксический сахар.
>ада
Ну судя по всему какое-то невероятное говно без задач, которое сделали только по заказу министерства обороны сша, когда какому-то сапогу пришло в голову что у армии должен быть свой супер мега язык. ПОТОМУЧТО.
>Ada
Ну давай всё-таки современный мало-мальски массовый язык. Современный, это который после 1985-90 года взлетел, а не говно мамонта из 60х
>Более спорный момент, что должно быть результатом выражения 3/2
Ничего он не спорный. Мы же к определенному типу данных применяем определенный алгоритм. Если этот алгоритм называется деление без остатка, то мы и получим тип данных который ждем. А вопрос "типизации" насколько я понял сформулирован таким образом "как себя ведет язык если всунуть другой тип данных туда где ожидается не он". Но это всё равно хуйня какая-то и глупость, если из этого правила есть куча исключений. Впрочем похуй.
>Ada
> First appearedFebruary 1980
а он, оказывается, не такой уж и старый, я думал, что его ещё до C разработали, в эпоху кобола
Начал тут питонировать, и встал вопрос. На каком основании классы "не видят" друг друга, если они объявлены внутри другого класса? Почему так?!
При этом, если эти классы не являются "подклассами" другого класса (т.е. объявлены не внутри класса, а просто в файле - хз как правильно сказать), то все нормально - они могут "видеть" друг друга. Что я делаю не так?!
Прошу строго не судить - питонирую не так давно.
По той же причине по которой ты из внутреннего класса не сможешь достучаться до обычного атрибута, объявленного в классе Video.
Классы тут не при чём.
Сейчас же полнейший затуп. Решаю задачу по циклу "for". По условиям задачи дается список из чисел, нужно его перебрать и разделить на простые и составные числа, и записать их в новые списки primes и not_primes, соотвественно. Написал рабочий код, который, приводит совершенно не к тому результату который требуется (все на скрине). Вобщем уповаю на вашу помощь! Сам уже три час над этим колдую и ничего не выходит(((
if i % j == 0: break; else: is_prime = False
поменять на
if i % j == 0: is_prime = False
Если хочешь делать break из цикла, чтобы не выполнять лишние итерации, то перед break'ом надо сначала занести число в список 'not_primes'
>>195793
Да блин, это пипец. Хочу сложить все в один класс, чтобы было красиво, но не получается. Как поступить? Отказаться от "вложенных" классов и все классы делать "внешними"? Я не понимаю...
Ага, так и думал, что где-то в этом месте проблема.Спасибо! Стало лучше, списки выводятся, однако в списке простых чисел какая-то ересь все равно. Все числа, кроме 3 и 15 продублированы по нескольку раз, а число 2 так вообще не вывелось.
У тебя сейчас алгоритм следующий:
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...'
Вот так можно через Video.Data, но не знаю сработает ли для тайпхинтов.
Фигню делаешь, скорее всего. Так на Питоне обычно не пишут.
Создай отдельные вынесенные классы и инжекти их в init.
От души, чел! Вот про проверку is_prime вне цикла 'for j...' 'это ты в точку попал. Я этот момент в глаза продолбил!
Все, теперь все запахало как нужно!
> Вот так можно через Video.Data
Интерпретатор все равно ругается на тайп-хинты для аргументов и возвращаемого типа. Внутри тела метода уже можно использовать Video.Data, но это хуйня какая-то - если поменять имя класса Video на другое, то придется и в тело метода вносить правки.
Короче, действительно надо эти классы вынести и не ебать мозга.
зачем вообще писать на питоне с типами? все преимущество языка в том что в нем нет типов
Хз, я как питонист видимо еще не дорос до уровня, на котором используют такое преимущество, как отсутствие типов. А тайп-хинты я для себя прописываю, чтобы понимать что происходит.
Зачем пихать неизвестно что во все дырки?
Вот у меня есть какой-нибудь класс и метод который что-то делает с каким-нибудь типом данных.
Если в этот класс прилетит рандомная хуйня, которую там никто не ждет и так исключение высрется, это же ошибка.
А если у нас тут полиморфизм, то чекаем тип или есть прекрасные именные атрибуты, например.
Почему все так ноют про эти типы? Я думаю это всё из за того что в питухон приходят из других языков со своим уставом и вот так привыкли делать, а надо по-другому, надо ПИТОНИЧЕСКИ.
>зачем вообще писать на питоне с типами?
Чтобы было удобно читать и понимать код. Чтобы в IDE ты мог навести на тип и посмотреть, как он определяется, это про сложные типы, конечно. Чтобы ты в принципе понимал, что нужно пихать в функцию, какой тип
Декларации крайне полезны
Это промежуточный вариант между статической типизацией с массой своих минусов и динамической
>когда написано str, а тебе прилетает int
Меня вообще удивляет, как вы так код пишете, что у вас контракты нарушаются внутри кода, ладно если внешние апи какие-то долбите.
Действительно. Это как надо по клаве лицом кататься чтобы такое напитонировать.
Если я правильно понял, super() это сокращение от super(__class__, self).
Вызываем конструктор класса Х().
Интерпретатор ищет метод __init__ сначала в Х (согласно MRO). Не находит, идет в класс А.
В классе А срабатывает __init__, который в свою очередь вызывает super(A, self). self в данном случае это объект класса Х, поэтому поиск идет в MRO объекта от класса Х, но после класса А, т.е В?
https://www.online-python.com/d6fB4AJEiS
Я не знаю, я пишу на языке с типами, это скорее тебя нужно спросить, зачем ты выбрал питон
Это никакой не промежуточный вариант, это и есть попытка сделать типизацию в языке, который для этого не предназначен. Может лучше тогда взять язык с типами?
Вопрос общий и нубский, говорю сразу. Не вкатун, делаю по фану, но перфекционизм ебет
Есть задача - читать некий текстовый файл (10+ мб) с периодичностью 0.5-1сек и собирать по 3 похожие строки с ключевыми словами в объекты для последующего использования.
Как делаю сейчас: читаю последние 50кб файла, фильтрую их в цикле по ключевому слову, проверяю все ли собрано для объекта, создаю объект класса и распихиваю данные из строк по его переменным
Как думаю надо делать: так же прочитать файл, запихнуть вообще все строки в массив, пройтись по этому массиву и уже тогда отфильтровать строки и создать из них объекты
С одной стороны, 2 цикла получается, делающие почти одно и то же. С другой стороны, не должно быть проблем с тем, что какие то данные для объекта проебаны по той или иной причине
Как вообще это делать правильно то в итоге? Для текущей задачи допустим похуй, но если надо весь файл потом чекнуть, создавать из него массив выглядит тупо
>фильтрую их в цикле по ключевому слову
Ах да, забыл уточнить, что каждый объект должен состоять из данных из 3х строк, которые идут всегда в одном порядке, но между ними дохуя левых строк
>читаю последние 50кб файла
Не понял, почему читаем именно последние 50кб. Или ты читаешь файл кусками по 50кб от начала до конца?
Короче, лучше, наверное, не выносить все содержимое файла в массив - вдруг у тебя входной файл будет иметь слишком большой размер. Хотя, с другой стороны, если гарантированно, что размер файла небольшой, то может для твоей задачи и лучше держать содержимое файла внутри массива, чтобы быстро обращаться к содержимому без необходимости повторного чтения.
В общем, чтобы было понятнее, нужен отрывок исходного кода.
Правильно будет наверное конкурентности навернуть. Один тред читает (кусками) файл и складирует их в очередь. Второй тред таскает из очереди кучки строк и обрабатывает их.
keyword, result, tmp = "huy", [], []
with open('my_file.txt') as f:
....for line in f:
........if keyword in line:
............tmp.append(line)
............if len(tmp) == 3:
................result.append(tmp.copy())
................tmp.clear()
....if tmp:
........result.append(tmp.copy())
print(result)
ну вот я так и делаю. Только у меня 3 условия if keyword in line, потому что у меня 3 варианта ключевых слов. В принципе, поскольку порядок строк не меняется, я в теории могу потом по полученному массиву проходится каждые 3 элемента и получать свои 3 строки и разбивать их на объекты
Но что если какая то строка проебется или еще че
>>197398
>почему читаем
Ну мне же нужны только свежие строки. Я не хочу читать весь файл из 110к строк или больше. Ну верней хочу, но этот функционал будет позже и в ручном режиме. Сейчас мне надо реализовать автоматическое чтение каждую секунду на предмет новых строк (конечно я не читаю каждый раз, я проверяю размер сперва)
>Только у меня 3 условия if keyword in line, потому что у меня 3 варианта ключевых слов.
keywords = ("huy", "pizda", "djigurda")
if any(kw in line for kw in keywords):
....print('this')
Это понятно. Ну в общем как я понял, ответ заключается в том, что лучше сперва фильтровать строки в массив, а уже потом работать с этим массивом, а не пихать все в массив или наоборот сразу обрабатывать строки при парсе файла
А то у меня щас как у тебя в прошлом посте, только в условиях сразу разделяются строки на нужную инфу и присваиваются переменным временного объекта, после чего при наличии всех переменных создается объект класса и добавляется в итоговый массив. И мне кажется это не надежно
Чел это всё индивидуально. Главное помни что у тебя файл открыт всё это время не пихай туда ничего что не касается этого файла и извлечения информации из него. Нашлось три строки делай break файл сам закроется и уже дальше продолжай.
Супер при множественном наследовании идет по цепочке MRO.
>Ну мне же нужны только свежие строки.
Тогда запоминай на какой строке остановился и при следующем чтении читай с того места.
def read_file(file_path, start_position=0):
....keywords = ("huy", "pizda", "djigurda")
....result, tmp, last_position = [], [], 0
....with open(file_path, 'r') as f:
........f.seek(start_position)
........line = f.readline()
........while line:
............if any(kw in line for kw in keywords):
................tmp.append(line)
................if len(tmp) == 3:
....................result.append(tmp.copy())
....................tmp.clear()
............last_position = f.tell()
............line = f.readline()
....if tmp:
........result.append(tmp.copy())
....print(result, sep="\n")
....return result, last_position
file_path=r"C:\Users\Karasik\Desktop\111.txt"
result, pos = read_file(file_path)
input("\n добавь в файл строку с ключевым словом и нажми клавишу")
read_file(file_path, start_position = pos)
>Ну мне же нужны только свежие строки.
Тогда запоминай на какой строке остановился и при следующем чтении читай с того места.
def read_file(file_path, start_position=0):
....keywords = ("huy", "pizda", "djigurda")
....result, tmp, last_position = [], [], 0
....with open(file_path, 'r') as f:
........f.seek(start_position)
........line = f.readline()
........while line:
............if any(kw in line for kw in keywords):
................tmp.append(line)
................if len(tmp) == 3:
....................result.append(tmp.copy())
....................tmp.clear()
............last_position = f.tell()
............line = f.readline()
....if tmp:
........result.append(tmp.copy())
....print(result, sep="\n")
....return result, last_position
file_path=r"C:\Users\Karasik\Desktop\111.txt"
result, pos = read_file(file_path)
input("\n добавь в файл строку с ключевым словом и нажми клавишу")
read_file(file_path, start_position = pos)
Не не, я закрываю файл в функции чтения, когда получаю 50кб последних строк, только потом передаю их в парсинг целиком как есть. Если длина файла не меняется, то и чтение не происходит. Но тут я кстати не уверен, насколько надежно это работает
>>197698
>запоминай на какой строке остановился
Да, этот вариант я тоже рассматривал. Но тут же получается, что при каждом запуске будет 1 раз читаться весь файл. В принципе, наверно это не проблема. Но в чем преимущество от чтения с конца заданного кол-ва байт?
Я конечно пока так далеко не заглядывал, да и нуб, но на ум приходят разве что потенциальные проблемы с добавлением новых строк в файлы проги в будущем.
Типа будет же функция, парсящая весь файл и собирающая вообще все строки в файл проги для подсчета и хранения статистики по запросу (нажатию кнопки). И логично, что при поиске новых строк для текущих функций проги мне надо будет добавлять их в этот файл на лету наверно тоже. Не делать же мне при каждом запуске проги сверку статистики в файле проги с файлом в котором я ее собираю. Или делать?
Когда ты читаешь файл с определенной точки, ты не читаешь байты которые были до этой точки. Записывай дату изменения своего файла чтобы знать менялся он или нет. записывай положение курсора чтобы читать только новые байты.
Это я понимаю. Но в таком случае, мне же нужно будет сохранять готовые данные в постоянный массив (между тиками чека файла) и убирать оттуда устаревшие? В принципе, получается на этом этапе устаревшие данные можно сохранять в свой файл для статистики. Звучит логично
Потому что щас получается у меня все просто срабатывает заново каждые 0.5сек (кроме чтения, если длина файла та же)
>Записывай дату изменения
Из метаданных? Это не работает, я пробовал. По всей видимости файл остается открыт владельцем какое то время после записи
Может, стоит проверять контрольную сумму файла чтобы отслеживать факт его изменения?
мимо нешарящий в погроме, где-то слышал про такую штуку, как контрольная сумма
Ужывай функцыю hashlib.md5()
А як у файле змянілі некалькі байтаў? Пацерлі і дапісалі столькі ж новых? Прапанаваны табой мэтад не ўлічвае гэты варунак. Яго можна ўжыць у якасці аптымізацыі перад выклікам md().
> ў
context = execjs.compile(combined_code)
Собственно более простой у меня так и работал. Но есть те в которых есть объект window, естественно из браузера запущенный через хтмл всё работает. А как сделать чтоб всё это запускалось из питона.
Понятно есть жуткие костыли в виде селениума. Но можно без этого может как-то адаптировать код? Я хз.
А как в файле изменили несколько байтов? Потерли и дописали столько же новых? Предложенный тобой метод не учитывает это условие. Его можно применить в качестве оптимизации перед вызовом md()
Анон которому это надо писал выше, что сейчас читает последние 50 байт файла и вообще, похоже что у него в файл только дописывают, непонятно откуда набижали желающие каждый раз весь файл целиком читать чтобы хэш считать. Хэш считать это вообще самый последний варик, если ни каких других не осталось. Все софтины которые я видел как могут изьябываются чтобы полностью файл не прочитывать, а то это же пиздец. Представляю анон наслушается советчиков и у него скрипт будет каждую секунду 10мб файл перечитывать. который просто дописывается.
По пунктам.
1. ООП нормального нет.
2. Приватных методов и аттрибутов нет, есть какая-то нелепая хуета с запеканием имен.
3. Скорость говно говна
4. Зачем-то сделали возможность добавлять на ходу свойства и методу экземплярам класса. Результат - дичайший жор памяти. Если хочешь нормально - юзай __slots__. Вопрос - а какого хуя сразу не сделали __slots__ изкаропки? А хуй его знает.
5. Какие-то невнятные рывки в сторону ФП с костылями.
сначала подумал ты про джаваскрипт
>2. Приватных методов и аттрибутов нет, есть какая-то нелепая хуета с запеканием имен
В крестах есть приваты, но (по крайней мере по гугловому стандарту) их все равно надо префиксить всякой хуйней. Вот незадача.
сунул тебе пипиську, обтекай.
Не те задачи написал. Каждый язык решает свои задачи. Если хочешь писю быстро-быстро сувать в шлюху процессор - юзай с++ или си
Я ищу датасет для обучения простого классификатора. Планирую давать ему спектрограмму аудио и чтобы говорил пол человека.
На самом деле, все уже готово. Откопал весь код (но не модель и датасет) на собственном гите.
Никогда не искал датасеты в интернете. Вот нашел, допустим, что-то:
https://www.kaggle.com/datasets/rohansahana/gender-voice-detection
Но тут нигде не написано, как получился csv-файл. В смысле, мне же надо на каком-то этапе использовать свою прогу, получать спектрограмму от собственных тестовых аудиофайлов. Может, я не ту функию использую и обучение с практикой разойдутся.
Так что. Там где-то написано, как эти файлы получились и я просто в глаза долблюсь? Или это общеизвестное знание?
>ищу датасет
Ты явно даже не понимаешь что это такое. "Датасет" может быть чем угодно. Реквест "ищу датасет" читается как "ищу хз чё"
>нигде не написано, как получился csv
Ну хуй знаю открой код да посмотри или спрости в репозитории где софт взял, правда тебя там скорее всего на хуй пошлют, сопли нуфагам вытирать тотлько ИТТ любят.
>Не нашел нейротред
Попробуй следующий раз искать не жопой, на дваче отдельная доска для этого есть.
>Ты явно даже не понимаешь что это такое. "Датасет" может быть чем угодно. Реквест "ищу датасет" читается как "ищу хз чё"
Я буквально следующим предложением уточнил.
Мой классификатор должен по аудиозаписи понимать, мужской голос или женский.
>на дваче отдельная доска для этого есть
Если ты про /ai/ то там в основном готовые юзают
Ну да ладно, проблему я уже решил. Нашел сырой датасет, безо всяких там спектрограмм.
А тебе спасибо за охуенную любовь к вытиранию соплей ньюфагам, ну прям охуенно помог.
Потому что по умолчанию папка проекта например c:\Studio и он все результаты работы прёт туда и она же является путём по умолчанию для всякого такого
with open('image.png', 'wb') as out_file:
out_file.write(pic)
Можно как-то настроить VS чтоб если файл image.png находится рядом с кодом, то оттуда же брался и путь.
Если честно давно заебала эта тема, хочешь скрипт проверить по пути с\хуй\пизда и надо его вручную раз за разом забивать или использовать свою функцию. Если открываешь *.py двойным кликом, то естественно пути указывать не надо, а вот в VS надо. Подскажите можно как-то пофиксить?
Если у тебя есть директория проекта 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 джава классы? Пиздец, помогите тупому. Умоляю.
Как какать?
Посоны я слегка тупой и на питоне на досуге всякой ху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 джава классы? Пиздец, помогите тупому. Умоляю.
Как какать?
Пока не вкурил корутины.
http://pastie.org/p/3zdWJUzKslXseQgD7vC0lD
Вот тут я совсем ересь делаю, или не совсем?
Что я хочу:
Управлять ботом в тг через другого бота. Хочу, чтобы бот остановился, если прочитает в файле единичку.
Для этого корутина должна остановиться.
Я беру корутину, в ней запускаю корутину с ботом, а затем бесконечно проверяю файл. Если надо - останавливаю корутину с ботом.
Проблема в том, что бот не останавливается от task.cancel(). Только от task.result().
Так можно?
>Как какать?
Это ж Kivy.
Скачивалку он решил сделать. Ха!
Пиши лучше CRUD-ы и не выебывайся.
Из-за редкости этой штуки, нагуглить ничего нельзя.
По сути, как я понял, надо всего-то обмазаться ффмпеговскими либами или джава классами и уметь их вызывать с питона.
Но поскольку я в гитхабе умею разве что склонировать гит и запустить setup.sh, думал может тут кто шарит и сразу своим прошаренным оком поймёт что да как там надо тыкать, чтоб нужные библиотеки высосать.
Да можно, добавь ещё try except вокруг result()
О бля отправилось. Кароче есть свежие книжки хорошие на русском? Читал Eric Matthes - Python Crash Course на ангельском, и чет чем дальше тем больше понимал что какое то туманное говно в голове образуется(остановился на 18 главе), возможно дело не в языке. Спрашиваю чтобы 600 страниц говна не читать. Пока зырю автоматизацию рутинных задач, но чет она старая, может чет новее есть. С меня тонны нефти.
Тебе не нужна свежая, потому что ничего значительно не изменилось с момента выхода той книги.
Понял, спасибо.
Кортеж - неизменяемый объект, лалка.
list1= [(val1, val2, val3), (val4, val5, val6), (val7, val8, val9)]
list2 = [tuple([val10] + list(x)) for x in list1]
>ООП нормального нет.
define нормальное ООП
> Приватных методов и аттрибутов нет
define "приватные методы и аттрибуты"
> Скорость говно говна
По сравнению с чем?
> Зачем-то сделали возможность добавлять на ходу свойства и методу экземплярам класса?
Динамическая типизация ради этого и затевалась
> Какие-то невнятные рывки в сторону ФП с костылями.
Двачую, за лямбды по рукам бьют
>define "приватные методы и аттрибуты"
методы и аттрибуты к которым ты не можешь получить доступ снаружи класса
Сейчас прикручиваю к нему апи.
Как мне защитить хостинг от бомбардировки запросами, если вдруг его кто-то найдет?
Ничего секретного я пока хранить не планирую, однако, как сделать так, чтобы на запросы только я получал ответ?
>книжки
>>208412
>600 страниц говна
>>208412
>(остановился на 18 главе
Нет смысла задрачивания книжек.
Достаточно туториала по базе https://www.w3schools.com/python/
Ну и по концепциям основным чтобы понимание было.
Книжки дрочить можно когда устроишься на работуа такое вообще вряд ли случится, если быть честным
>есть ли в классе функции, которые вызывают остановку эвент лупа
"остановку" в смысле просто авейт?
Молодец, Анон. Просто взял и сделал
Нет, не то, нужно проверить есть ли в коде класса или функциях/методах, которые он вызывает asyncio.get_event_loop().stop() в любом виде
Как-то так наверняка можно
Написать однострочник чтоб упаковывать в архив и перетаскивать на сетевую шару? Что?
>вакухах
Чел, думаешь у тебя есть шансы устроиться куда-то, если ты:
не оканчивал вузик
не олимпиадник
не имеешь коммерческого опыта по спецухе 1, желательно 2 года
?
>Знаю большое количество таких людей, вопросы?
Вопросов нет, есть сомнения.
500 - 1000 откликов на вакуху как бэ.
1. Один кандидат-вкатун откликается не на одну вакансию.
2. Качество как минимум половины из этой тысячи - супер хуевое.
3. Всегда можно накрутить.
1. Оканчивал вузик.
2. Школу закончил без троек.
3. Имею коммерческий опыт от продажи пк и сборок их до построения скс-ок на виланах, линуксового админства, телефонии, виртуалок, контейнеризации, сиайсиди пайплайнов, написания ванлайнеров на баше.
Я просто спросил до какой степени копать питон чтоб этого хватило дево-псу.
Где твой бог теперь?
>Я просто спросил до какой степени копать питон чтоб этого хватило дево-псу.
Ну если ты девопс, то очевидно же, что подразумевают под автоматизацией - написание скриптов для всех девопс-задач (разворачивание, CI/CD, инфраструктура, облака, логирование, и т. д.)
Делаю через openpyxl, все очевидные и гуглящиеся оптимизации включены. Скорость терпимая, но на 35к в несколько раз замедляется, хотя там нет никаких отличий на вид, память не течет.
И хуй знает, как его профилировать или дебажить, как даже найти, на какой строчке начинается. Весь код внутри, сводится к:
for i, row in enumerate(sheet.iter_rows(values_only=True)):
pass
для всего этого есть ямлики, ансибл, терраформ, там своя логика и свой синтаксис. плюс можно немного это всё прикостылить башем. Видимо, подразумевается, что костылить нужно питоном.
Ты строки извлекаешь целиком или проходишь каждое значение ячейки? И как открыт у тебя файл? В load_workbook указано read_only=True?
>Да вроде не должен.
>бесконечная рекурсия
Ты даже не спавн процесса делаешь, а в одном процессе стек дрочишь. Разве не?
Да, ето так...
Но если запускать раз в несколько минут, то на несколько дней хватит. Жить можно.
Да, целиком. Я же писал, что с оптимизациям.
Покопался там в кишках модуля и добрался до xml парсера отдельных элементов, чтобы вылавливать только нужные, но проблема где-то ещё глубже. Так что сдал как есть, пусть себе тормозит, лол. Тем более, что дальше снова разгоняется, как оказалось. Какая-то проблема с конкретным файлом.
>Потому что такие задачи обычно делают через баш скрипты.
Мля, я приду в тред немецкого и спрошу, как будет "люблю тебя, моя любимая, любовною любовью люблю любовь любви", а мне скажут - ээ нет, чувак, обычно под любовь французский заточен, на-ка тебе на нём перевод.
Я в Пейсон тренд пришёл, нахуя ты мне Баш свой пихаешь?
Да никто не обязан тебе отвечать так, как ты хочешь.
Мне вот пахую ваще.
Можешь спасибо сказать, что Баш, а не Повершелл.
Верно и справедливо.
Быстрофикс.
Не dates.category, а dates.category. Dates - это конкретная дата, которую я получил в js скрипте, category - ключ, через который дата связана, с походом. А вот у этого похода есть поле photo, вот его мне бы получить в скрипте.
Блять, ну вы поняли. Не dates.category, а dates, в квадратных скобках i,category.
не поле, а класс.
>"pyinstaller" не является внутренней или внешней командой,
В рот ебал Питухона. Версия 3.12, сегодня утром работало, сейчас - нет. Что делать то? Вин 10
Жаль тебя
Подскажите, пожалуйста. Есть множество файлов Excel, из которых нужно собрать данные в общую таблицу в другом файле. Перед тем, как брать данные, нужно обновить каждый файл Excel (там сводные таблицы). В самой программе это делается через Данные - Обновить всё. Каким образом это можно реализовать в Python, желательно с помощью библиотеки openpyxl?
Пытаюсь делать что-то типа:
wb = load_workbook(shab)
pivot_sheet = wb["Лист1"]
pivot = pivot_sheet._pivots[0]
pivot.cache.refreshOnLoad = True
Ошибок не выдается. Но программная среда зависает. Python отжирает 12 Гб памяти. В итоге ничего не происходит, приходится снимать задачу через диспетчер задач.
Специфичная задача. Нужно искать тех у кого есть опыт с таким.
На фрилансе за 500 рублей наверное сделают.
Тупо запускать скрипт с аргументами каждый раз большие накладные расходы. Надо при старте запустить его и дергать при необходимости.
Для выполнения этой задачи на 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()
def collect_data(file_paths, output_file):
all_data = []
for file_path in file_paths:
df = pd.read_excel(file_path, sheet_name='Sheet1') # Укажите имя листа или используйте другие параметры
all_data.append(df)
combined_df = pd.concat(all_data, ignore_index=True)
combined_df.to_excel(output_file, index=False)
# Путь к файлам Excel
excel_files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] # Укажите ваши файлы
output_file = 'combined_data.xlsx'
# Обновляем файлы Excel
update_excel_files(excel_files)
# Считываем данные и собираем в одну таблицу
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.
Для выполнения этой задачи на 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()
def collect_data(file_paths, output_file):
all_data = []
for file_path in file_paths:
df = pd.read_excel(file_path, sheet_name='Sheet1') # Укажите имя листа или используйте другие параметры
all_data.append(df)
combined_df = pd.concat(all_data, ignore_index=True)
combined_df.to_excel(output_file, index=False)
# Путь к файлам Excel
excel_files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] # Укажите ваши файлы
output_file = 'combined_data.xlsx'
# Обновляем файлы Excel
update_excel_files(excel_files)
# Считываем данные и собираем в одну таблицу
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.
>Вроде какие-то хитрые пайпы были, чтобы гонять через stdin/stdout, потом гляну, если хороших вариантов не будет.
ну можно так, без всяких хитрых пайпов, просто читать из стандартного ввода и писать в стандартный вывод
Для реализации всплывающего окна с фото похода при наведении на активную дату, вам нужно будет получить дополнительную информацию о походе вместе с датами. Вот пошаговый подход к решению этой задачи:
Изменение 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);
}
});
});
function showPopup(cell, hike) {
let popup = document.createElement('div');
popup.classList.add('popup');
popup.innerHTML = `
<div class="popup-content">
<img src="${hike.photo}" alt="${hike.name}">
<p>${hike.name}</p>
</div>
`;
document.body.appendChild(popup);
positionPopup(cell, popup);
}
function hidePopup() {
let popup = document.querySelector('.popup');
if (popup) {
popup.remove();
}
}
function positionPopup(cell, popup) {
let rect = cell.getBoundingClientRect();
popup.style.top = `${rect.top + window.scrollY}px`;
popup.style.left = `${rect.left + window.scrollX}px`;
}
Шаг 3: CSS для всплывающего окна
Добавьте стили для вашего всплывающего окна:
css
Копировать код
.popup {
position: absolute;
background: white;
border: 1px solid #ccc;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
z-index: 1000;
}
.popup-content {
padding: 10px;
}
.popup-content img {
max-width: 100%;
height: auto;
}
Этот подход должен обеспечить, что при наведении на активную дату появится всплывающее окно с информацией о походе и фото.
Для реализации всплывающего окна с фото похода при наведении на активную дату, вам нужно будет получить дополнительную информацию о походе вместе с датами. Вот пошаговый подход к решению этой задачи:
Изменение 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);
}
});
});
function showPopup(cell, hike) {
let popup = document.createElement('div');
popup.classList.add('popup');
popup.innerHTML = `
<div class="popup-content">
<img src="${hike.photo}" alt="${hike.name}">
<p>${hike.name}</p>
</div>
`;
document.body.appendChild(popup);
positionPopup(cell, popup);
}
function hidePopup() {
let popup = document.querySelector('.popup');
if (popup) {
popup.remove();
}
}
function positionPopup(cell, popup) {
let rect = cell.getBoundingClientRect();
popup.style.top = `${rect.top + window.scrollY}px`;
popup.style.left = `${rect.left + window.scrollX}px`;
}
Шаг 3: CSS для всплывающего окна
Добавьте стили для вашего всплывающего окна:
css
Копировать код
.popup {
position: absolute;
background: white;
border: 1px solid #ccc;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
z-index: 1000;
}
.popup-content {
padding: 10px;
}
.popup-content img {
max-width: 100%;
height: auto;
}
Этот подход должен обеспечить, что при наведении на активную дату появится всплывающее окно с информацией о походе и фото.
Спасибо. Как я понимаю, с пакетом Мой офис и без excel работать это не будет?
*что бы
в разработку?
Типа шаред хост как диды?
>Попробуй beget, вроде в зашкварах не замечен
такое можно сказать про любой топ 10, таймвеб спейсвеб евробайт
>yandex cloud
>Для джанго не подойдёт
Чё блять? Почему не пойдёт? Ты пробовал вот по этому туториалу разворачивать --> https://yandex.cloud/ru/docs/cloud-apps/django-container Или просто кукаретник?
1. Как я понимаю, отрисовка в kivy реализована примерно как эдакий SVG, и при обновлении любого виджета обновляется вообще вся графика. Из-за этого анимации пиздец съедают видевокарту и проц, и чем больше графических инструкций, тем хуже. В простое нагрузки нет, но у меня всегда на экране есть одна анимация, в итоге все весьма хуево. Можно ли как-то изолировать отрисовку одного этого конкретно виджета, чтобы его обновление не триггерило перерисовку всех других? Он один хуй находится в статичной менюшке, его ничего не может перекрывать или типа того.
2. У меня есть в проге весьма тяжелые вычисления, которые должны крутится в реальном времени и потому не терпят никаких подвисаний программы. Чего смог упростил, где смог использовал numpy, некоторые вещи вынес в отдельный процесс, а сами вычисления крутятся на отдельном потоке (что не дает прироста производительности, но они должны крутиться независимо от потока kivy, иначе возникает дессинхронизация), и было бы заебись как-то может обойти GIL или вроде того, чтобы графический поток и логический не разделяли ресурсы одного ядра (опять ж, условная анимация или перемещение внутренних окон может нехило сожрать проц). Повесить эти вычисления на отдельный процесс задача сложная и хуевая, там вычисления связаны с БД, а с БД связаны графические виджеты (для синхронизации данных в БД и того что на экране показано), если это и возможно сделать, то очень тяжело (хотя я слышал про shared memory, может, это решение? В любом случае не хочу с IPC дрочиться, на самом деле). Че делать не знаю.
Наверное можно, но я скорее всего не стал бы, если в гугле похожих примеров нет.
Проще взять кастомный виджет откуда-нибудь, да хоть на жквери. И впендюрить его заместо джанговского.
да, наверное ты прав.
спасибо!
сам такой)
>круто. сам писал? а что использовал? сколько времени ушло?
не писяль, я как идею для плимеля скинюль.
Выпячивает свою глупость, потому что ему нравится это приложение, но сам он не умеет ничего писать
> но сам он не умеет ничего писать
а ну покази што сям умеешь, или пяздя ти дуряяяяяяяяяяяяяяк!!
1: https://pastebin.com/Ak8W3g5p
2: https://pastebin.com/raPVjreG
Почему второй настолько медленнее?
Про numpy не пишите, у меня малые наборы данных, так что он пососет даже в сравнении с чистым пистоном. Изначально он и был на numpy.
А, я дурилка. Забейте.
Работаю ручным тестером, хочу освоить автотесты и пойти работать за 300к наносек, подскажите, пожалуйста, с чего начать изучение питона? Какие книжки посоветуете?
Когда-то в вузе лет 5 назад на базовом синтаксисе его освоил (типа вывести четные числа от 1 до 100. И то писал говнокодом.
Сейчас хочу с нуля освоить питон до уровня, который позволит писать автотесты (в идеале хочу понимать ООП, паттерны проектирования, киссдрайсолид и вот это вот всё).
Какая книга доходчиво может объяснить всё это с помощью питона, учитывая, что я туповатая свинота?
как ты тогда собрался вкатываться в ойти, если не можешь читать документацию даже ?
я уже три года в куа ручником тружусь.
всё изучал с гуглом (транслитом), осваиваю супер-быстро, просто нужна инфа с простыми сравнениями, например.
документацию читать я могу, но хуево, т.к. там есть некоторые языковые приемы, которые 99.9 разрабов сами не знают и идут в гугл переводить, а значит они такие же как и я, а значит английский знать для изучения не обязательно, хз че вы все доебались с этим пунктом
>99.9 разрабов сами не знают и идут в гугл переводить
я хуй знает где ты такое видел, В1 вполне хватает, чтобы осилить документацию.
А какая разница, переводишь ты её сам или жмешь ПКМ->Перевести страницу на русский?
На выходе результат если будет один и тот же, зачем лишний раз переводить самостоятельно?
С меня как всегда нихуя :3
Бочку делаешь?
>С этим говном только селениму может совладать?
недавно этой темой интересовался, и вроде как если сайт не отдает готовый хтмл, там типа надо чтобы броузер запускался и дергал кнопки
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
Нет, я имею ввиду, как надо регистрировать зависимости, чтобы Depends() не лез в аргументы, если это функция, или инит, если это класс.
В целом то словарь заебись подходит на роль нужной структуры данных, адрес - ключ, значение - ну, значение. У него и чтение быстрое, и запись - слияние шустрое, синтаксис очень приятный, а вот создается, зараза, долго, памяти жрет много, да и на выходе мне нужны байтовые данные.
Так чего не байтовый массив сразу? Мне нужен быстрый доступ по ключу, надо знать список ключей, уметь делать merge. Для байтового массива это все будет нихуево так долгие операции, ведь ключи надо будет вычислять на ходу. Можно избавиться от адресов, используя просто статичные байтовые массивы по 2048 байт, тогда индексы заменят собой адреса, решая проблему скорости доступа а с тем и слияния, но тогда мне надо отдельно хранить ключи, и по памяти тогда я еще больше отсасываю, чем просто со словарями, и это я еще не говорю про удобство использования - инициализировать байтовые массивы это гомоебля без смазки.
Какую структуру стоит использовать? У меня используются словари, и в целом все нормально работает, но проблемы имеются и я хочу от них избавиться.
>>229344
Аноны. Как определить точнейшие координаты элемента на экране внутри окна браузера? Всё время какую-то хуйню находит. Я помню лет 10 назад над этим вопросом бился так и не победил, просто распознование изображения прикрутил и забил.
Но вот прошло 10 лет, все сайты с адаптивной версткой везде подгрузки, js и анимации. Неужели это всё ещё задача не имеющая общего решения?
Может дело в том что я работал с Хромом, может в рпере или лисе координаты нормально находятся?
>Аноны. Как определить точнейшие координаты элемента на экране внутри окна браузера?
Имею в виду в Селениуме конечно же.
Селениум поддерживает Xpath. Xpath уникально идентифицирует DOM-элемент на странице. Чем не решение?
>HTML-элемент на странице
Прошу прощения, я технически неграмотная скотина, тем более во фронтендерских делах.
Мне нужно знать координаты элемента на экране. В пикселях. Все методы селениума и js, в нем не работают и выдают левые результаты.
1078x1920, 0:08
Привет, кожаный
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)
1078x1920, 0:08
Привет, кожаный
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 он процессор нагружает, какую нибудь рассылку делать может. Я думаю это на бесплатных тарифах запрещено? Поясните плз за это вот всё и ссылочку. Мне нужно для обучения и экспериментов.
Как научиться грамотно пользоваться стандартной библиотекой? Пишу уже лет 5 на языке (но не работал, лол, сторожем работаю), до этого на сишке по приколу писал, сейчас такой проектикт нихуевый по масштабу есть. Речь про всякие itertools, collections, functools. Решаю все свои задачи в лоб, без библиотек, тупо циклы, ветвления, и этим, конечно, можно написать что угодно, но я понимаю, что те же задачи можно решить элегантнее, быстрее.
Например, с байтовыми данными я работал через int.to_bytes и from_bytes, а потом научился пользовать struct и прям круто стало. Освоил next, filter, enumerated, defaultdict, и применяю, когда уместно. Next прям нравится для поиска.
Твой вопрос примерно звучит так: делаю 5 лет всякую фигню, пишу простые скриптики. Но хочу быть крутым программистом и писать крутой код. Вот просто хочу и всё. Что для этого нужно?
Ну учиться нужно. Опыт нужен.
Pythonanywhere вроде до сих пор не сдох
>Освоил next enumerated
Ты это должен был сделать в первый день изучения языка, это буилд-ин функции, самые базовые т.е.
>filter
Рудимент языка, устаревшая функция. Ведет себя как генератор но генератором не является. Проще свой генератор написать, а компрехенсон и более читаемый и в 10 раз быстрее работает и чаще даже места меньше занимает, если однострочник.
>defaultdict
У словаря есть метод setdefault, который делает то же самое, но в некоторых случаях медленнее defaultdict на несколько микросекунд, что в большинстве случаев не важно.
Садись два.
Пошел смотреть пишут, что в ЮНИКС используется метод fork который с текущей точки процесс делает, а вот в виндоус spawn, который с нуля запускает всё приложение? Не расточительно ли это? Может я что-то не так понял? Может он только имена импортирует и на самом деле это не так "тяжело" как кажется?
Я знаю тут сидят мудрейшие из людей, с глубочайшим пониманием подкапота и всех вещей, не раз мне поясняли по хардкору. Поясните за это молю.
А мультипроцес мне нужен чтобы gui от логики отделять, если что.
Если ты не запускать новый процесс каждую минуту, то какая нафиг разница.
На РАБотку устройся, там у более опытного челика будешь моментами спрашивать, а не стоит ли этот велосипед заменить на функцию A из стандартной библиотеки.
Еще очевидное решение, но ты можешь свой йоба-проект подрефачить, посмотреть и подумать, где можно упростить свои велосипеды.
MyDict({k:v for ...})
Можно ли как-то без создания этого транзитного словаря, который создается лишь чтобы быть скопированным далее?
вещает хрен: задача определить на каком этаже такой номер квартиры. 20 квартир на парадную, пятиэтажка.
пример он в обучалке показывает через целочисленное деление :
apart_number = 12
entrance_number = (apart_number - 1) // 20 + 1
print(entrance_number)
а потом еще 20 квартира у него находится во втором подъезде.
почему именно так? нет ли более логичного способа решить задачу?
Не будет там никакого копирования если ты специально глубокую копию не делаешь, просто ссылка передаётся
Че не так
result = 4 / 2
if isinstance(result, int):
Почему не работает? Функция не коллит заданный выше var.
Помогите лучше понять синтаксис пистона.
Оператор / дает в результате число с плавающей точкой. Для целочисленого деления используется //
Так, я кажется разобрался. Как удалить пост?
Всё работает, просто результат 4/2 в питоне - не целое число. Результат деления питон показывает как 2.0 почему-то, лол.
Так это получается не рабочий скрипт, потому что при / результат всегда будет floating point, а при // всегда будет integer.
Есть ли какой-то рабочий вариант как проверить результат деления? Типа проверять последнюю цифру результата деления, если 0 то целое число, если не 0 то не целое?
>А что ты сделать собирался?
Ничего, я просто изучаю питон с нуля. Пробую делать практические задания чтобы лучше разбираться в синтаксисе языка.
У float чисел есть функция is_integer. Она делает эту работу. Аккуратно! У целых чисел этой функции нет, и будет исключение.
Бросать ошибки наверх. Можно делать проверку в иф и бросать ошибку. Представь у тебя функция вычисляющая квадратный корень. Ты делаешь в ней проверку на неотрицательность аргумента, чтобы что? Очевидно что проверять пользоательский инпут должен код отвечающий за него, а не эта функция. Поэтому код принимающий ввод пользователя должен проверять что число неотрицательное и передавать твоей функции. А функция должна посылать исключение для отрицательного числа, чисто как контракт из бизнес логики, которая может работать только в определенных границах. Фактически приложение будет работать без исключений, но будет защита от хрупкости при рефакторинге, если кто-ибудь уберет из кода инпута проверку неотрицательности.
Спасибо, всё работает.
>Я писал и пишу сложные большие вещи
>Освоил next enumerated
Ебало сложных больших вещей представили?
Человеческий фактор. Только что создал 200 миллиардов экземпляров класса с наследованием от словаря и без оного, передачей в обоих случаях конструктора словаря в аргумент. Разницы 0.1 микросекунда, ты очевидный бариста вкатун с курсов, который в душе не ебет что делает, просто повторяет шаблон с урока или с чата гпт, без понимания процесса. Таким образом ты садишься жопой на горлышко бутылки в другом месте. Кто знает может ты даже не знаешь что такое наследоваться. Попробуй перезагрузить компьютер.
Представь, имея самые базовые конструкции можно наговнокодить хоть прошивку космического корабля.
>Представь
Самомнение, выше гор. Мне ничего представлять не нужно, каждый первый школьник так говнякает. Говнокод называется.
Самое смешное что в тебе не капли рефлексии нет, ты свое невежество защищаешь.
Ты прав. Вижу ты парень смышленый, а я зря быканул.
Делать метод nadet_obuv_bez_noskov(obuv) или пихать ещё один параметр noski=True не очень хочется.
if obuv != "sandali": self.__nadet_noski()
Хочу сделать образ со своим маленьким проектом на 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?
Что мне засунуть в докерфайл, чтобы этого избежать?
На каждый тип одежды в классе прикид заводишь массив того что уже надето.
>>237100
mac, linux, win? docker создаёт свою виртуальную сеть, внутри которого живут приложения. Для разработки можешь замапить порт 5432 на localhost флагом -p, потом сделаешь всё в compose, чтобы они в одной сети были.
Короче просто возьми какой-нибудь учебник по питону, не для начинающих, где все эти конструкции изложены, специфичные для питона.
Те главы, которые хорошо знаешь, пролистаешь очень быстро, а в других что-то новое для себя найдёшь.
Собственно только так.
enumerate это уж совсем какая-то база-база. next вещь сомнительная, лучше научить свои генераторы реализовывать, если ещё не умеешь (раз enumerate что-то продвинутое по твоей оценке, то легко), всякие контекстные менеджеры, и чтобы руками из создавать, и там через contextlib.contextmanager. Это пример вещей, специфичных именно для питона
При объявлении класса не нужно ставить скобки если он не наследует никакой другой класс.
F-строка не объявляется если не используется {}
>F-строка не объявляется если не используется {}
Такую хуйню за меня проверяет линтер, мне проще рефлекторно ебашить f''
Тупо словарь или лучше какие-то более извращенные варианты?
разумнее сделать какой-нибудь класс для этого, чтобы обращаться не как
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, как раз получается как константы настоящие.
Минус в том, что это более тормозное решение, надо с этим аккуратнее быть.
На домашний пк вместо винды. Винду удалить.
Но если нет желания, то нет смысла. Будешь с Линуксом возиться больше, чем с программированием.
А оно тебе надо? У тебя нет никакого бэкграунда судя по вопросу про линукс и записи на курсы. Отсидишь 30 часов слушая про математику, алгоритмы и прочий кал, а в конце поймёшь, что нужно ещё 60 часов сопутствующего говна изучить, а потом ещё и ещё. Будешь вечно что-то гуглить, читать, садить зрение, спину, станешь жирным и нервным. А что по итогу? Работы нет, учить очередную нейросеть или рисовать админку на джанго за 40к оклад нахуй надо.
Быть плиточником, автослесарем, электриком, токарем, да заниматься любой рукастой работой гораздо интереснее чем питонить. Серьезно чел, посмотри на рост недвижимости, посмотри как круто красить тачки в мастерской, варить металлоконструкции, ты всегда будешь подтянутым, сильным, через пять лет ты будешь работать на себя или будешь начальником, а не червём пидором, которому будет ебать мозги тупая шалава из менеджмента на созвоне
>рисовать админку на джанго за 40к оклад нахуй надо.
кем надо быть? Никогда не получал соротыгу. Максимум 22к на донной дно работе.
При этом они структурированы по id пользователей от 1 до 100к и по id файла от 1 до 100 (или же допустим что это неупорядоченные интовые переменные).
Как мне лучше все это хранить?
На вскидку приходят:
Словарь со словорями с объектами
Таблица связей user_id - file_id так как у нас типичная связь многое ко многим.
Что из этого лучше?
>При этом они структурированы по id пользователей от 1 до 100к и по id файла от 1 до 100 (или же допустим что это неупорядоченные интовые переменные).
У 1 пользователя может быть до ста файлов и у одного файла может быть до 100к пользователей
>Что из этого лучше?
Миллион это мало. Словарь. В чем вообще проблема. сидишь с линейкой, если память позволяет - словарь. если память не позволяет - бд, но с бд можно очень легко обосраться и даже не понять. Так что если ты нуб - сиди на словаре до упора. пока память есть.
Проблемы то в целом нет самому unbind дергать, но я однажды могу просто забыть, будет утечка, не круто. Потом хрен найду.
Короче, вторую проблему решил рефакторингом и переписыванием всякой тяжелой ебанины на Cython. Но че с этим делать:
> 1. Как я понимаю, отрисовка в kivy реализована примерно как эдакий SVG, и при обновлении любого виджета обновляется вообще вся графика. Из-за этого анимации пиздец съедают видевокарту и проц, и чем больше графических инструкций, тем хуже. В простое нагрузки нет, но у меня всегда на экране есть одна анимация, в итоге все весьма хуево. Можно ли как-то изолировать отрисовку одного этого конкретно виджета, чтобы его обновление не триггерило перерисовку всех других? Он один хуй находится в статичной менюшке, его ничего не может перекрывать или типа того.
Ваще хуй знает. И нагуглить не получается никак. Тут разумисты сидят, может все же подскажут. OpenGL там как-то дергать или че...
Еще другой прикол.
У меня есть цветовая схема в программе и возможность ее настройки прям в режиме реального времени. Это охуенно удобно для разработки, цвета подбирать, да и красноглазым понравится. Все хорошо, кроме того, что если я меняю, например, цвет текста у Label, то какого-то хуя он меняется и у Button, хотя в цветовой схеме они имеют различные значения, ссылаются на разные ColorProperty. Связано это с тем, что Button наследуется от Label. Если поменяю цвет Button, то цвет Label останется неизменным, но поменяются и все наследники Button, хотя параметр color ссылается на другой ColorProperty. Он бинды не сбрасывает при изменении параметра color или че? Срань какая-то.
>Ваще хуй знает. И нагуглить не получается никак. Тут разумисты сидят, может все же подскажут. 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.
Возможно, кстати, можно создать контекст и вне класса окна. Но тут хз.
А еще не знаю, насколько решение переносимо. Запускал только на винде. Седьмой.
Любой объект, используемый в ui, должен быть наследован от Widget, так нельзя, как ты пишешь. Да и окно это, ну, окно.
У меня там ошибка кстати. Еще надо idle у EventDispatcher переписать, а то рассинхрон будет с обновлением графики.
Я раньше использовал pyinstaller но он в режиме одного файла блокируется защитником виндуса, да и этот "один файл" на самом деле просто самораспаковывающийся архив, который засирает временные файлы и требует время на распаковку каждый раз во время запуска. 10 раз программу заспустил и у тебя temp 1 гигобайт весит. Надо в скрипт добавлять функцию которая поддитрает. В общем хуйня какая-то, а кучу файлов передавать некрасиво.
Какие ещё есть популярные решения и такие же одноклеточные как pyinstaller - одну строчку вбил и готово.
> Аноны, как вы свои программы передаете друзьям, коллегам, однокашникам и прочей живности,
Браузером
>10 раз программу заспустил и у тебя temp 1 гигобайт весит
Не замечал за ним такого. Алсо, пусть просто накатят python, епт, там установка в одну кнопку.
>пусть просто накатят python
Чеееееел. В 90% случаев никто этого делать не будет. А если начнут, то заебут "я тут нажала и оно перестало работать".
>Не замечал за ним такого.
Плохо смотрел. Когда пайинсталер запаковывает в 1 файл программу, при её запуске в temp распаковывается архив примерно в 2-3 раза больше по размеру. Если например у тебя в программе cv2 и pyautogui используются то такая программа будет весить 60 метров и при каждом запуске будет высирать временных файлов на 180 мб.
Причем при каждом запуске новая папка высирается. а старая не удаляется сама.
Но ведь ты и не заметил. Или просто такие скрипты делал которые не требовали запаковывать зависимостей хотя бы на 60 мб.
60 точно было от numpy, scipy, kivy, еще до кучи мелочевки. От numpy и scipy я правда отказался и теперь exe по 30. Ну я просмотрел пути сейчас и нет там в temp ничего от pyinstaller.
Чел. Если у тебя пайинсталер запаковывает в 1 файл, это просто архив который каждый раз распаковывается во временные файлы в директорию начинающуюся с _mei. Если не знаешь где у тебя временные файлы добавь print(sys._MEIPASS) Эта переменная появляется после запаковки пайинсталера в режиме 1 файл.
Запаковал, запустил, смотрю папку. У меня он удаляет их сам, они не остаются. Python 3.8.7, windows 7, pyinstaller 5.6.2
>windows 7
Вижу что вы человек культуры.
У меня была старая версия pyinstaller,обновился, кстати последняя 5.13 видимо в этом всё дело было. Впрочем это так то и не было особой проблемой - удалял файлы из скрипта. Да и то что при каждом запуске 180 метров распаковывается это в любом случае неудобно.
У меня на новых версиях pyinstaller не собирается kivy, ну или это из-за multiprocessing, не стал особо разбираться, остался на старой просто.
> Вижу что вы человек культуры.
У меня фимозное железо, о чем я выше и упомянул.
У меня на виртуальной машине с 2 гигами и 1 ядром вин10 стоит и вроде бы даже нормально работает.
Да и кстати однофайловый pyinstaller вин10 считает вирусом, а если не запоковывать в 1 файл - то нормально.
>Почему так, как думаешь?
Наверно потому что это самораспаковывающийся архив без цифровой подписи, хотя антивирусы на него не ругаются, но я ещё не пробовал обновленный pyinstaller может с ним такого нет (вероятность этого крайне мала)
Хочу теперь людям его показать.
Купил хостинг за 200 р/месяц.
postgres нет - ладно, переписал на mysql.
Теперь вопрос - как запустить скрипт-то?
На панели управления есть shell-клиент, там можно запустить, но как только выйдешь, все вырубится.
Допустим, я упаковал все, связанное с запуском в script.sh, но когда пытаюсь его запустить, говорят, что нет допуска.
Дополнительно. Как обеспечить, чтобы бот, в случае чего, не упал на полдня, если сервер перезагрузится, пока кто-нибудь меня не ткнет?
Мне приходит в голову разве что проверять, что bot.py запущен специальным скриптом через CRON раз в пять минут
>Допустим, я упаковал все, связанное с запуском в script.sh, но когда пытаюсь его запустить, говорят, что нет допуска.
Так, с этим разобрался. Я раньше с линуксом много не работал, лол.
Как теперь по всем понятиям сигналы в логику посылать и чтобы пацаны не засмеяли.
Например, делаем словарь где ключ это строка, а значение это Event() (ну или другой сигнал), а потом под кнопки в гуи этот словарь подкладываем? Например вот у нас кнопочка старт туда добавляю d["вычисления поехали"].clear()
Так нормально? Просто сигналов много, а в словаре они компактно собраны и их можно удобно перекидывать по тредам.
Ну как?
>На панели управления есть shell-клиент, там можно запустить, но как только выйдешь, все вырубится.
Тоже понял. Надо было nohup прописать
Обнаружил, что на линуксе существует крон. Придумал две идеи:
Раз в две минуты кроном запускать скрипт, который проверяет, что бот запущен, и если бот не запущен, то запускает (не знаю, может ли на линуксе меняться pid у процесса. Как вообще большие мальчики решают эту проблему? Мне приходит в голову только ботом раз в минуту класть в файл текущее время. тогда если в файле не текущее время, чекер, запускаемый через крон, будет знать, что надо запускать файл).
Идея 2. Кроном запускать бот раз в час на один час. Тогда отпадает необходимость что-то проверять, зато регулярно у бота будут обрываться диалоги.
Вопрос, как лучше всего обеспечить бесперебойную работу?
Когда заебешься писать сервисы для ботов, посмотри как работать с докером
может ты просто не можешь понять его вывод?
Что делает приложение?
Ты уверен, что правильно понимаешь следующие концепции:
- классический memory leak в смысле кучи в Cи.
- RSS и как с ним работает cgroups
?
Технически, у этого профайлера больше звезд https://github.com/bloomberg/memray
Надо просто не выёбываться, а носить сандалии с носками.
> Ты уверен, что правильно понимаешь следующие концепции:?
Забыл освободить память или забыл удалять какие-то объекты из списка - какая в целом разница, если итог одинаков?
Я исправил причину, так как знал при каких условиях происходит проблема и докопался до причины. Вот если бы было непонятно из-за чего...
За профилировщик спасибо, думаю, понадобится однажды. Мне по CPU нравится профилировщик yappi.
Но! Тогда получится, что в мой фастапийный репозиторий протекут конфиги nginx а нахера они там нужны. И еще, если у меня два пет-проекта хостятся на одной vpsке, и сейчас там на входе стоит nginx и по маске урла раскидывает запросы на разные порты, то как это все организовать в докере? Не ставить же мне nginx за вторым nginx где первый роутит запросы между разными сервисами, а второй чисто обслуживает конкретный сервис. Какой-то оверхед получается, не?
Как правильно это все организовать?
>app.run(ssl_context='adhoc', port=8080)
>ssh -R 80:localhost:8080 serveo.net (в CMD)
чек пикрил: Serveo запрос принимает, но сама страница не грузится, хотя при заходе через localhost:8080 всё отлично работает.
Попытался нуиткой свой проект собрать, через полчаса выключил нахуй компиляцию на половине, побоясь для своего некроноута температур в 80 градусов с ебанутой нагрузкой. Так и не понял, какого хуя он всякие нампаи компилировал, если я их не использую.
Понятно, что он ищет все вхождения модулей. В фреймворке, что я использую, есть импорт numpy, но он происходит только при условии запуска на андроиде или ios. А я под винду собираю. Наверное можно как-то их сборку запретить.
А че там в циклах непонятного? Ты уж скажи хоть, чего именно не понимаешь.
Лучше сборника не нашел, но тут в основном базовые вопросы.
https://github.com/yakimka/python_interview_questions
А так проходи собесики на интересующие тебя вакансии, выписывай вопросы оттуда к себе, ищи ответы на них в свободное время, и по кругу, пока не будет от зубов отскакивать.
Все их нужно по-особому конфигурировать набором команд вида:
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}?
Может либы есть под это?
Пока думаю придётся писать класс с вложенными словарями и намедтуплами.
Но вообще проблема "сделать переводчик с человеческого на драйверный" должна быть распространена.
Аноны, возможно ли как-то скомпилировать питоновский проект в установочный файл для Линукс (deb) или чтобы программа сразу запускалась без установки? Для винды все элементарно, а вот с GNU/Linux не знаю.
> в установочный файл для Линукс (deb)
Можно.
>чтобы программа сразу запускалась без установки
Что ты понимаешь под установкой?
Разбросать файлы в локациям по PATH? Создать ярлык?
Зависит от того, что нужно, и где нужно. Какой Линукс, какое окружение и т.д.
Вот есть у нас в приложении некие пути, которые всегда зависят от того, откуда запускается приложение. И уже на основе этого базового пути подставляем относительные пути для файлов приложения.
Например приложение запускается из 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) нужно чтобы этот объект с собранными путями был виден где угодно, передавать как аргумент и таскать везде объект с путями слишком некрасиво.
Какая питоническая мировая практика коммерческой разработки на лучших галерах по этому поводу?
В корневой папке сделать BASE_DIR = pathlib.Path(__file__).resolve().parent
затем просто
import BASE_DIR
my_path = BASE_DIR / pisechki.txt
А как быть если мне надо в ручную указать особый base_dir, который может отличаться в зависимости от разной среды и прочего. Т.е. мне нужен объект куда я передам base_dir, он там сделает все пути и уже оттуда я буду пути дергать.
Ну т.е. запускаю приложение оно в main смотрит где находится получает base_dir и ещё некоторые переменные и на основании их делает пути. И все пути должны быть в одном месте. Т.е. если у меня путь к картинке в 10 местах неудобно потом его переделывать.
Я вот думал класс сделать для путей, но боюсь изобрести велосипед.
Во-первых, книга на 1500 страниц -- это же пиздец. У человека пропадет любое желание что-то делать уже на половине.
Во-вторых, упражнений нет вообще. Я уже давно понял, что учебники без нормальных упражнений -- это лютый кал. Именно самостоятельная работа приносит наибольшую пользу. Все остальное, это в одно ухо влетело, в другое вылетело.
Т.е. как учебник, он собрал все антипаттерны.
кто все? Шапка питон-треда, которая лет 7 сколько я ее помню, в этом состоянии?
Никто не советует. Тягомотина - пиздец.
Просто он довольно подробный. Можешь держать по другой и сверяться по тем или иным вопросам.
Но за последние 10 лет появилось много чего получше.
1) Абсолютный путь к корневой директории вычисляешь своим хитровыебаным способом с переменными
2) Путь к картинке всегда задаешь относительно корневой директории
3) Коннкатинируешь 1 + 2
все
Вопрос был не в том что надо сделать, а в том как это реализовать по феньшую.
Незразумела навошта табе асобны кантэйнер з nginx. Я звычайна піхаю проксі у вобраз з прыладай, на ім жа статычны змест. Асобным кантэйнерам у мяне толькі база звестак, каб можна было абнавіць прыладу і пакінуць старыя дадзеныя. Але для малых праектаў табе непатрэбны проксі ўнутры кантэйнера. Разам з FastAPI ужывай сэрвер кшталту uvicorn у адным кантейнеры. Такім чынам будзе толькі адзіны проксі на VPS.
Советую смириться и затерпеть джаваскрипт. Тебе же это как разрабу в плюс будет, потому что познакомишься с другим ЯП, немного иной концепцией программирования, будешь лучше понимать других разрабов.
Мне на проекте сказали, что фронта у нас нихуя нету и в ближайшие месяцы не появится, поэтому сиди, разбирайся с реактом, потом сделаешь вот эту, эту и эту хуйню. Ну я с основами разобрался, ознакомился с концепцией хуков, чувствую себя лучше. До этого там же на jQuery писал, тоже полезный опыт.
Так вот, имхо, полезнее зажав нос разобраться в классическом фронтенд фреймворке, чем вникать в какую-то мертворожденную залупу, которая никогда не достигнет даже минимальной популярности, и в итоге сдохнет. Знакомый флаттер-разраб сейчас страдает потому что нихуя вакансий нету.
Я джавист с 3 года опыта работа в индустрии (IT отдел банка), но меня дико заебал бездушный энерпрайз. Вот думаю вкатиться в машинное обучение/искусственный интеллект. Как я понял, пайтон в этой области это go to.
Что посоветуете почитать, чтобы можно было быстро выучить минимально необходимый технический стек: базовый пайтон + основы машинного обучения, фреймворки и т.д. В сети очень много академической литературы, не хочу с этим заморачиваться.
https://roadmap.sh/ai-data-scientist
От себя посоветую на каггле базовые курсы пройти по пандасу и рисованию графиков, они прям хороши, учат делать все в python-way.
мимо готовился вкатиться в ДС, но пошел пилить бэкенд раньше чем нашел работу в ДС
Спасиб.
Блин, но вот многовато придется учить.
Мне уже 27 лет даже как-то стремно пытаться перекатиться в совсем другую область. С другой стороны, я одинокий инцел и свободного времени много.
В любом случае, спасибо за ссылку, это то, что я хотел.
>Блин, но вот многовато придется учить
Оно так только выглядит. Я думал, ты по верхам попробуешь эти темы закрыть, вкатиться и дальше уже въебывать, как учил Антон Назаров.
Если у тебя дохуя свободного времени - можешь попробовать еще курс DLS от МФТИ. Бесплатный, идет в режиме учебы 2 семестра, ебашить надо, но вроде толковый. Но я бы сейчас охуел с того чтобы почти год куда-то там вкатываться без гарантий, когда я уже в колее бэкендера. Занимало бы это не год, а, хз, 3 месяца, я бы еще подумал.
Не получается правильно посчитать сумму передаваемых аргументов.
add_item("kek", 10) почему-то считает два раза.
https://pastebin.com/sC7vJNZu
Когда процесс заходит в функцию и делает 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
Все книги НОРМ. Книг неНОРМ не существует в природе. Любая книга проходит через издательство/переводчиков, где они решают публиковать/переводить её или нет. Потом ещё есть рецензенты, которые исправляют косяки/подсказывают. Книга проходит через десяток рук, прежде чем опубликоваться. Неужели ты думаешь, что кто-то публикуешь хуйню. Типа, зачем издательству это? Чтобы не было продаж?
От души, пару часов мучился.
Добавлю, что не о всех! Судя по всему, там и годноту издают, но раз на раз не приходится.
Поставил нуитку скомпилировал файл и вот что заметил.
Если перехватывать исключения, например сис эксептхук, там не будет писаться строка где исключение случилось, только блок кода, например метод и _репр_ исключения.
Понятно что это из за компиляции в си, но неудобно для отладки же. Или я что-то не понял.
Огромное спасибо за шапку и коллекцию книг!
Есть ли в интернете подобным образом оформленные тематические сообщества? На любом языке. Гугл будет совать платные книги и курсы, реддит полагаю выпилит ссылки на книги, у SO формат вопрос-ответ.
Последнее время постоянно борюсь с желанием выкачать интересующие тематики просто на всякий случай.
Ну и нахрена тебе эти книги нужны. По каждой библиотеке есть отличная документация. Все кратко и по делу от создателей технологии. А в книгах всегда воды много.
>Гугл будет совать платные книги
О бомже мой! Какая наглость! Как посмели авторы требовать денег за свой труд! Какие ироды, не могут уже и бесплатно поработать, ишь ты!
Ну там база. Фундамент. В доках к библиотекам не пишут про отступы и вызов функции из соседнего файла.
Импорт это базовый синтаксис, про него в доках всё написано. Про стиль, как желательно делать отступы и прочее говно написано в ПЕПе и это живая тема без правил, если есть необходимость какая-то, то ты можешь вообще всё по-другому у себя в проекте организовать.
Доброе утро, блеать!
Теперь издать книгу стоит копейки! Их даже не печатают. Сразу в электронном виде продают.
Конечно, дохуя развелось посредственных книжонок.
>Как посмели авторы требовать денег за свой труд!
Если хотя-бы часть денег уйдет на уход за его могилой, то я и не против.
>kthrho = 0.2
Заменить на
>kthrho = 0.4
При этом заранее неизвестно чему может равняться этот флаг, поэтому просто поиск строчки "kthrho = 0.2" не работает. Создавать новый файл с новым флагом тоже нельзя из-за особенностей задачи.
Jupyter?
А в чём сложность-то? Читай файл, детекти эту твою строчку, заменяй, пиши в файл... ну или регулярка
sed -i 's/^kthrho = .*/kthrho = 0.4/' файл.txt
В книге могут быть примеры и подводные камни. Плюс какие-то недокументированные фичи. Это если книга хорошая.
>Последнее время постоянно борюсь с желанием выкачать интересующие тематики просто на всякий случай.
Не надо бороться, правильное желание.
Ебать особенность, ебать задача. Пиздуй в озон работать.
>По каждой библиотеке есть отличная документация
Бля меня всегда улыбают люди, которые при каждом чихе уповают на документацию. Типа просто читайте документацию там же всё понятно)))))
Это те же самые люди, которые свои собственные проекты не документируют никак, типа просто читайте код моего проекта там же всё понятно)))))))
Ну типа, сколько ты своих собственных проектов задокументировал?
Прям с примерами, подробно расписываешь?
Чтоооо яяяя???? Это другие должны, я никому ничего не должен!!!
Не работает, в переменная создаётся только после того, как там всё упаковалось.
Как вообще с классами быть, в фотошопе есть стерка, а есть маски, так вот в самом начале я волевым усилием пересел на маски, ну потому как так правильнее. Может так и с классами сделать?
>Как я понимаю классы это как функция только они могут стать частью конструктора другого класса
Хз. Я ООП не знаю. Мне казалось, классы - это шаблоны для функций, то есть буквально "классы функций". А то что в классе можно написать явную функцию, то это просто следствие того что можно написать обобщение. Если есть общее - то можно прийти к какому нибудь частному.
ООП это про обобщение функционально го программирования. Вот на чистом С, есть функции. И когда делаешь что-то больше hello world, можно заметить, что некоторые функции схожи некоторым принципом. То есть они работают практически одинаково, за исключением некоторых частных изменений. И само собой разумеется, возникает потребность сделать некоторый "класс" таких функций. То есть объединить все эти функции одной какой-то конструкцией, чтобы все они представляли её частный случай. Например класс "фигуры", который бы содержал способ отрисовки фигур при помощи линий. И из этого класса можно получить функции для отрисовки квадрата или треугольника. А можно получить и другой класс, например "прямоугольники" (не сложно ведь немного изменить класс так чтобы он рисовал только прямоугольники. Класс это как бы "функция функций". Полиморфизм и инкапсуляцмя по-проще. Полиморфизм, это способность делать операцию универсальной относительно типов (зависимой от типов). Например, в С, 2/4 =0, если 2 и 4 - целые. А вот если 2 и 4 - флоаты, то результат будет другой (0.5). А операция одна.
Инкапсуляция подразумевает разделение программы на "зоны видимости". То есть одна часть программы, может ничего не знать про реализацию функции max(), но использовать её. Инкапсуляция есть и в не-ООП языках, например слова static и extern в С позволяют сокрыть что-нибудь от зоны видимости файла.
>Как я понимаю классы это как функция только они могут стать частью конструктора другого класса
Нет. Полно проектов которые пишутся на С, чисто в функциональной парадигме. OpenGL, Xorg, Links2, Doom 1, ядра операционных систем. ООП - просто один из подходов. Строго говоря, писать в парадигме ООП можно и на ассемблере. Как кто-то говорил: "в начале появилось ООП, а потом программирование". То есть мыслить категориями классов и объектов, можно и на машинном коде перфокарт. Другое дело, что на ассемблере, нет встроенных способов создать функуию, не говоря уже о классах. На ассемблере есть только команды и макропроцессор, даже циклов и условий нет. Приходится и функции и стековые фреймы, и циклы изобретать самостоятельно. Чем больше таких "изобретений", тем больше код становится нечитабельным и непонятным. Вообще-то говоря, код на ассемблере в принципе нечитабельный. Это нужно привыкнуть к асм-байтоёбству, чтобы в последовательности команд, окначивающихся на jz видеть "цикл". Поэтому и существует условно ООП поддержка со стороны языка, чтобы смотреть на код и видеть ровно то, что подразумевает парадигма. Чисто для удобства.
>Как я понимаю классы это как функция только они могут стать частью конструктора другого класса
Хз. Я ООП не знаю. Мне казалось, классы - это шаблоны для функций, то есть буквально "классы функций". А то что в классе можно написать явную функцию, то это просто следствие того что можно написать обобщение. Если есть общее - то можно прийти к какому нибудь частному.
ООП это про обобщение функционально го программирования. Вот на чистом С, есть функции. И когда делаешь что-то больше hello world, можно заметить, что некоторые функции схожи некоторым принципом. То есть они работают практически одинаково, за исключением некоторых частных изменений. И само собой разумеется, возникает потребность сделать некоторый "класс" таких функций. То есть объединить все эти функции одной какой-то конструкцией, чтобы все они представляли её частный случай. Например класс "фигуры", который бы содержал способ отрисовки фигур при помощи линий. И из этого класса можно получить функции для отрисовки квадрата или треугольника. А можно получить и другой класс, например "прямоугольники" (не сложно ведь немного изменить класс так чтобы он рисовал только прямоугольники. Класс это как бы "функция функций". Полиморфизм и инкапсуляцмя по-проще. Полиморфизм, это способность делать операцию универсальной относительно типов (зависимой от типов). Например, в С, 2/4 =0, если 2 и 4 - целые. А вот если 2 и 4 - флоаты, то результат будет другой (0.5). А операция одна.
Инкапсуляция подразумевает разделение программы на "зоны видимости". То есть одна часть программы, может ничего не знать про реализацию функции max(), но использовать её. Инкапсуляция есть и в не-ООП языках, например слова static и extern в С позволяют сокрыть что-нибудь от зоны видимости файла.
>Как я понимаю классы это как функция только они могут стать частью конструктора другого класса
Нет. Полно проектов которые пишутся на С, чисто в функциональной парадигме. OpenGL, Xorg, Links2, Doom 1, ядра операционных систем. ООП - просто один из подходов. Строго говоря, писать в парадигме ООП можно и на ассемблере. Как кто-то говорил: "в начале появилось ООП, а потом программирование". То есть мыслить категориями классов и объектов, можно и на машинном коде перфокарт. Другое дело, что на ассемблере, нет встроенных способов создать функуию, не говоря уже о классах. На ассемблере есть только команды и макропроцессор, даже циклов и условий нет. Приходится и функции и стековые фреймы, и циклы изобретать самостоятельно. Чем больше таких "изобретений", тем больше код становится нечитабельным и непонятным. Вообще-то говоря, код на ассемблере в принципе нечитабельный. Это нужно привыкнуть к асм-байтоёбству, чтобы в последовательности команд, окначивающихся на jz видеть "цикл". Поэтому и существует условно ООП поддержка со стороны языка, чтобы смотреть на код и видеть ровно то, что подразумевает парадигма. Чисто для удобства.
Никак. Я безработный. А что, в чем я не прав? Можно заняться аутизмом, и сказать что функциональное программирование и ооп никак не связаны, но толку то от этого? На практике все равно связаны, точно так же как связано структурное и функциональное программирование.
Но это всё какие-то тупорылые доёбы для аутистов. Не думаю что на собеседовании на это будут обращать внимание. Тем более, я помню чела который устроился в IT, указав в ряде языков программирования html. А что никто не доебался что на html программы не написать?!
Если я пишу с нуля, то никаких классов. Если начинают возникать сущности с внутренним состоянием, то тогда уже да.
> как вы собесы то проходите...
Я самозанятый, сам у себя собес по блату прошел через постель
Так самозанятый это просто раб у охуевшего в край кабана. Самозанятость это просто ширма для серого найма. От собесов и остального корпоративного бытия не избавляет.
Не у одного кабана (это действительно подмена трудовых отношений), а у многих. Не нравится какой-то кабан, шлешь нах его. Завтра на его месте пара других. Мелкие проектики, иногда что-то крупное.
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]
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]
Обновление
Какие идешки нынче в моде и топовыми считаются? Раньше вроде какую-то конкретную в шапке советовали Дажо насо юзает, а теперь почему-то ее вырезали
Какие идешки!? ты охуел мальчик? открывай блокнотик и топ топ топ пальчиками. Ребёнок дауна, идешки ему подавай.
Ты запускаешь глобальный питон, а надо туториал энв
Я раньше тоже долгое время писал не используя классы.
Это было из за того, что я был самоучкой, в классах не видел смысла тем более что весь нужный мне функционал я мог реализовать через функции, а в классах эти self cls и прочая лишняя шляпа.
Но в один прекрасный момент, по прошествии лет я осознал - вот я знаю дохуя вещей, от туда, отсюда, отовсюду, всё по верхам и как следствие не знаю ничего толком. Я понял что чтобы овладеть делом, нужен академический подход. Взялся за литературу, методично прошел с самых основ и вкатился в классы.
И я пожалел что столько времени тянул. Человек существо которое мыслит абстракциями. Классы очень помогают формализовать через код эту нашу мыслительную особенность, структурировать логику. И я считаю что именно в этом их главная суть и вообще главная цель ООП.
На старый код мне теперь больно смотреть, хочется всё переписать с классами.
Я иногда пишу как раньше, но только когда нужно быстро сделать какой-то небольшой скриптик или маленькое приложение.
>Человек существо которое мыслит абстракциями.
Вообще если наука когда-нибудь ответит на вопрос чому людям нравится музыка, песни и в целом любая информация которая упорядочена в гармонической форме - тогда человечество приблизится к пониманию сути сознания.
Я вижу в этом сходство. Людям например нравятся стихи и музыка - это ни что иное как информация, запакованная в абстрактные и законченные блоки - куплеты, припевы, рефрены. Слова и звуки в этих блоках гармонично считаются друг с другом, продолжают друг друга и при этом несут общий метасмысл.
ООП и классы как частность - это то же самое от погромирования.
Такой кайф когда твой код упакован в прекрасные гармоничные блоки и всё работает как часы. Это буквально как песня. Функциональное погромирование тоже хорошо но это как рэпчик, причем русский. Кому-то нравится.
Есть кто пишет в редакторе кода, а не в IDE? Почему решили так поступить?
>кто пишет в редакторе кода
В каком редакторе кода? Ты имеешь в виду в проприетарном текстовом редакторе, коим является Sublime text?
Ну я пищу в Нотепаде++.
Всё это дело привычки. Пробовал в IDE - НИУДОБНА. А в нотепаде всё настроено, по одной клавише всё собирается, запускается. Грузится всё молниеносно, никакого лишнего функционала. Синтаксис подсвечивается хорошо, навигация по функциям, по файлам. Всё есть. Плохо чтоль? Хорошо!
Наверное главное преимущество IDE в управлении окружением и в дебаге, который замораживает среду в момент исключения и можно посмотреть в памяти все переменные что в них и откуда взялось. Но менеджить окружение лично мне не нужно, дебаг очень классный но всё равно это не пересилило удобство и привычку.
Да я вот и задумался, чтобы перейти, потому что тоже неудобно.
Тогда еще один вопрос. Сегодня над ним продолбался весь день, но так и не смог найти ответ. Я пробовал правда не в нотпад++.
В общем, у тебя есть проблема, что при переходе в метод объекта, тебе открывается весь список метод с похожим именем, которые определены по всему проекту, а не конкретно этот метод, который вызывается от объекта конкретного класса?
И второй вопрос, про автокомплит и документацию по аргументам. Сейчас вроде как показывает, но не для все методов, а только тех модулей, которые непосредственно есть в проекте, а не импортируемые из вне
Эти твои вопросы - индивидуальная настройка конкретно твоей среды.
>чому людям нравытсо музыка
Бо яна праўдзіць твае спадзяванні, калі паўторваецца запамятаны матыў. Праз гэта вызваляецца дапамін і робіць табе прыемна. Калі клясы робяць табе прыемна, ты праграміст-наркаман.
Перешел на Zed с VSCode. Понравилась, такой приятный редактор. VSCode почему то надоел, да и телеметрия не нравится, хотя нахрен я кому нужен.
И как переход дался? Тяжело было выучить шорткаты? Пока для меня это боль (именно шортакты). Хотя в целом работать комфортнее
Да я пока пару дней как юзаю. В принципе 10-ку важных шорткатов можно сказать запомнил. Сначала хотел на Vim, но это что то совсем забористое. Искал какой нибудь легковесный бесплатный редактор, поробовал Sublime, Notepad++, Geany. В одном коменте увидел рекомендацию на Zed, пересел на него. Понравился простой приятный дизайн, напомнил Atom, ну и шустрее конечно чем VSCode, Недельку-две поработать и мне кажется освоишь полностью. Хотя многих расширений из коробки как в VSCode не хватает, ну да ладно, не страшно.
Да я задумался, потому что пишу на пайтоне, а сейчас решил ради интереса посмотреть, что там на с++. А под него как оказалось нет адекватной IDE.
У тебя проект большой? Просто у тонны кода, и в IDE все же удобнее перемещаться по проекту, если надо поправить какой-то метод, класс. Но вроде как не критично.
я больше сетевик, у нас на серваках проги и виртуалки крутятся. Там в основном Java, XML и немного Python. Стоит обычный Notepad, на нем правим скрипты. Просто для своего рабочего проекта, мне что то захотелось что-нибудь "стильно, модно, молодежно", решил вот Zed попробовать. Для веба и скриптов пойдет, а вот как с ним в Легаси работать даже не знаю.
>что там на с++. А под него как оказалось нет адекватной IDE.
Eclipse, Clion, Visual Studio - не нравится?
>да и телеметрия не нравится
Вместо VSCode можешь использовать VSCodium. Это то же самое, но без телеметрии и собрано не микрософтом.
Eclipse точно нет, не понравился, когда учился на джаве еще.
Clion — платный же. Но по сути, тоже будет, что и pycharm.
Visual Studio — пробовал несколько раз, но тоже что-то постоянно в нем мешало.
Год учил джаву, началась тряска что дажва это сложно и вообще там суровые банки. а там суровые проверки и васькам там не место. короче испугался, страх овладел мной и я решил может начать быстро учить пайтон где не суровые банки и может быть будет проще.
Я совсем долбоеб или в этом что-то есть?
В целом у меня тряска сильная, нужно делать выбор, а с этим у меня всегда траблы ибо корзинка.
>Я совсем долбоеб или в этом что-то есть?
Да, совсем. Бесят люди, которые наслушаются всякую хуйню, слухи в интернете, что кто-то чёто спизданул, приходят и просят их обнадёжить/подтвердить/развенчать/отговорить. А вот хуй тебе! Блять мало ли в интернете ёбанных шизиков. Я же не обязан переубеждать каждого шизоида, которому чёто мерещится. В следующий раз нахуй пишите, откуда конкретно у вас та или иная инфа. Просто "какая-то бабка нашептала" это не ответ. Если ссылаетесь на какую-то инфу, то приводите источник. Например "по данным infoq" или "по данным ютуб блогера немчинского". А так, мне вот ответили анонимные васяны с двача - иди нахуй. Кто тебе ответил, у того и спрашивай.
Ты совсем долбоёб, поздравляю. Скорее всего ты ничего не выучил в принципе, раз не понял, что программирование везде одинаковое
Чувак, вернись к Джаве. Это просто инструмент для работы. Не бойся всяких проверок и прочей хуйни. Тебя СБ вначале только проверят (если конечно пойдешь в Банк работать) и на этом все.
>, что программирование везде одинаковое
Разве? Я сам не эксперт. Но мне показалось что "программирований" как минимум два:
1)то где известны входные данные и по ним получаются выходные.
2)то где полный набор входных данных неизвестен.
Вот компьютерная игра: мы ведь там нажимаем на кнопки, следовательно мы в определённые фрагменты программы подаём новые данные, которые при запуске у неё не было.
Что подразумевают под "программирование везде одинаковое" я не понимаю. Разное ведь!
> то где полный набор входных данных неизвестен
Ну и какой набор данных в компьютерных играх не известен?
> Что подразумевают под "программирование везде одинаковое" я не понимаю. Разное ведь!
Веб макаки крудошлёпы наверное имелись в виду.
мимо
>Разве?
ЕСТЕСТВЕННО! Везде плюс-минус одинаково. Типы-хуипы, классы-хуясы, циклы-хуиклы. От того что возьмёшь питон или джава, от этого классы или циклы исчезнут? Цикл фор он блять и в Африке цикл фор! Конечно, в тонкостях отличия есть.
Везде один и тот же ёбанный принцип:
1) Объявить хуйню - функцию/класс/тип/объект
2) Дать ему функционал - циклы/условия/события
3) Протестировать хуйню
4) Задокументировать хуйню
5) Двигаться к следующей хуйне
Если ты допустим делаешь ёбанный сайт, он же не превратиться в спутник или марсоход?
>Ну и какой набор данных в компьютерных играх не известен?
Как это "какой"?! Набор действий игрока неизвестен.
Игры, как и любые другие интерактивные программы, ожидают от пользователя ввод дополнительных данных, исходя из которых они выполняют один из своих внутренних функции.
Простая игра: на ввод ей подаются данные об уровне, действия игрока, а на выходе она выдаёт "картинку", которая отражает состояние уровня.
Нажал кнопку "вверх", программа среагировала, и перевела персонажа вверх. А нажал бы "вниз" результат был бы другой. Получается что своими действиями ты задаёшь данные программе, ведь на уровне ядра есть только системный вызов read, и нет никаких "дополнительных интерактивных вызовов". Так что технических различий между "подачей данных во время выполнения" и "подачей данных в начале игры" никаких нет. Но можно заметить что это принципиально разные виды программ. Ведь во втором случае, мы получаем результат ещё даже не дождавшись окончательного ввода, а после окончательного ввода мы ничего не получим. В первом же случае наоборот, после окончательного ввода мы получим результат, а до него ничего не получим.
>Везде плюс-минус одинаково. Типы-хуипы, классы-хуясы, циклы-хуиклы
На ассемблере циклов нет. На С нет классов. А на Make нет.. о боже... последовательности действий. Ведь make - декларативный язык.
Вот так незадача.. Что-то не клеится.
Если уж сводить все к одному, то можно все свести к ассемблеру и последовательности команд. Вот только в тот момент когда ты напишешь на ассемблере свой "мультиплексер", для параллельных процессов, то тебе уже придётся мыслить в категориях "другого программирования".
Почему ты так задрочен на ООП. Программировать ведь можно и вовсе без понятия "последовательность действий", на декларативных языках.
Так что ты меня не смог убедить что "программирование везде одно". Звучит просто как чванство технаря, который привык гайки крутить и думает что весь мир одна большая гайка которая крутится
Ну и кому он нахуй нужен, этот ассемблер! Да и вообще, не пизди. В ассемблере и в makefile циклы есть! Общего смысла не меняет. Ну окей, нет классов. Есть функции. От того что ты заменил классы на функции, программирование стало более низкоуровневым, пропали какие-то абстракции, всякие там штучки-дрючки, синтаксический сахарок. Люди стали больше текста писать. Там по сути всё тоже самое и осталось.
> Нажал кнопку "вверх", программа среагировала
Потому что это действие известно и ожидается?
> А нажал бы "вниз" результат был бы другой
Потому что это другое известное действие, которое ожидается?
Пишешь такой бэкенд, пришёл гет запрос, программа среагировала.
Пришёл другой гет запрос, результат был бы другой.
>В ассемблере циклы есть!
Где? jz это не цикл, это команда. Сама по себе она цикл не создаёт. На ассемблере циклы нужно самому пердолить, возвращаясь в начало каждого цикла, вычитая значение из регистра, и потом выполнять jz. Целых три команды вообще то. Это не цикл. И даже условных конструкций нет: нужно целых два goto чтобы из реализовать.
>>268155
>другое известное действие, которое ожидается
Ну так ты таким образом "подкидываешь" ей данные во время её действия. Игрок буквально висит на вводе и бесконечно вводит новые данные, которые меняют результат пока программа ещё не завершилась. В то время как неинтерактивная программа, просто выдаёт результат.
Хотя я так подумал, можно конечно всё то что пользователь вводит просто приплюсовать к началтным данным. Ведь наверное, игра может и сама в себя играть. Но хз, умозрительно рисуются разные концепты.
Выше ссылка с инструкцией loop для х86. Она сама проверяет условие.
Ну тогда в Zed поработай там посмотришь, зайдет или нет. Так то тебе по сути нужен блокнот и терминал. Эти все ide и редакторы кода очень схожи. Ну может VSCode - чемпион так как удобен огромным количеством расширений под каждую технологию.
Привет, ребята.
Нужен совет.
Я нахожусь в Германии и у меня есть примерно 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 но зато структурированная + с набором опыта выглядит достаточно неплохо. Но есть проблема, после подписания контракта в случае чего нельзя будет сменить компанию на этот период.
В общем буду рад любым вашим советам и опыту) Всем добра
Привет, ребята.
Нужен совет.
Я нахожусь в Германии и у меня есть примерно 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 но зато структурированная + с набором опыта выглядит достаточно неплохо. Но есть проблема, после подписания контракта в случае чего нельзя будет сменить компанию на этот период.
В общем буду рад любым вашим советам и опыту) Всем добра
>3 летняя учёба пусть за 1200 но зато структурированная + с набором опыта
В принципе этот вариант вполне приемлем если готов вести аскетичный образ жизни и перетерпеть эти 3 года. Так то время быстро пройдет, может и задачи будут интересные. Если хочешь связать свою жизнь с компами то можно выбрать этот вариант. Главное начни а там по-любому будут "окна" и возможности для дополнительного заработка.
Нас безопасники дрочат только по очевидным проебам в пентесте, но вот задумался, стоит ли почистить старые зависимости, которые уже не используются в проектах.
Перекатился в Германию
@
Чтобы сесть на жопу и сычевать за пекарней.
Вышел бы лучше на нормальную работу, пробзделся, немецкую траву потрогал бы.
Я бы на твоем месте реализовывал бы второй вариант. Учить ЯП в свободное от более реальных дел время и дальше. У тебя же учебная нагрузка и так большая будет, тут если только один ЯП учить - большие сомнения что ты был бы проф.пригоден через год, учитывая что ты полный нуфаг, а тебе там кроме ЯП ещё кучу всего надо делать и учить.
Единственное что имеет смысл делать в Дерьмании это работать, потому что там зп выше. А так это такая же блинолопатия, так что нах ты там сидишь без работы - я в душе не ебу.
как и на чём надо деплоить?
nginx + gunicorn?
и как вообще со статикой будут дела обстоять, надо ебаться или нет?
Да оно так кажется, что выше)
Обычный чел на обычной(почти всегда, тяжелой, т.к без перфект немецкого никуда не возьмут) - работе в месяц будет получать 2000-2200 евро.
800 уйдет на квартиру в лучшем варианте, зимой 1000
На продукты - 500, что бы 3 раз в день кушать, без ресторанов и прочего
Заправить машину - 200
Оплатить интернет/телефон/какие-то расходники еще 100-120
вот и получается что ты тратишь 800кв 500еда 200машина(до работы), 120 техника = 1620. Вот и получается что получишь ты в месяц в лучшем случае 380 евро на руки, которые сможешь "потратить на себя" - при этом будешь вьебывать за эти деньги целый месяц на ишак-работе.
Деньги вроде бы не маленькие, но учитывая что ты в Германии и тут все очень дорогое - то сам понимаешь, на что их хватит(толком ни на что).
Поэтому отсюда и вариант и желание выучить профессию, пусть на которой будут платить 3к через 3 года, но это будет профессия в помещении под вентилятором и не убивая свое здоровье на условной стройке/складе/
Без образования( моё тут не катируется - юр.фак) - всю жизнь тут будешь подай-принеси за 2000-2500(максимум)
Я конкретно про IT. Мне знакомый который во Франции пентестером работает, говорил что если работать в IT то лучше не в рабсиие.
Ты бы ещё поваром захотел стать потому что ты всю жизнь ешь или электриком потому что всю жизнь используешь электричество
Я буквально по этой причине электриком стал. Хз че не так.
Тебе в js
Как это будет в коде выглядеть, типо вот скрип выделяет окошко нейм, а для нескольких будет просто в цикле перечисление окошек и для каждого запуск функции с кликами ?
Всё можно. Только клики обычно это высокоуровневые сигналы апи, а у приложений бывает свое поведение, например приложение если не на переднем плане может не принимать клики по своей логике.
>Как это будет в коде выглядеть
Ну смари сверху кода будет импорт, потом два пробела, потом код, потом нудисы твоей мамки.
>в цикле
Лучше конечно сделать потоки или запускать каждый клик в субпроцессе, тогда они не будут друг друга тормозить. А если ты в одном цикле запустишь, то пока одно окошко будет обрабатываться другие его будут ждать.
На pythonanywhere.com залил простой кусок кода:
response = requests.post('https://api.myip.com', json={'key':'value'}, timeout=3)
print(response.json()['ip'])
Ошибка. На компе работает нормально, локально там код тоже запускается, а в инет выход вообще есть?
В этой теме полный ноль, понятно если деньги закинуть то все будет, но хотелось тупо потестить что да как.
Похоже ответ в этом, у пидаров белые списки:
https://help.pythonanywhere.com/pages/RequestingAllowlistAdditions/
Ну и есть бесплатная нормальная альтернатив кто знает?
Я бы для чего-то простого использовал облачные функции или gitlab CI. Ну или гитхаб.
Но если опыта нет, то много времени потратить придётся, скорее всего.
> сделать потоки или запускать каждый клик в субпроцессе
Ясно спс, а можно же написать скрипт который будет запускать другой скрипт для каждого из нужных мне окошек ? такое возможно в питоне ?
Дэдзік - гэта dedicated server, разумееш, гэта сапраўдны кампутар, што стаіць у спецыяльным памяшканні, займае месца. Табе ніхто яго не дасць. Забудзся на гэта. Выканаць свой гаўнакод ты можаш на розных пляцоўках, напрыклад на https://replit.com/@ploomum/SadRespectfulMoto працуе.
Пользователь отсылает сообщение. Этот апдейт обрабатывается одним хендлером, а потом передается дальше и обрабатывается другими.
Типа:
@Хендлер(без фильтра)
функция ответить_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("Нет ответа")
Помогите пж доделать эту херь
если что у меня есть Яндекс облако, в котором могут быть сохранены функции для алисы
Я вообще не разбираюсь в этом вашем кодинге, но мне моча ударила в голову, чтобы реализовать такой прикол
У меня есть локальная 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("Нет ответа")
Помогите пж доделать эту херь
если что у меня есть Яндекс облако, в котором могут быть сохранены функции для алисы
Что тебе непонятно, долбоёб? У тебя первый хендлер без фильтра, он принимает любые сообщения.
3400/10-8
340000000000.0
почему так?
почему не 0.000000000034 ?
Если сделать import math, то надо чтобы функцию использовать явно указать названии модуля откуда она, типа math.sqrt()
а если сделать from math import * и таким образом все функции импортировать, то уже не нужно
Наверное в этом есть какой-то смысл, просто я не понимаю
Вообщем явное "import math" лучше не явного "import ".
Но если импортировать надо много то можно использовать "import ".
Я вот не зная о .replace() два цикла нагородил, чтобы пробелы из строки убрать
Нихуя. Вешаем на два роутера: первый без фильтра, второй с фильтром.
Если сообщение не подходит под фильтр - то оно принимается первым. Если подходит - вторым. Только вторым. А мне надо чтобы оно прошло через первый тоже.
Так что ты сам долбаеб и тебе даже вопрос мой не понятен.
Сначала вопросы про принципы ооп; вопросы про всякие конструкции, декораторы, итераторы, контекст менеджеры, зачем это нужно, как сделать свой, какие дандер методы и проч; какой нибудь вопрос-наебка с мутабельным дефолтным аргументом; поверхностная скука про 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() немного ускоряет/оптимизирует код.
Однако, в работе этих методов всё-равно нужно разбираться
Когда дампаю в ямл, возникают какие-то ебучие записи, начинающиеся с двух восклицательных знаков, которые при десереализации выдают ошибку.
Откуда эта хуйна берётся?
Как сделать, чтобы её не было?
Сам нашёл. В строке 35 нужно метод to_dict вызывать, раз уж я его сделал.
Пик-1, я хочу понять, что делает компьютер, когда работает этот генератор. И что вообще такое этот ваш генератор?? Хочу посмотреть, куда прыгает компьютер, когда этот ваше генератор работает, хочу посмотреть где хранится старое значение месаги, в каком регистре сохраняется адрес на новую область памяти, когда шифр Цезаря "начинает свою работу", и что происходит со старым значением месаги????
Пик-2, в общем, цель такая, чтобы понимать эти ваши высокоуровневые "фишки", и читать эти ваши высокоуровневые "тексты" так же, как пик-2, в котором всё чётко и ясно разложено по полочкам.
Поэтому прошу совета насчёт лит-ры по дизассемблу Пайтона, либо что нужно делать, чтобы дойти до понимания этих ваших высокоуровневых "текстов".
Я так понял в питоне только и есть что листы, туплы (и вся стандартная залупа дальше по списку), массивы через модуль стандартный, и dequeq. А все эти стаки, очереди, linked листы, я всё это сам должен делать и это не отдельный тип хранения данных, а просто логика как я работаю с ними? Типа хочешь себе стак, то просто делай dequeq и добавляй в него данные в конец, а бери в начале, вот тебе и стак? А если будешь брать в начале, то хоба, у тебя теперь очередь (надеюсь правильно пишу русские названия)?
Ещё в статье какой-то писали так, что linked листы чуть ли не базовый тип, прям база база, это знать надо, а в другой по питону пишут, что они не нужны в питоне, можно только по приколу разве что самому(!) их сделать, если тебе интересно ковыряться с этим
Это не набор последовательных ячеек памяти, это какая-то "разнобойная" мешанина из ячеек памяти!! Причём удивительно то, что букву 'l' он хранит всего в одной ячейке (пик 3-4).
Как я понимаю, что каждый элемент строки он сохраняет куда попало, а затем берёт указатели на эти все "куда попало" и, мб, схороняет их в массив, оттого, мы можем обращаться по индексам к элементам строки.
Пик-1 - так яснее.
Пик-2-3 - та же хрень, если строки разбить на элементы и сделать из них список.
Причём, если делать таким образом список, состоящий из цифр, то этот список он хранит последовательно, только одна ячейка для одного элемента списка занимает 48 байт, Карл (пик-4)!!! Что он туда сохраняет? Тайны Массонской ложи? Гей-порно в 48р???
А теперь, аноны, ещё более удивительные вещи:
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'.
Вот об этом (пик-1) 3-й пункт моего предыдущего поста.
Теперь мне думается, что строка в Python это не последовательно расположенные ячейки памяти, а тупо массив указателей на вшитую в Python таблицу символов. Зачем и почему хз!! Зачем пиздят в учебниках и в тырнетах о том, что строка это последовательно расположенные ячейки памяти - хз!!! ЕБУЧИЙ ЗАГОВОР!!!!!!
Если строка в Python это массив указателей на вшитую в него таблицу символов, то как тогда выглядят слайсы? Получается, что слайсы выглядят типа пик-2?
Так вроде питухон строковой объект каким-то особым образом хранит чтобы он в памяти лишнее место не занимал. Типа если ты создашь массив каждое значение в котором будет строка "huy" у тебя памяти не хватит, а так они все будут ссылаться на одну и ту же строку. Но это не точно, мне эта тема вообще не интересна была я краем уха что-то такое читал когда пытался невпихуемые питонические типы данных как-то запихнуть в память. В итоге просто взял бд
>Так вроде питухон строковой объект каким-то особым образом хранит чтобы он в памяти лишнее место не занимал.
Ну вот, если в первом варианте сбора рандомной строки можно было ссылаться на непонимание работы ссылок, то даже в этом вариант (пик-1-2), когда рандомная строка никакого отношения не имеет к исходной строк, подобные элементы (т.е., например, буква 'a' в исходной строке и буква 'a' в рандомной строке) разных строк "занимают" одну и ту же ячейку памяти.
Поэтому действительно, строки это просто массивы указателей на таблицу символов. Конечно, наверняка, это как-то по-другому называется, но я хз куда копать - везде пишут, что это последовательные ячейки памяти. Так-то, конечно, массив это последовательные ячейки памяти, но это не просто массив символов, как это пытаются представить в книгах и тырнетах, а именно массив указателей на ячейки определённой таблицы символов.
Забавные штуки позволяет делать этот ваш Пайтон.
Короче, логически строки это действительно массивы указателей на объекты (в данном случае символы), но со своими приколами. Указывают разные элементы строки на один и тот же участок памяти, потому что это фишка Пайтона (называется интернирование), которая позволяет экономить место, типа чтобы не плодить одни и те же объекты (одни и те же буквы, например) в памяти, Пайтон одним и тем же элементам присваивает один и тот же адрес, который указывает на один символ.
Диды основатели знали что делали. Если так сделоли, значит это оптимальное сочетание сложности алгоритма и занимаемой памяти, не бухти.
Тебя спросили что такое классы,но ты и тут обосрался
Ты для начала изучи основые, матчасть вообще и базу по языками и всему прочему, что и для чего. А потом такие глупые вопросы сами собой отпадут.
Дизасемблерщик хуев.
Ты чего так сильно возбудился то, педик??
Услышал где-то, что дизассемблят только компилируемые языки, а интерпретируемые нет?
Педик, посмотри на пик! Видишь, справа на картинке, педик? Это называется байткод Пайтона. Но, если считать дизассемблом изучение этого байткода, то это просто шутка какая-то, потому что сам этот байткод написан на другом языке (скорее всего на Си). Чтобы понять внутреннее устройство Питона нужно читать именно тот код, который есть суть байткода Пайтона, педик, шурупишь??? Вся эта магия "лёгкости" Пайтона, на самом деле, неимоверный труд линкеров и лоадеров, чью работу и можно изучить и понять, если задисассемблить не в "потешный" байткод, а в настоящий ассемблированный код. Ну либо читнуть исходники этого байткода.
Вот я и спрашиваю, педик, где можно читнуть эту литературу, в треде, где люди должны были заинтересоваться внутренним устройством языка, на котором кодит весь этот тред. Педик!
> где люди должны были заинтересоваться внутренним устройством языка, на котором кодит весь этот тред
Те кто интересуются кодом интерпретатора в ужасе от гвидокостылей сваливают на другие языки.
Питон не тот язык в потроха которого лезут.
Шизик, твой слог читать невозможно, таблетки прими.
Питон - это язык для того, чтобы напохуй что-то написать быренько, всем похуй как это работает, все поебать что там внутри происходит, интересуютя этим только разработчики интерпретаторов этого говна, которые все пытаются там ускорить это неускоряемое говно с GIL'ом.
Никто в серьез не пишет на питоне что-то большее, чем прототипы и небольшие приложения.
Ты пытаешься косить под умного, будучи совсем глупым, еще и с надменным стилем написания "в этом вашем". Думаешь ты пришел в этот тред и все такие удивились что ты смог на си написать какую-то залупу из 10 строк? Уебок, тут сидят дяди которые на си десятки лет писали и видели миллионы строк кода на ассемблере. А на питоне пишут, потому что это быстро и удобно для определенных целей. Лично мне вообще похуй как там че питон делает внутри, абсолютно, я даже не задумывался об этом никогда, как и пологается при использовании языков такого высокого уровня. Если я захочу побыть байтослесарем, я пойду на С++ напишу что мне нужно, вот там да надо знать все как внутри работает, потому что у языка абсолютно другая целесообразность применения. А тут нет. Короче иди нахуй дауненок.
>Никто всерьез не пишет на питоне что-то большее, чем прототипы и небольшие приложения.
>даже не задумывался об этом никогда, как и пологается при использовании языков такого высокого уровня.
Ты сам себе противоречишь, педик!!!
Как ты собираешься писать прототипы, чтобы потом реализовывать их, допустим, на Си, не понимая, как эти прототипы устроены внутри?
>Никто в серьез
Всерьёз, глупый школьник!
Педик, какие-нибудь вразумительные аргументы будут?
Давай так, чтобы мне понять, можно ли с тобой вести продуктивную беседу, ответь, пожалуйста, на вопрос:
Какая величина больше - километраж увиденных и опробованных твоею мамкой больших, чёрных хуёв;
или, как здесь, >>278025
>видели миллионы строк кода на ассемблере
увиденных дядьками строк на ассемблере?
Какие тебе аргументы, ты несешь дичайший бред сумашедшего. Нахуя мне с тобой вообще дальше разговаривать, иди со своим лечащим врачом разговаривай лучше, анскил.
Понятно! Только абсолютные шлюхи могут вырастить так возбуждённых педиков, как ты.
Это "писать типы" на деле просто "писать типы" больше никакого от них толку нет, кроме лишней писанины, интерпретатор тебе ошибку не выдаст и не ругнется даже никак. Я заебался сейчас после рефакторинга небольшого отлавливать баги и не состыковки кода.
Мое приложение упало раз 15 прежде чем я пофиксил все недочеты.
И большая часть из них была, типа перенес функция в класс - забыл дописать self функция падает, тоже самое и с переменными класса.
Немного поправил функцию которая должна возвращать строку с путем, она в некоторых случая стала позвращать Path из-за чего падало все непредсказуемо, бля ну это пиздос, такихх ошибок может быть тысячи, которые в статически типизированном языке тупо невозможны в рантайме и все вылезут на этапе компиляции, либо на этапе подсфетки кода в редакторе, но в питоне ты их заебешься отлавливать в рантайме. Я уже 10 раз пожалел что начал на питоне свою хуйню писать. Хотя там либа только для питона нужная мне. Но уж лучше запускать питон субпроцессом для доступа к данным сервиса через эту либу из статически типизированного языка, чем отлавливать кучу рантайм багов. Ну его нахуй короче. Питон это язык для программ не больше 400-600 строк.
>интерпретатор тебе ошибку не выдаст и не ругнется даже никак
Чел... типы не интерпретатором проверяются
Никогда не понимал этих нытиков, которые что-то сложнее хело ворлд не могут написать без святой типизации, которая им сопельки вытрет. В питоне есть аннотация типов, что тебе ещё нужно, чорт. А если ты забываешь self дописать, ну что поделать - обосрался с синтаксисом, скил ишуе.
В pandas команда df['date'].astype('datetime64') юзает же формат YYYY-MM-DD по умолчанию? Формат явно прописать можно?
Я знаю как это делать через pd.to_datetime, мне интересно именно по методу astype.
Да нет, просто язык говно by design. Такое же говно было и с джабаскриптом, который по итогу превратился в строго типизированный тайпскрипт потому что все поняли что анрил что-то сложное писать на говне без типов. Вообще питон изначально довольно говенный язык, просто баблишко и влияние корпораций решают, а так же простота использования и вката. Любая обезьяна которая еще вчера бегала с камнем в руке сейчас может выучить питон и гордо называть себя "РАЗРАБОЧИКОМ" очка тут в питоне это и плюс и минус, простота использования оборачивается другой стороной медали в виде сложности написания реальных приложений сложнее пары сотен строк.
Если один человек может допустить кучу багов отловимых только в рантайме, то сколько сможет допустить комманда разработчиков? И вопрос тут не скила, а вопрос безопасности языка. Для меня питон такой же небезопасный как и си, си даже может будет побезопасней, все таки типизация какая никакая там есть, нету эксепшенов и есть goto, который в случае ошибки может перекинуть нас на блок освобождающий ресурсы, главное соблюдать все правила, но с питоном хоть тут и невозмоно мемори лики, очень легко выстрелить себе в ногу и пока ты не прогонишь все бранчи своего приложения в рантайме ты никогда не поймешь есть ли там баг или нет. Единственное отличие в том, что на питоне куча высокоуровневых либ котоыре в пару десятков строк могут тебе сделать то, что ты хочешь, где на си или даже С++ тебе бы пришлось писать кучу бойлерплейта и сотни или тысячи строк. Поэтому питон должен оставаться в своей естественной среде в виде скриптового языка для консольных утилит, которые можно написать на коленке.
Всё о чем ты разнылся это всего-лишь помощь в дебаге и отладке, которую дает типизация. В питоне если ты не можешь что-то больше 100 строк написать не обосравшись с типами у тебя есть аннотация типов, которая используется IDE, который тебе каждое использование переменной проверит и если она используется не соответсвенно заявленному типу - подсветит ошибку.
ни разу не погромировал, читаю ща питон не для погромиздов. уже смог ужать код из начала книги в четыре строчки на зависть индусам
Представь мое ебало когда внезапно все
if N
Начинают давать false, когда N==0. Это пиздец.. Пришлось пробежаться по всему коду и заменить на
if N!=None
Я тоже его начинал как не-программист, да и сейчас уровень у меня околонулевый.
По началу реально просто. Условные конструкции, циклы и функции идут как маслице - все очень дружелюбно, просто и понятно.
Подозревать неладное начинаешь на переходе от функций к классам и иттераторам.
Начинается все с вопросов уровня "какого хуя в одном месте функция библиотек принимает аргумент в скобках, а в других идет как параметр через точку" и "какого хуя функция ничего не возвращает, при этом переменные класса список меняются, а перменные класса инт - нет". И начинаются вопросы, что там вообще происходит с хранением данных, наследованием и областью видимости имен.
Плюс довольно хуевый дефолтный упаковщик pyInstall, который 20 строк кода пакует в екзешник, который может весить и 5 мегабайт и все 80. Как будто он всю ветку зависимых библиотек полностью засовывает, лол. Еще и работает через раз. Правда там и другие упаковщики есть, я пока еще не все варианты опробовал.
Все такие моменты я просто принимаю как данность и просто стараюсь запомнить. Ща набегут, обзовут меня быдлом, дебилом, дегенратом, котоырй не хочет учить матчасть, но я в рот ебал, и мне это нахуй не надо, так что сами идите нахуй.
Вообще я питон даже не как язык программирования воспринимаю, а как компьютерный мультитул, в том числе и для домащенго пользования. Переводить pdf-ки в docx, компрессия фоток, API, какая-нибудь несложная считалка которая автоматом дописывает текст для типовых отчетов, или наоборот программа, которая ищет в сотне текстов какое-нибудь слово, и выводит по 2 предложения до и после, что-нибудь такое. Недаром в репозиториях лежит 130к библиотек для него.
До этого немного писюкал на паскале в школе с очень смутным пониманием, в университете С++ блядский, который я вообще не вкуривал и делал как-то по аналогии информацию тогда просто не умел искать нормально и все. Питон первый язык от которого не тянет блевать. Только regex гумозный, надо будет его как-нибудь задрочить, набить руку просто.
Я тоже его начинал как не-программист, да и сейчас уровень у меня околонулевый.
По началу реально просто. Условные конструкции, циклы и функции идут как маслице - все очень дружелюбно, просто и понятно.
Подозревать неладное начинаешь на переходе от функций к классам и иттераторам.
Начинается все с вопросов уровня "какого хуя в одном месте функция библиотек принимает аргумент в скобках, а в других идет как параметр через точку" и "какого хуя функция ничего не возвращает, при этом переменные класса список меняются, а перменные класса инт - нет". И начинаются вопросы, что там вообще происходит с хранением данных, наследованием и областью видимости имен.
Плюс довольно хуевый дефолтный упаковщик pyInstall, который 20 строк кода пакует в екзешник, который может весить и 5 мегабайт и все 80. Как будто он всю ветку зависимых библиотек полностью засовывает, лол. Еще и работает через раз. Правда там и другие упаковщики есть, я пока еще не все варианты опробовал.
Все такие моменты я просто принимаю как данность и просто стараюсь запомнить. Ща набегут, обзовут меня быдлом, дебилом, дегенратом, котоырй не хочет учить матчасть, но я в рот ебал, и мне это нахуй не надо, так что сами идите нахуй.
Вообще я питон даже не как язык программирования воспринимаю, а как компьютерный мультитул, в том числе и для домащенго пользования. Переводить pdf-ки в docx, компрессия фоток, API, какая-нибудь несложная считалка которая автоматом дописывает текст для типовых отчетов, или наоборот программа, которая ищет в сотне текстов какое-нибудь слово, и выводит по 2 предложения до и после, что-нибудь такое. Недаром в репозиториях лежит 130к библиотек для него.
До этого немного писюкал на паскале в школе с очень смутным пониманием, в университете С++ блядский, который я вообще не вкуривал и делал как-то по аналогии информацию тогда просто не умел искать нормально и все. Питон первый язык от которого не тянет блевать. Только regex гумозный, надо будет его как-нибудь задрочить, набить руку просто.
выколи глаз, pep8 тебе в помощь
Не видит установленные пакеты.
Кеш валидировал, в %APPDATA% и %LOCALDATA% всё удалял, полностью сносил и заново ставил - не помогло.
Хуясе, я думал это только у меня траблы с пайчармом, потому что на 7 винде сижу. Спасибо Билу гейтсу за вскоде, который без лишних вопросов цепляет pip из терминала.
Я тебе по секрету скажу во всех языках базовые конструкции одинаковые циклы, ветвления, переменные, арифметика, функции, структуры Слегка отличаются синтаксисом и сахарком. Даже классы, это, по сути, обычная структура данных плюс несколько функций для работы с ней, плюс всякий сахарок.
И все программирование состоит из этих базовых конструкций, никакой магии нет. В любом языке, сделать то, что у тебя на пикче элементарно. А вот сделать из этого сложные системы -- это уже задача.
Это ты еще про генераторы не читал сокрощальщик
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
минусы?
Блять, у меня реально опухоль в мозгу или сифилис мозга, я не знаю. Как это сделать как нормальный белый человек? Почему я могу придумать только какое-то дерьмо на 100 строк. Это же точно решается аккуратно и нормально строк за 10. Придумал два варианта, оба ублюдское говно.
https://www.online-python.com/TckJHlmwvb
Коллеги, подскажите плз вопрос по камере HikVision iDS-TCM203-A. Не могу разобраться, как с неё вытянуть номер автомобиля
https://stackoverflow.com/questions/79141957/how-to-capture-car-license-plate-by-using-hikvision-isapi-ids-tcm203-a-camera