Встречаем новый революционный Питон 3.13. Питон встаёт на путь избавления от GIL. Подключают JIT технологии. У нас появляется надежда догнать и перегнать C++. Или хотя бы Rust/Go
Предыдущий: >>3187471 (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
/thread
Ты застрял в нулевых, попробуй посмотреть что-то за пределами своего мирка.
Спасибо!
Разбей на 3 и можно
Через Sentry trace view наблюдаю следующую картину - пик 1.
При каждом запросе к бэку происходит коннект к БД, который отнимает 80% времени. Включал пулер от алхимии, оставлял только ПгБаунсер - нихуя не меняется. В какую сторону смотреть и что гуглить?
Стек: Алхимия 2.0, asyncpg, PostgreSQL 16, python 3.12.
Я вот, к примеру, умею создавать окружения через venv. А Poetry, я так понял, больше нужен для создания пакетов под pip, чем для работы с виртуальными окружениями.
То есть зачем мне `pyproject.toml` если есть `requirements.txt`?
На питоне постоянно пилю что-то для души, да и на текущем месте частенько его для анализа данных юзаю
>Питон - язык для написания 100 строковых утилит, не более
Правильнее сказать, что питон предназначит только для написания программ. Написанное невозможно читать и изменять, только дополнять.
.NET рынок в РФ сдох, конкуренция высокая, вакансий мало, зп низкая, область применения душная, сам ЯП многословный и непрозрачный
Там путь один - красноглазить бэк в коллективе душных скуфов
Я скорее всего скоро начну сисярпить в корпорации непосредственного зла. Уже предвкушаю хелло ворлд который полторы секунды запускается.
Че нынче по зп?
3 года - коммерческая разработка на последнем месте работы, до этого были стартапы и фриланс
Прогаю я уже лет 8, начинал вообще с Си
Питон на текущем месте работы - второй ЯП, да и в куче пэт-проектов, в т.ч. коммерческих и командных я юзаю именно его
.NET намного обширнее, чем питон и сопутствующие технологии, причём половина вообще пересекается, не вижу проблемы в том, чтобы переходить на этот стек с понижением грейда
.NET быстрее, чем тот же Python, да и бэк на нём вроде даже быстрее гошного
По зп, хз, от грейда зависит, но процентов на 10 ниже, чем на питоне и на 20, чем на джаве, ну, у синьоров-помидоров вроде как и везде
Готовься к куче абстракций ради абстраций и DI-помойки, ну и к охуительному в своей убогости интерфейсу VS, хотя, если есть возможность, то сразу на райдер перекатывайся
Та норм, я скомпилил omnisharp и на емаксе его запустил. Полет нормальный удалил все к хуям.
Но dotnet run который тормозит это конечно пушка. С 2017 года ишью висит, и они такие "мы увеличи производительнность! Было 3 секунды, стало 1.3".
Объясните мне в чем прикол DI? Это такой фенси способ сказать что в функции можно передавать параметры?
DI - штука, которая реализует IoC, типа, у тебя есть контейнер с гновном, ты в него регаешь всё-подряд, а там он через рефлекшон сам подсовывает зависимости куда надо и собирает тебе обьекты, всё в целом круто, до тех пор, пока туда не приходится лезть, или отлаживаться
Ну типа того, хотя, матеша, которую я юзаю, не используется в дефолтной аналитике, я скорее обработкой сигналов занимаюсь
В любом случае, матешу заботать не сложно, даже проще чем сам питон, если бы это потребовалось
IoC ваще нужен для солида, типа ты отдаёшь менеджинг зависимостей на уровень выше, т.е. у тебя их регает не класс, который потом их же и юзает, а какой-нибудь чел, который чисто за эти зависимости отвечает перекладывание ответственности, от которого легче не становится, хотя, кто-то говорит, что благодаря этому тестировать код легче, но я хз
Любопытно что каждый ответ вводит новый термин.
Солид это SOLID? https://www.youtube.com/watch?v=7YpFGkG-u1w
> типа ты отдаёшь менеджинг зависимостей на уровень выше,
Ну то есть вместо того чтобы дернуть глобальную db.Shit() мы получаем db в виде параметра или как это на практике то выглядит?
SOLID - свод принципов для написания читаемого и поддерживаемого кода(на который обычно все забивают болт, а если не забивают, то получается еще хуже)
Ты отчасти прав, на практике это выглядит так:
У нас есть есть класс Shitter, которому для работы нужны ShitFactory и ShitLogger, мы можем создать инстансы этих обьектов в самом классе Shitter, но это нарушит принцип единой ответственности, т.к. какого хера класс Shitter должен создавать логгер, если его задача срать говном?!?!?!
В итоге куда лучше будет сразу передавать инстансы ShitFactory и ShitLogger в конструктор класса Shitter, чтобы он просто юзал их, но не создавал.
И тут возникает вопрос - а кто, собственно должен тогда создавать эти зависимости?! Ну, тут несколько вариантов, этим кем-то может быть класс, который управляет нашим Shitter`ом, какой-нибудь ShitterManager, но если у тебя таких классов дохуя, а их зависимости повторно юзаются, то чтобы всё это говно удобно менеджить можно заюзать DI - контейнер, в который ты просто регаешь ShitFactory, ShitLogger и Shitter и он сам магически поймет, что чтобы собрать Shitter нудны ShitFactory и ShitLogger
Вот вроде норм статья: https://habr.com/ru/companies/ruvds/articles/776768/
Смотря что именно тебе не нравится
Всегда можно заюзать какой-нибудь конвертер типа https://pypi.org/project/pyhtml2pdf/
Но это подойдет только если на странице нет элементов, которые подгружаются динамически, обеспечит неплохую скорость
если на странице защита от ботов, то можно заюзать селениум, накрутив на него всякого говна типа undetected chromedriver
Что именно тебе в pyppetteer не нравится?
Не, такие просто конвертеры не канают, надо именно скрин живой страницы из браузера. В паппетире криво получается, хотя я увидел, что он депрекейтнулся и они советуют playwright, пока его ковыряю на пару с гопотой, вроде получше уже.
strict = true
disallow_any_unimported = true
disallow_any_expr = true
disallow_any_decorated = true
disallow_any_explicit = true
disallow_any_generics = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
disallow_untyped_decorators = true
Теперь мне нужен парсер json. Подтягиваю стандартный модуль json. Перехожу по определению json.load, и вижу, что это вовсе не стандартная библиотека, а какой-то typeshed (сторонний модуль, предоставленный моим IDE). Кроме того, почему-то этот json.load возвращает Any вместо object, и теперь mypy орет, если не обернуть вызов в typing.cast или не указать аннотацию тут же при вызове как : object.
Теперь мне нужно подключиться к PostgreSQL. Поставил asyncpg. У asyncpg нет аннотаций типов. Вместо этого путем проб и ошибок через параметры запуска mypy удалось подтянуть какой-то asyncpg-stubs. В стабе функция create_pool почему-то возвращает Optional[Pool] вместо Pool, что противоречит исходному коду asyncpg, но мой mypy это с удовольствием съел и попросил добавки assert pool is not None.
Зачем это нужно, если подсказок типов нет даже в стандартной библиотеке, а те что есть, могут быть ложными, при этом удовлетворяя статической проверке?
Помню, как много лет назад тот же Pycharm охотнее предсказывал типы и показывал автокомплит имен без аннотаций. С приходом аннотаций все забили хуй на старый питон?
Глянь видео в >>285772 если еще не.
В общем получается что единственное чем это отличается от любого другого языка, где ты точно так же просто передаешь параметры (например в гошечке ты можешь в контекст добавить любое свое говно и оно будет доступно везде, куда этот контекст передается), заключается в том, что магическая коробка через рефлекшн выясняет какие нужно параметры передать в метод и подставляет их сама из того что ты там где-то зарегал?
правильнее перекатываться в Го, если более-менее с сетями дружишь
зарплаты выше, хрюши готовы отсасывать, работа есть не только в рашостане, а во всём мире. Сам язык может и говно, но люди как-то привыкают.
Я тут только что установил себе на прыщи дотнет. Создал hello-world и сделал dotnet run. Полторы секунды. Этот кал просирается полторы секунды. На хелло ворлде. И эти люди что-то о го говорят. Пиздец.
маша хлеб,молоко 250
миша мясо,мука 100
нужно чтобы стали
маша хлеб 250
маша молоко 250
миша мясо 100
миша мука 100
пример выдуманный, разделитель в данном случае запятая
вот так сделал:
data['Продукты'] = data['Продукты'].apply(lambda x: x.split(','))
data = data.explode('Продукты')
Панда про датафреймы. Такой себе мини-эксель. А сквиртлайт это модуль для доступа к бд.
@
Successfully installed pyside6-6.7.3
@
from PySide6 import...
@
ModuleNotFoundError: No module named 'PySide6'
@
pip install PySide6
@
Requirement already satisfied
@
pip uninstall PySide6
@
pip install PySide6
@
from PySide6 import...
@
ModuleNotFoundError: No module named 'PySide6'
@
Повторить, пока не начнётся бугурт
Причём голый питон эту хуйню видит, а всякие там пайчармы и вскоды, СУКА, ГОВОРЯТ, ЧТО НЕТ НИКАКОЙ БИБЛИОТЕКИ... Что делать, аноны, не подскажите?
С дивана
что-то мне кажется что дело в venv ( https://docs.python.org/3/library/venv.html )
Там наверно часть поставилась в локальную venv, особенно если ты не из терминала линуха работал, а из терминала ide.
Начни код с import pip; pip install
Если и это не поможет, проблема в либе и руках. Если работает - проблема в ИДЕ
Рабочий ноут на линукс минт, а на свой бытовой вторую систему лень ставить
Да, всё так.
ХЗ как контекст в гошке работает, наверное что-то типа редакса в JS?
Вообще, скорее всего DI контейнеры - попытка найти баланс между приватностью и гибкостью, в и тоге получился кал
у меня тоже была мысль загнать всё в бд и там обрабатывать, но экспортировать постоянно каждый шексель файл такое себе занятие. а pandas позволяет очень круто обрабатывать данные табличные и не надо каждый раз создавать разные базы данных для разнотипных файлов
>>285767
>>285770
>>285772
>>285781
>>285973
>>286872
Эти ваши DI-хуяй и IoC-хуи абсолютно ненужное говно. Вместо того, чтобы дрочить свои техники пробрасывания пар (указатель на функцию, данные для функции) через сотни стековых кадров, используйте глобальный статический указатель на структуру со всеми "системами", работающими в вашей программе.
Вы ничего этими Паттернами-Хуяттернами не добиваетесь, абсолютно ничего. В типичном ПО >99% кода очень специфично, его невозможно переиспользовать, даже если обмазать свинью SOLID помадой.
Прекратите тратить свое и чужое время на ерунду.
>переиспользование
Что-то как-то ты тухло ДИ понимаешь, на уровне ждуна
>тратить время
В нормальных фреймворках ДИ из коробки бесплатный
>используйте глобальный статический указатель на структуру
Твоя глобальная структура не решит проблему построения графа зависимостей. С ДИ нет разделения на зависимости и реципиенты - все сервисы и есть те самые зависимости и они одинаково в ДИ попадают и одинаково из него достаются через конструкторы.
>невозможно переиспользовать
Постоянно переиспользуется инфраструктурный код. Те же репозитории с запросами. Или обертки вокруг чужих либ.
>Что-то как-то ты тухло ДИ понимаешь, на уровне ждуна
Какую проблему в программировании решает ДИ, как ты считаешь?
>В нормальных фреймворках ДИ из коробки бесплатный
"Я покрыл свою голову упругим материалом чтобы установленный у меня на лбу молоток на пружине не оставлял больших синяков когда я забиваю гвозди".
>Твоя глобальная структура не решит проблему построения графа зависимостей.
Выдуманная проблема. Что такое "граф зависимостей", и зачем его строить? Ты пишешь пакетный менеджер для python? Давно пора, потому что pip ужасен.
>Постоянно переиспользуется инфраструктурный код. Те же репозитории с запросами. Или обертки вокруг чужих либ.
Что такое "инфраструктурный код", и почему для него нужно "строить граф зависимостей" с помощью Объектно-Ориентированного Паттерна Инъекции Зависимостей? Такой же вопрос для "обертками вокруг чужих либ".
Контекст это прост обычный объект, который положено первым аргументом передавать вниз по стеку. Обычная конвенция, никакой магии. В нем хранятся всякие таймауты и можно любое говно прицепить.
Единственный кейс где вся это еботня необходима кмк, это для тестов.
Впрочем, не ясно что мешает создать этот глобальный контекст для прогона тестов. Разве что если они выполняются многопоточно, тогда это вероятно проблема.
Я предпочитаю прокидывать всякие глобальные сервисы как параметры, просто потому что тогда я вижу что функции нужно в одном месте. Впрочем, в реальности нужно обычно 2-3 сервиса (база, логгер, инфа о сессии), остальное ситуативно.
Я делал и так, и так, и не могу сказать что какой-то метод сильно лучше или хуже.
Согласен, все эти "паттерны проектирования" созданы для криворуких одноклеточных макак, типа как методичка как надо программировать, если своего мозга нету. И вот если вы посмотрите где в основном это с изобилием используется как раз таки на макакских языках типа джавы и дотнета, чтобы лоускильные дауны которых заменяют одним днем подбирая первого встречного с улицы, сразу сели за комп и хуячили так же как написано в методичке в такт с остальной командой выдрессированых обезьян.
Они еще потом обмажутся скрамами и будут дрочить в кружке друг на друга.
Короче все это для быдла низкоквалифиционного.
Для меня как на плюсовика с многолетнем стажем, это все выглядит как блевотина нахуй не нужная, у нас так нигде не пишут, чтобы обмазываться паттернами ради паттернов. Это используется только где необходимо и далеко не всегда в таком явном стиле методички.
Ну хуле взять, большинство кодеров овцы безмозглые, которым нужна упряжка.
Т.к. все эти паттерны это фаззи набор присказок, а не конкретное руководство к действию, мне кажется что они создают гораздо больше проблем в описанном кейсе, чем решают.
Любопытно, что в книжке банды четырех кресты были одним из основных языков для описания паттернов.
>Единственный кейс где вся это еботня необходима кмк, это для тестов.
Могу сказать, что это действительно помогает в написании тестов со 100% изоляцией всех маленьких индивидуальных кусочков кода, с возможностью простого параллелизма в одном процессе, выполняющем тесты.
Однако, в моей практике это сомнительное занятие, и в большинстве случаев ПО тестируется или целыми изолированными подсистемами, или целиком. В очень редких случаях действительно можно отделить значимый объем кода в независимый "модуль" для которого можно писать отдельные тесты.
Интересный код, который действительно стоит тестирования, как правило взаимодействует со всеми подсистемами, и сами подсистемы между собой взаимодействуют. Писать для этого юнит-тесты с тестовыми дублями - это пустая трата времени. Такие тесты проверяют сами себя, а не конечный продукт.
А теперь попроси его написать такой же список, только с аргументацией в обратную сторону. промпт в студию
У меня ровно такой же опыт. Я 10 лет в разных проектах, в разных командах пытался внедрить тесты, и везде, каждый раз стоимость внедрения конская, а выхлопа на три копейки.
Юнит тесты хороши только для узкого класса проектов - там где есть четкая связь инпут-аутпут. Типа ЯП и прочих числодробилок.
Интеграционные тесты уже более осмыслены, но опять таки, стоимость их автоматизации часто необоснованно высока.
Щешевле посадить тестеров.
>Любопытно, что в книжке банды четырех кресты были одним из основных языков для описания паттернов.
На сколько я помню действие той книжки происходит на примере написания GUI. Я в гуи никогда не работал, но на сколько я знаю, с тех пор многое поменялось там и гуи теперь вообще редко пишут на плюсах. Хотя вот вроде в Qt не особо этого говна напихали, как мне казалось, но там и своего хватает.
Ну давай разберем по частям тобою написанное.
1. Выдуманная проблема. По тестированию - мне ничего не мешает подменить глобальный статический указатель так, чтобы он указывал на тестовый дубль. По конфигурации - мне ничего не мешает написать код, конфигурирующий всю систему, в одном месте (обычно так и делают). Это можно назвать Инициализацией Системы.
2. Смотри 1.
3. Смотри 1.
4. Смотри 1.
5. Выдуманная проблема. Почему следование SRP лучше чем не следование SRP?
6. Если не разбрасывать конфигурацию по кодовой базе, она не будет разбросана. Какое отношение к этому имеет DI или SOLID? Смотри 1.
7. Проблема жизни "объекта" значительно сложнее, чем ложный выбор между singleton/scoped/transient (или аналогичными именами в вашем любимом фреймворке). Не хочу упрощать проблему одним предложением, но в сложных системах "объекты" "живут" группами, обрабатываются группами, и "умирают" группами. DI не решает эту проблему.
8. Это затрагивает проблему так называемых в западной (хуевой) литературе "cross-cutting concerns" (пусть будет "сквозные проблемы"). Культисты (в т.ч. писатели вышеупомянутой литературы) часто утверждают, что сквозные проблемы мешают написанию чистого кода, и вообще в ООП не вписываются; придумывают различные извращенные решения по типу Aspect Oriented Programming и манки-патчей в питоне, чтобы не писать logger.log(message), потому что это не красиво. Они не понимаю, что сквозные проблемы, как правило, это большая часть программы, и в них входит весь код, который действительно делает что-то интересное.
Что такое "keeping the code clean", я думаю, комментировать не нужно.
9. Смотри 5 и 8.
10. Смотри 1.
А хули там чиать. Просто если глазами пробежаться, то видно чтл весе аргументы сводится к тому, что нормальный ДИ сложный для имплементации. Но я же не пишу каждый раз ДИ, я беру готовый.
Если писать микросервисы, то проблемы импорта не так очевидны.
Причем здесь противопоставление С++ другим языкам вообще не понятно. Любой фреймворк решает проблему зависимостей. Тот же кьют имеет несколько способов управления зависимостей. В плюсах на проблему зависимостей еще накладывается проблема деалокации зависимостей, поэтому обязательно делегировать эту проблему специфичным паттернам из С++, как викпоинтеры или как в кьюте через передачу указателя на родителя в конструктор кьюобжекта.
Я все еще слабо понимаю что это за говно.
Магическая хуита, которая смотрит на сигнатуру метода который ты создал и подставляет на этапе вызова нужные аргументы из некого глобального стора, который ты сам настраиваешь?
Как эта хуйня выглядит на практике, покажите мне код уже.
>imgui
Кстати да, год назад писал свой path-tracer ради прикола, юзал imgui мне очень понравилось.
Все довольно просто и удобно сделано. Перед тем как его нашел, стал вспоминать эти ужасы GUI программинга на том же Qt или чем-то подобном, аж в дрож бросало, даже хотел сам написать мини гуи для этого который бы просто рендерил кнопочки и ползунки, но нашел imgui и это была прям манна небесная.
Да примерно такое делает. Раз мы уж в питоно треде обсуждаем то смотри в fastapi документации есть примеры. У фастаапи минималистичный удобный ДИ, как раз для написания крудов самое то.
Я имел ввиду imgui как парадигму, не да, dear imgui очень хвалят.
Я просто нихуя не понимаю. "DI сложно реализовать"
Что DI делает? Прокидывает аргумент в метод.
То есть самая простая на свете хуйня - передать аргумент в метод, требует сложной в реализации, основанной на рефлекшне?
>Я просто нихуя не понимаю. "DI сложно реализовать"
>Что DI делает? Прокидывает аргумент в метод.
Путаешь DI и DI Container (или IoC Container). DI - передача аргумента в функцию (обычно это конструктор класса в OO языках). DI/IoC Container - автоматическая передача аргумента в функцию. Как, что, и когда создается, и куда передается - настраивается отдельно, как правильно каким-нибудь душным DSL или не дай бог XML файлами, при инициализации программы.
>используйте глобальный статический указатель на структуру со всеми "системами", работающими в вашей программе.
Вот только в питоне вместо глобальной статической переменной принято использовать явный аргумент self. Вся программа пишется в одном классе, затем очевидные подсистемы отделяются в отдельные классы.
Понапридумывали миллион терминов.
То есть вместо того, чтобы в main() сказать
if YOBA_TEST:
db = TEST_DB
else
db = PROD_DB
я должен теперь xml ковырять?
Есть моя модель B
Я хочу сделать что если модель A сохраняется, обновляется или удаляется - то это триггерило бы модель B на какую-то операцию, типа если create - я тоже create делаю в B с полем из А и своим значением, ну и так далее. Как это сделать?
Сигналы.
Это должно быть реализовано в реляционной базе данных в виде процедуры/функции, или на худой конец в виде триггера, с использованием настоящей ACID транзакции (это значит ISOLATION MODE SERIALIZABLE). Пожалуйста, не делайте это на клиенте (базы данных).
Начал читать. Прям то что нужно, сразу в дебри с первой главы. Пока что нравится.
Алсо
> The Art of the Metaobject Protocol (MIT Press) by Gregor Kiczales, Jim des Rivieres,
> and Daniel G. Bobrow explains the concept of a metaobject protocol, of which the
> Python Data Model is one example.
Очень хорошо. Надо будет как-нить дочитать AMOP.
Не душни дед.
какое? Если ты думаешь, что | тут как OR работает, то нет. просто все указанные символы убирает
я так понимаю рынок уже реально всё и не вкатиться? какие то переходы из нет в хует обсуждают, девопс вроде, никто тупых вопросов новичков не задает, мою хуйню вначале треда проигнорили
А как же постоянное нытье о том что кадров не хватает?
Или это не хватает тех кто может гайки крутить, а вкатунов наоборот навалом?
> никто тупых вопросов новичков не задает, мою хуйню вначале треда проигнорили
Нынче можно задавать вопросы в какой-нибудь ChatGPT, и получать какие-то ответы моментально, даже если ответ незаметно-тонко ложный. Если новички это делают, то готовьтесь к ухудшению качества жизни после того как все неновички уйдут на пенсию.
>Есть ли техника обработки исключений,
Есть. Обрабатывать исключения в самом верху или вообще не обрабатывать, если программа дальше не может работать.
>Обрабатывать исключения в самом верху или вообще не обрабатывать, если программа дальше не может работать.
Как отличить исключения, из-за которых программа не может безопасно продолжить работу, от исключений, которые можно логировать и игнорировать? В самом верху контекст потерян.
Если, например, долгоживущий компонент серверной программы испортился и начал кидать исключения, то весь процесс испорчен, и его нужно как можно скорее остановить; при этом большую часть исключений стоило бы действительно логировать и игнорировать, чтобы не прекращать сервис для всех пользователей из-за одного бага, не угрожающего состоянию процесса.
Не допускай деления на ноль. Если же поделилось то это фатальная ошибка в коде
Невозможность подключение к БД - дальше работать нельзя
Ресурс не найден в бд - это резонно обработать вверху в специальном обработчике хттп ошибок
Резюмируя. Любая неведомая ебаная хуйня фатальна, Любая дженерик ошибка фатальна. Любое логическое исключение для которого существует специальный класс (твой или из фреймворка) обрабатывается.
Не утверждаю что это абсолютная истина, но так все макакич на языках с исключениями живут
>Ресурс не найден в бд - это резонно обработать вверху в специальном обработчике хттп ошибок
Если подразумевается исключение типа ResourceNotFoundInDatabaseError, то это верно только если ты 100% уверен в источнике исключения (то есть не уверен, потому что статический анализ исключений не производится). На "верхнем уровне" это определить невозможно. Та же проблема с питонячими встроенными generic ValueError / TypeError - в стандартной библиотеке полно функций, кидающих такие исключения. Это баг, или у функции такой вот интерфейс? Только хуй знает.
>Резюмируя. Любая неведомая ебаная хуйня фатальна, Любая дженерик ошибка фатальна. Любое логическое исключение для которого существует специальный класс (твой или из фреймворка) обрабатывается.
>но так все макакич на языках с исключениями живут
Я еще ни разу не видел, чтобы в каком-нибудь веб-сервере не было try...except Exception: logger.exception(...); return 500. Часто даже AssertionError таким образом игнорируется, что абсолютно точно должно моментально убить процесс, и вместо этого возвращается HTTP 500.
На мой взгляд, у каждой функции, в которой что-то может пойти не так, должен быть определен закрытый набор ошибок, который эта функция может поднять/бросить/вернуть. Но я еще ни разу не видел, чтобы в языках с исключениями так кто-то делал.
Не понятно зачем тебе статический анализ ошибки если можно в динамике проверить isinstance.
Не найдено в БД это когда тебе надо сделать действия по id юзера, а такого юзера не найдено. Существует общая логика обработки таких ошибок, не надо ее имплементировать по месту возникновения
Под дженерик ошибками я поразумевал общие ошибки системы из за которых она не может работать. Наверно хуево выразился. Но я привел пример - невозможно подключится к БД
Деление на ноль, AttributeError и прочие НЕХ ошибки, обычно питонячии пррограммы падают в таких случаях.
Если у тебя монолитное веб приложение, то естественно тебе падать нелья, только логировать НЕХи. Придется работать пока весь сервак не упадет из-за того что место на диске или память закончатся.
Микросервис вполне может упасть как общепринято в питоне. Его поднимет кубер. Но там тоже проблемы шторма ретраев, залипания ситемы в метасостоянии и подобной хуйни.
>Не понятно зачем тебе статический анализ ошибки если можно в динамике проверить isinstance.
>
>Не найдено в БД это когда тебе надо сделать действия по id юзера, а такого юзера не найдено. Существует общая логика обработки таких ошибок, не надо ее имплементировать по месту возникновения
Я неправильно выразился. Ошибка "юзер не найден" имеет однозначное значение, если она поймана непосредственно при вызове функции "дай юзера с id 7', то есть "локально". У верхнеуровнего обработчика ошибок это выглядит как "функция 'обработай http запрос' вернула ошибку 'юзер не найден'". Почему юзер не найден? Если из-за пользовательского ввода, то это, наверное, код 404. А вот если был нарушен какой-то инвариант системы, то это или ответ 500, или паника. Различить эти случаи на уровне общего обработчика ошибок невозможно, потому что тип исключения - это не достаточная информация, и также важен и контекст исключения.
>(1000000 + 1)*1000000/2
Это что?
Команда sum должна выдать сумму чисел от 1 до 1 млн или я что-то путаю?
школу прогуливал?
Sn = 1+ 2 + ... + (n - 1) + n
Sn = n + (n-1) + ... + 2 + 1
2Sn = (n + 1) + (n +1) + ... + (n + 1) + (n + 1) = n(n+ 1)
Sn = n(n+ 1)/2
Если есть что-нибудь почитать на этот счет - скиньте, буду премного благодарен. А то самостоятельный гуглёж выдал выдает какую-то совсем детсадовскую чушь.
Бля, ну конечно. Сраный сайт, он везде останется сраным сайтом, на каком языке ты его не делай. Хоть на питоне, хоть на джава, хоть на языке тумба юмба. Всё что относится к сайтам - оно универсально. Общие принципы, базы данных, кеширование, безопасность, масштабирование - одно и то же. Отличия - в деталях, в реализации, в скорости.
Ага, я тут уже документации обожрался большой ложкой, вижу все то что ты говоришь. Джангу в доцкер уже засунул и развернул, пойду МаКеТиК натягивать, а потом на хехеру резюме перевкатуна выложу. Какой же хуйней я страдаю боже мой.
Вот смотрю эту репу и искренне не понимаю нахуя.
https://github.com/Tishka17/deseos17/
мимо джун 80 iq
>По сути, просто на другом языке писать буду.
Ты будешь писать на питоне так, как писал на PHP. Хотя языки на самом деле разные, в питоне есть масса вещей, которых нет в PHP и которые ты не привык использовать
Дальше ещё конкретные фреймворки, их особенности. Джанго/DRF это в принципе тупик, да и рыночек скромненький
Потому что все эти архитектуры придумывают ребята, главная задача которых продавать книжки и курсы, а не шипить продукты.
Кроме паттернов-хуяттернов, в этой репе еще и 9000 файлов, каждый не более 100 строк. Так пишут только мудаки. Если так делать в серьезном проекте, кол-во файлов превысит ограничение файловой системы.
Так ебашь всё в main.py, только потом не злись, почему код ревью не проходишь.
Конечно, если кодревью делают сеньоры-макакены, у которых вместо мозгов паттерны из блогов.
>>289516
>>289518
>>290070
Если у тебя в одном файле больше одного класса и двух-трех функций, или в методе больше 20 значимых строк кода, то ты что-то делаешь не так - не понимаешь проблему, которую решаешь; следовательно, не находишь правильные абстракции. У нас за такое сразу гонят с собеседований на хуй, и отвергают код ревью.
Настоятельно рекомендую перед написанием первой строки кода прочитать и перечитать от корки до корки классику программирования - Design Patterns и Clean Code.
Кек, жирненький.
Смотри, 20к строчек в одном файле: https://github.com/bzg/org-mode/blob/main/lisp/org.el
Гитхаб еле грузится.
И ничего, отлично работает и куча народа этим пользуется.
Ну и как это читать? Как это переиспользовать? Где классы? Где unit-тесты?
Почему так много комментариев? Это анти-паттерн, и запашок кода. Если бы длины функций были менее 20 строк, и имели бы нормальные, понятные названия, то комментарии бы можно было все удалить. Статический анализ комментарии не проверяет; может быть, они уже устарели?
Кроме того, написано это все на игрушечном языке программирования из 1960х. Они бы еще на SQL это написали.
Да ну тебя, толстый ты.
А между двумя крайностями вообще ничего нет, да?
Конечно, ведь новоиспечённые смузихлёбы с list(somedict.keys()) лучше знают, как код писать.
>Любители глобалов. Особенно глобальных конфигов.
Что не так?
>И глобальных сессий к бд.
В каком контексте?
>А ещё любители создавать клиентов на каждый запрос.
Что ты подразумеваешь под "клиентом"? Наверное ты говоришь об HTTP. Если ты говоришь о клиенте вида requests.Session, то да, это пиздец. Если же речь о молодежном aiohttp.ClientSession, то это нормально, если каждый новый клиент использует один общий aiohttp.TCPConnector. Но это больше говорит о идиотском дизайне многих популярных библиотек питона, нежели о программисте, который пытается хоть как-то их использовать.
Если ты разрабатываешь хоть сколько-нибудь технически интересный проект, ты не раз будешь удивляться ужасному качеству популярных библиотек. У requests долгое время на веб-странице с документацией было написано, что она thread-safe, например, но мейнтейнеры тихо и со стыдом это убрали после разоблачения.
Когда новый программист изучает и практикует питон, он видит чужой код. Для веб макак это, как правило, Django/Flask/FastAPI параша. Они все устроены "неправильно" - обязательно есть глобальная конфигурация, имплицитное соединение к базе данных, и прочие дикости. Не удивляйся тому, что большинство так делает и продолжит делать долгие годы впереди.
>Что не так?
Не надо так делать.
>В каком контексте?
В контексте запроса-ответа. Взял из пула соединение - создай сессию, закрой сессию, верни обратно в пул соединение. Многие это не делают, т.к. не понимают, как это под капотом работает.
>Что ты подразумеваешь под "клиентом"?
Да любой клиент, хоть хттп, хоть грпц, хоть эластиксерч, хоть аэроспайк. Челы в контроллере или интеракторе создают клиент на каждый запрос, ещё и закрывать его иногда забывают, вместо того, что бы всё это делать через di и переиспользовать.
В aiohttp создание новой сессии дорогое, они сами пишут в доке что лучше переиспользовать.
somedict.keys возвращает view object
>The keys() method returns a view object. The view object contains the keys of the dictionary, as a list.
Т.е. там лист на результат в общем не нужен. Можешь сразу применять for in к примеру.
А так пишут скорее всего вчерашние жиесники, наверно из аналогии тех их map map map..
А если тебе нужна копия, я а не view? Можно, конечно, написать чуть короче - list(somedict), но разницы во времени выполнения этом игрушечном языке ты не заметишь.
> Т.е. там лист на результат в общем не нужен.
В общем какой-то ты хуевый пример привел.
Я бы еще понимаю ты бы показал пример где итератор сначала превращается в список, а потом ты по нему делаешь цикл.
Но в общем случае превращение итератора в контейнер вполне законная и частая операция.
Хороший пример того как смузихлёбы хуево пишут код?
Хз, я с такими не работаю, поэтому без понятия что они там нынче пишут.
Мне вспомнился еще баян модемных девяностых, с инетом по карточкам.
Если спросишь на англоязычном форуме - тебе скорее всего дадут верный ответ.
Если спросишь на русскоязычном форуме - тебя всегда пошлют нахуй.
Вывод - учите английский.
Берёзы наверное тоже тревожно растут?
Покажи мне англоязычный форум, где взрослые профессионалы обсуждают программирование. Не реддит, не форчан - в этих местах большинство состоит из студентов и аутистов-теоретиков, которые настоящим программированием никогда не занимались. Их мнения часто пересекаются с Чат Жэпэтэ, ответами на стак оверфлоу, случайными туториалами, веротяно сгенерированными с чат жэпэтэ, и "классическими" книгами от продавцов змеиномасленного консалтинга по типу Роберта Мартина; дальше мнений обсуждения там почти не заходят.
Ну он видимо имел ввиду форумы из 90ых же.
Скорее всего там и правда были вполне внятные разговоры.
Впрочем, думаю что русских форумов на тот момент было очень мало (какой-нить может ЛОР), не в последнюю очередь потому что люди которые тогда пользовались интернетом наверняка либо знали английский, либо были пиздюками которые про кодинг ничего не знали.
Есть цикл, который печатает от 1 до 1000:
while i < 1000:
i = i + 1
print(i)
Как мне сделать так, чтобы при нажатии на 'q', цикл останавливался, при повторном нажатии продолжался с того же места, где была пауза?
Попробуй вот эту либу: https://stackoverflow.com/questions/24072790/how-to-detect-key-presses
Правда, нужно бы подумать про вот эти сабмиты на тредпул с генераторами...
Мне код немного подозрительным кажется.
>Думаешь вопрошающий хотел это, а не чтобы q моментально останавливало цикл?
на 100% соответствие заданному
>чтобы при нажатии на 'q', цикл останавливался, при повторном нажатии продолжался с того же места, где была пауза
А, при нажатии, а не вводе. Ладно...
Не, эт чет залупа. Если только, там нет режима "не надо мне окон создавать".
>>290568
>В контексте запроса-ответа. Взял из пула соединение - создай сессию, закрой сессию, верни обратно в пул соединение. Многие это не делают, т.к. не понимают, как это под капотом работает.
То есть если я просто, как везде советуют, инъектирую для эндпоинта зависимость session = Depends(get_db) для получения сессии, это неправильно?
>Так и что в итоге, нужно мне для моей микроапишки на фастапи городить слои абстракции для чистоты архитектуры и солида? Без них меня обоссут и скажут, что я ничего не понимаю в программировании? Или и так сойдёт? Я просто только постигаю азы бэкенда и пока не очень шарю.
Это дрочево для дебилов. Сделай один dataclass со всеми зависимостями и пробрасывай его во все ендпоинт-обработчики любым удобным способом. functools.partial, например.
>То есть если я просто, как везде советуют, инъектирую для эндпоинта зависимость session = Depends(get_db) для получения сессии, это неправильно?
Завит от определения get_db. Если оно возвращает коннешен пул, то правильно. Если оно возвращает соединение из пула, то это неправильно, потому что ты будешь держать соединение дольше чем нужно, уменьшая пропускную способность.
Если у тебя есть время, советую написать свой фреймворк разок другой.
Начни с пустого файла и добавляй нужные фичи по одной.
Запусти http сервер и отдай строку на запрос.
Потом научись вызывать различные функции в зависимости от урла в запросе.
Теперь добавь в микс базу. Возьми какой-нить sqlite3 и разберись как тебе удобней прокидывать соединение в обработчики запросов, как удобней мапить то что тебе выдает база в то, что ты хочешь отдать из эндпоинта.
Сделай туду-апп с регой юзеров, например.
Если ты через это пройдешь, ты выяснишь, что фреймворки это просто чей-то набор костылей, которые решают довольно простую задачу. Но т.к. они не знают какая проблема конкретно у тебя, они пытаются понапихать как можно больше разной хуйни, чтобы покрыть максимальное количество юз кейсов.
После этого у тебя будет гораздо больше понимания почему фреймворки делают то что делают, и какие компромисы они зашили ради "удобства".
>Потом научись вызывать различные функции в зависимости от урла в запросе.
Никогда не понимал этого. Почему все веб фреймворки так делают? Вот хочу я добавить аутентификацию, но только для ограниченного набора урлов, и логирование метрик для другого набора урлов, и прочее. Фреймворк требует от меня колобек на каждый урл-паттерн. Теперь мне нужно трахаться с классами или функциями высшего порядка, чтобы реализовать это без большого кол-ва бойлерплейта. Если бы фреймворк просто вернул мне значение енума, я бы сделал одну функцию с предобработкой, свитчем, и постобработкой, как нормальный человек.
Вот werkzeug.routing.Map делает это правильно, но это WSGI, к сожалению.
Обычно ты просто заворачиваешь свой хэндл в мидлвейр:
"/pizda": WithAuth(Liznul)
Ну или если тебе больше нравится метапрограммирование, то через декоратор, или как оно там в питоне называется.
Я поэтому и рекомендую сделать велосипед, чтобы понять что тебе нравится больше.
>Обычно ты просто заворачиваешь свой хэндл в мидлвейр:
Понятно, что можно это обернуть в функцию высшего порядка, но это не самое простое решение проблемы. К тому же, все эти мидделвейры, как правило, приводят к пробрасыванию данных через какой-нибудь "контекст" или "environ", и твои хэндлеры начинают имплицитно зависеть от мидделвейра.
Вот самое простое решение, о котором все почему-то забыли:
endpoint = match(request, router)
if endpoint in [Endpoint.PIZDA, Endpoint.Zhopa]: user = authenticate(request)
if endpoint == Endpoint.Pizda: ...
elif endpoint == Endpoint.Zhopa: ...
elif endpoint == Endpoint.Hui: ...
else: return 404
Хочется диспатч по дикту функций? Сделай дикт Endpoint -> Callable, не проблема. Но чтобы вернуться от диспатча в обратную сторону к if-elif-свичу, нужно сделать дополнительную хуйню. Усложнение на ровном месте, просто так. Это Pythonic?
как-то грязновато, имхо
По классике через треды если делать, надо нормальным образом стартовать тред, сделать Event и передать его в тред
evt = threading.Event()
thread = threading.Thread(target=f, args=[evt,], daemon=True)
thread.start()
а треде при этом проверяешь, что Event не присвоен, а в основном соответственно выставляешь
Другое дело если я сделаю ебучий функтор.
Я питон не знаю особо, но вот, настрогал:
https://ideone.com/YWgfpE
>Завит от определения get_db. Если оно возвращает коннешен пул, то правильно. Если оно возвращает соединение из пула, то это неправильно, потому что ты будешь держать соединение дольше чем нужно, уменьшая пропускную способность.
Оно возвращает сессию алхимии, которая, если я правильно понимаю, сама берет на себя управление пулом через engine. Как-то так:
https://ideone.com/y7geaX
Когда делал без алхимии через чистые SQL-запросы - без пула просто в каждом обработчике маршрута создавал соединение и закрывал его. Это наверное точно хуевый вариант.
>>291185
Спасибо за годный совет. Начинал что-то подобное делать, когда читал Конкурентное программирование Фаулера, но не хватило скилла.
Преимущества asyncio:
- можно отменять IO;
- меньше ебли с синхронизацией;
- легко запустить что-то вместе с веб-сервером в том же процессе, например, очередь и обработчиков бэкграунд тасок.
Недостатки asyncio:
- новый синтаксис async/await, заражающий программу;
- сырое говно или просто ничего вместо библиотек.
>Питон встаёт на путь избавления от GIL
Только встает, а будет когда?
Это типа лозунг? Даешь свободу от гил в пять версий!
Поднимется (уже поднялся) вой макак, мейнтейнящих популярные библиотеки. Дескать, пользователи будут ныть и спрашивать, а не non-gil ли библиотека, а если нет, то когда будет???
Очень много мультипоточного и нетворкинг кода написано с неопределенным поведением CPython и GIL. Для нас, рядовых пользователей, gil-free библиотеки будут доступны лет через 5-10 в лучшем случае.
Это хуже. Теперь необходимо поддерживать 4 версии модуля - все комбинации (sync, async) x (gif, non-gil).
При этом отключение GIL остается опциональным, как подсказки типов и их статический анализ.
Язык раздут никому не нужной хуитой до неузнаваемости, почти как C++. Уход Гвидо можно понять - он не способен защищать решения PSF.
корутины легче тредов
> сырое говно
async/await вообще уже старая технология
в версии 3.5 появилась, а сейчас уже 3.13 выкатили
там главный плюс в работе с сетью, другой механизм используется, select/epoll, который позволяет переключаться на ту задачу, куда пришли данные. Это намного эффективнее, чем у тредов, когда у тебя сетевых соединений много
>SOLID - свод принципов
>можно заюзать DI - контейнер, в который ты просто
Бля, а можно просто наговнякать синглтон класс, назвать его КОНФИГ и дергать где нужно.
>можно просто наговнякать синглтон класс
Это для Java. В Python можно просто наговнякать имена на уровне модуля, отдельный класс не нужен.
А еще лучше написать всю программу в одном классе, в self класть все "глобальное". Зачем? Чтобы не писать всюду "global" стейтменты.
>Бля, а можно просто наговнякать синглтон класс, назвать его КОНФИГ и дергать где нужно.
А минусы какие?
> Питон встаёт на путь избавления от GIL. Подключают JIT технологии.
Опыт Mojo говорит, что нихуя не получится. Динамикодриснёвость ограничивает максимальный перформанс.
Макаки смузихлебы скажут что ты пишешь плохо.
Когда в блоке try...except больше одного except, это анти-паттерн? Правильнее ли ловить Exception или BaseException, и обрабатывать по Паттерну Стратегии?
Как произвести инъекцию зависимости-стратегии в блок try...except?
ты не выкупаешь, как мне отправить этот текст в stdin интерактивного питухана, чтобы он не обосрался?
Не выкупаю что тебе нужно.
Вот я в интерактивном питухане запустил шел команду и получил ее выхлоп в переменную.
Если это не то, что тебе нужно, попробуй объяснить еще раз.
>я в интерактивном питухане запустил шел команду
а я хочу в шелле запустить команду и пайпануть её в интерактивный питон. но видимо так не получится. твой вариант нормальный и работает.
Можешь запустить без проблем.
Насколько это будет медленее, чем на другом языке - нужно тестировать.
Так же, в последней версии Питона теперь можно отключить это потоковое ограничение.
Че сделать? Легендарный калькулатор надеюсь. Я просто без шуток не понимаю, как можно что то своё высрать, потому что все эти проекты по книжке какой то кринж, ну сделал и сделал - хуйня какая то.
>>294242
Не знаю, работу найти наверное, пока просто щупаю материал, не понимаю надо оно мне или нет, вроде сидеть чет пердеть не западло, просто общее не понимание как и в любой другой области когда вкатываешься. Поэтому и прошу какой нибудь ещё материал навернуть.
Какую работу? Веб-макакой?
>Че сделать? Легендарный калькулатор
Платина и вечный вопрос барист-вкатунов, жертв курсов и прочих ванаби 300кк в наносекунду. Если тебе ничего не хочется погромировать, писать всякую хуйню для себя в стол, нет каких-то повседневных задачь, которые ты бы хотел решить с помощью своих новых скиллов, или если тебе не хочется просто погружаться в науку, в дебри байтоебства, то может это и не для тебя, ты ведь получается изначально сюда полез потому что на пикабу прочитал, что в айти можно миллиард за месяц заработать.
Ну я разделил проект на дюжину модулей. Каждый из которых начинается портянкой импорта толпы функций из друг друга. Так и не понял чем это лучше одного main.py
Только если у тебя в каждом модуле есть приватные штуки которые не экспортируются никуда. Так общая площадь все таки чуть меньше.
Но он почему то во время измерения тупо грузит на фул проц и не пишет ничего в файл по итогу. Почему?
Попробуй перезагрузить компьютер.
>нет каких-то повседневных задач
Тут кстати виндусятники соснулей. Потому что под линухом можно делать себе консольные утилиты, даже если работаешь не напрямую прогером, а просто под свои рабочие задачи или если возможности гуя не нравятся. А вот смд пососная хуета вместо консольки.
Збс же. Чем не скрипт.
Сделай то чем будешь пользоваться, то что автоматизирует какие то вещи. Может веб хуйню, парсер там новостей или рейтинга в доте, календарь, не ебу.
Вот на, держи. Программа спрашивает какую фигуру надо и какого размера:
```
print('please type the type of figure (0,1,2)')
type_of_figure=int(input())
print('please enter the size of figure')
a = int(input())
0
if type_of_figure == 0:
for i in range (a):
print(''a)
elif type_of_figure == 1:
for i in range (a):
print(''(i+1), end='')
print(' '(a-i-1))
elif type_of_figure == 2:
for i in range (a):
print(' '(a-i-1), end='')
print(''(i+1))
else:
print('No such figure')
```
Теперь рассказывай как ты докатился до такой жизни?
Мне проиграммирование стало интересно только в 30 лет. Спасибо университету, с ебучим С++ с хуевым преподом и школе с паскалем и тоже неважнецким преподом. Отблили у меня желание прогать на 12 лет. Ну уж питончик, уж такие то задачи, тебе разве самому не интересно? Я когда такое по питону изучал, кайфовал.
И кстати этот>>295853 прав, нейросетки такое на изи пишут.
Вот на, держи. Программа спрашивает какую фигуру надо и какого размера:
```
print('please type the type of figure (0,1,2)')
type_of_figure=int(input())
print('please enter the size of figure')
a = int(input())
0
if type_of_figure == 0:
for i in range (a):
print(''a)
elif type_of_figure == 1:
for i in range (a):
print(''(i+1), end='')
print(' '(a-i-1))
elif type_of_figure == 2:
for i in range (a):
print(' '(a-i-1), end='')
print(''(i+1))
else:
print('No such figure')
```
Теперь рассказывай как ты докатился до такой жизни?
Мне проиграммирование стало интересно только в 30 лет. Спасибо университету, с ебучим С++ с хуевым преподом и школе с паскалем и тоже неважнецким преподом. Отблили у меня желание прогать на 12 лет. Ну уж питончик, уж такие то задачи, тебе разве самому не интересно? Я когда такое по питону изучал, кайфовал.
И кстати этот>>295853 прав, нейросетки такое на изи пишут.
Чёт посмотрел на typing, блядь, какой же питон - ссанина убогая.
Обрати внимания на эту боль. Она вызвана тем, что у тебя есть ощущение "сложно и убого", но рационально объяснить чем оно вызвано ты не можешь. Часто, это показатель того что ты не понимаешь о чем говоришь.
Скорее ты не понимаешь, потому что сразу высираешь про "сравнение с чем". Говно оно говно, не потому что говно относительно чего-то.
>уиии боль
Детектор дегенерата.
Не волнуйся, ты повзрослеешь и успокоишься.
Если хочешь топ - то НЕ начинай обучение программирования с питона. Почитай K&R ANSI C, забудь про книги/туториалы/ресурсы, и сделай что-нибудь интересное.
ставил, ставил. На надо думать, что я тупой. Сам попробуй понять где программа виснет
>ставил, ставил. На надо думать, что я тупой. Сам попробуй понять где программа виснет
Кнопки Step Over / Step Into или аналог в дебаггере пробовал нажимать?
Есть простая табличка в файле .html https://pastebin.com/XmHtgnB3
Есть файл .py, в котором происходит некая магия, в конце которой получается несколько списков, в которых хранятся названия товаров, их цена.
Собсна, как мне сформировать итоговую табличку, которая будет выводить товар и его цену?
Другими словами - как мне переменные из файла .py запихнуть в ьабличку файла .html?
Немного уточню.
Есть два списка:
tovar = ['moloko', 'hleb', 'yaitsa']
cena = ['100', '50', '150']
Как циклом запихнуть каждое значение в таблицу хтмл, чтобы получилась таблица вида https://pastebin.com/v7CxiqmG
Спасибо, но немного не то. Твой код формирует хтмл код, а у меня он уже готовый. Мне надо было именно в код вставить переменные.
Может кому пригодится:
main.py
def index():
return render_template('index.html', joined = zip(getProducts(), getPrices()), checkdata = checkdata, finalprice = finalprice)
joined - объединяем два списка с данными. Получается формата joined = [['1', '2', '3'], ['a', 'b', 'c']]
checkdata, fianlprice - просто переменные с 1 значением
index.html
{%for prod, price in joined%}
<tr>
<th>{{prod}}</th>
<th>{{price}}</th>
</tr>
{%endfor%}
Тут просто перебирание циклом. Переменные вставляются так - {{x}}
То есть не банальный синтаксис и механика, с этим всё понятно, а именно применение на практике в прикладном коде.
>а именно применение на практике в прикладном коде.
На практике есть два подхода. Первый - оборачиваешь сколько угодно большие блоки кода в трай-кетч, делаешь что хочешь и как хочешь, скрывая баги. Второй - обрабатываешь исключения практически у каждой строки кода, оборачивая локальные исключения в более уместные типы, например.
Когда поймешь, что только второй подход приводит к корректным программам, то выяснишь, что эксепшены - это хуйня, придуманная конченным идиотом, которую распространили в огромном количестве ЯП просто потому что это модно. Даже в языках со статическим анализом типов мы получаем функции вида (X -> Y | Error), где Error - это ебаный интерфейс за которым может быть все что угодно на хуй. Статический анализ идет в сраку. Это особенно актуально в программах, построенных на нескольких сторонних библиотеках. При обновлении библиотеки компилятор тебе не скажет о том что появился или изменился тип ошибки на строке 666 - узнаешь ты об этом только в рантайме.
>На практике есть два подхода. Первый - оборачиваешь сколько угодно большие блоки кода в трай-кетч, делаешь что хочешь и как хочешь, скрывая баги. Второй - обрабатываешь исключения практически у каждой строки кода, оборачивая локальные исключения в более уместные типы, например.
Зачем оборачивать "сколько угодно большие блоки кода" или "каждую строку кода"?
Видимо, ты это делаешь чтобы ловить НЕПРЕДВИДЕННЫЕ исключения т.е. баги грубо говоря. Держу в курсе, что для этого тебе не нужно оборачивать весь код или тем более каждую строку пиздец с кем водном треде сижу. Ты можешь добавить обработчик исключений с логикой на уровне всего модуля например. Это закрывает непредвиденные исключения и для этого в питоне есть все инструменты.
Каждую же строку покрывать нужно разве что только фимозным тестерам, но это отдельная задача и отдельная работа.
Второй момент. Исключения в питоне это разумеется часть логики, они используются именно в этом контексте. Тут их смысл в том, чтобы заменить собой, например, кучу строк с условиями или вернуть и обработать какую-то универсальную логику, которую ты не можешь предусмотреть.
>трай-кетч
>Когда поймешь
Поражает как баристы-вкатуны кукарекают с умным видом о вещах в которых не разбираются, ещё и учат кого-то.
В высокоуровневомм коде буквально каждый вызов функции ассоциирован с множеством ЛОГИЧЕСКИХ ошибок. Вместо блока switch, как в нормальных языках, нужно писать трай эксепт. Ловить логические ошибки в общем обработки исключений нельзя - теряется контекст.
Проблема в том, что ЛОГИЧЕСКИЕ ошибки - это на самом деле часть интерфейса функции, и они должны быть выражены в ее сигнатуре. Вместо этого они пишутся в докстринге. Статический анализ НЕ РАБОТАЕТ с документацией.
Это ПЛОХОЙ ДИЗАЙН языка программирования.
Ты пытаешься изобрести throws из жабы или крестов?
Или ты обнюхался раста и хочешь один из 100500 крейтов для заворачивания ошибок?
А это ты типизированный нытик, извини не узнал. Зачем продолжаешь мучиться и давить питона? Катись в НОРМАЛЬНЫЕ ЯЗЫКИ, а то вон всё страдаешь.
Алсоу, относись к питухонической конструкции try-except как к условному оператору и попроще будет.
>А это ты типизированный нытик, извини не узнал. Зачем продолжаешь мучиться и давить питона? Катись в НОРМАЛЬНЫЕ ЯЗЫКИ, а то вон всё страдаешь.
Ты в курсе, что PSF уже который год подряд пытается засунуть "опциональную" статическую типизацию а-ля тайпскрипт в питона? Проснись, дядя. ВЕСЬ МИР динамически типизированных языков уже давно ПРИНЯЛ ПОРАЖЕНИЕ. Статический анализ типов - это исключительно ХОРОШАЯ ИДЕЯ. Ни одна контора на планете не пишет говноскрипты на питоне в старом стиле без анально-строгого конфига mypy.
>>298715
>Ты пытаешься изобрести throws из жабы или крестов?
>Или ты обнюхался раста и хочешь один из 100500 крейтов для заворачивания ошибок?
throws no throws - это тоже хуйня от дебилов. Плохая идея. Хорошая идея - это когда все функции могут вернуть ОГРАНИЧЕННОЕ и ЯВНОЕ множество типов. Посмотри на программы написанные на Standard ML или Haskell, например.
Почему? Практическая причина номер 1 - обновление зависимостей. С исключениями компилятор / статический анализатор НЕ МОЖЕТ сказать тебе, что программа сломана, потому что одна из транзитивных зависимостей случайно поменяла свой интерфейс, добавив новый тип исключения.
Хорошее программное обеспечение НЕВОЗМОЖНО написать на таком языке программирования, потому что его НЕВОЗМОЖНО формально верифицировать. Программа работает только на твоей слепой вере.
> Standard ML или Haskell,
Как только софт которым я пользуюсь будет хотя бы на 10% состоять из программ написанных на вышеуказанном, я может быть подумаю.
Реальность такова что почти весь реальный софт который стоит у тебя на компе это с/с++ для самых важных программ, от ОС до браузера. Игровые движки, кады и прочее почти всегда написаны на сишечке или крестах.
Да даже софта который использует питон, пхп или раби без типов, ты юзаешь гораздо чаще, когда скролишь очередной говносайт.
В общем все эти студенческие фантазии о хаскеле и иже с ними для нищих.
>В высокоуровневомм коде буквально каждый вызов функции ассоциирован с множеством ЛОГИЧЕСКИХ ошибок.
Какие же питонисты всё-таки гигочеды. Вирджены перекатуны из НОРМАЛЬНЫХ ЯЗЫКОВ оказывается не способны и 100 строк написать не серя то в штаны то мимо, не делая логических ошибок и если им типизация сопельки не вытирает.
Гигочеты питонисты же могут держать в уме весь контекст приложения, подсказок в виде аннотации более чем достаточно, и пишут так чисто, по всем заветам ООП, что ни одной логической ошибки в рантайме.
>Реальность такова что почти весь реальный софт который стоит у тебя на компе это с/с++ для самых важных программ, от ОС до браузера. Игровые движки, кады и прочее почти всегда написаны на сишечке или крестах.
Конечно же, весь реальный серьезный софт, разработанный с корректностью [1] и производительностью [2] в уме, написан на системных ЯП типа C и C++. В C и C++ нет исключений (в C++ их отключают на хуй на этапе компиляции, потому что они не нужны по перечисленным мной выше причинам, а также из-за несовместимости кода с исключениями с интеропом - если твоя динамическая библиотека будет кидать исключения, тебя сразу уволят к хуям).
Haskell и SML - это примеры для гладкомозгных питонистов-баристов, которые не способны написанию программ с ручным управлением памятью. Питонисту не понять, что память - это такой же ресурс как файл или сокет, и код нужно писать УЧИТЫВАЯ выделение и освобождение памяти. Именно поэтому все серьезные критические программы не выделяют память динамически, за исключением инициализации программы. Это еще одна точка падения. В программах, написанных на петоне, КАЖДАЯ СТРОКА может поднять MemoryError. Это игрушечный язык программирования.
Справедливости ради 99% софта написанного на си не обрабатывает ошибки аллокации на уровне логики приложения.
В лучшем случае malloc завернут в ассерт.
И кроме некоторых игр и ядра, мало кто не устраивает пиздец с аллокациями налево и направо. Что с++ что раст хуячат аллокации без остановки, потому что все динамические контейнеры делают это по дефолту.
Юношеский максимализм в суждениях, ух весь настоящий софт на ассемблере написан, остальные языки - синтаксический сахар и не нужны, будем как диды писать.
Это пройдет. Потому что есть задача и есть инструмент.
Вопрос в том что важнее, чтобы криворукие неучи могли лабать код, который так или иначе решает чьи-то задачи, или что-бы общее качество софта было лучше.
Рыночек однозначно порешал в пользу первого. Поэтому мы имеем огромное количество софта, качество которого оставляет желать лучшего. Хочется верить что с течением времени все устаканется и в каждой нише будет не-уебищное решение.
Впрочем, смотря на винду и прочие visual studio с офисом, пока что кажется что качество софта в среднем по больнице ебнулось ниже плинтуса.
Рыночек так порешал, что через N лет будет полу-сильный ии, который мычание любой тёти сраки из офиса сможет конвертировать в логику с ммммммаксимальной эффективностью алгоритмов. Как сказал глава НВИДИА языком погромирования станет человеческий язык. Тётя срака скажет ну я хочу чтобы конопочка, чтобы картиночка, а потом смета высиралась, ИИ всё сделает. И на всю галлеру будет один васян, который раз в месяц будет спорные моменты за ИИ подтирать. Вот как всё будет через N лет, но при нашей жизни. Там ОпенАИ уже высрали новую версию ГПТ с рефлексией, который сам себя анализирует и смотрит где не прав, а ещё может в прямом эфире материал изучать.
Так что байтоебы с аллокацией памяти. вы зря свои жопы напрягаете. Человек должен знать только то что ему нужно для работы, увы разум человека не резиновый и всю хуйню на свете вместить не может - для этого есть носители информации. куда человек обратится в случае если нужно какое-то знание. Теперь этот носитель информации - ИИ.
> который мычание любой тёти сраки из офиса сможет конвертировать в логику
Хуита которой нас кормят уже лет 30. Еще DreamWeaver обещал это.
> Там ОпенАИ уже высрали новую версию ГПТ с рефлексией
Не смеши мою жопу. Я этот чатгпт каждый день юзаю чтобы заглушки генерить, и оно конечно впечатляет, но только на заглушки и годится.
>Хуита которой нас кормят уже лет 30.
Ты ещё вспомни что концепцию математической модели нейросети аж в 40-х годах прошлого века придумали. Бум нейронок начался ТОЛЬКО в 2021 году, буквально только три года прошло, и за этот крошечный срок технология развилась феноменально, а "ии" уже в затылок некоторым профессиям дышит и просит подвинуться.
Наивно и даже глупо думать, что развитие технологии ВНЕЗАПНО остановится на той точке на которой оно есть сейчас, спустя всего три года активного роста. Я не экстраполирую линейно, но докрутить генеративную языковую модель до полного или частичного порешания байтоебов - это не фантастика, а обозримая и осязаемая перспектива.
Перед каждой ии зимой такие разговоры были.
Пока что оно подходит только для того чтобы генерить пасту из тренировочного сета.
Тетя срака не будет ебаться с тем чтобы заставлять сети делать то что ей нужно, она наймет промто ждуна, точно так же как она нанимает вордпресс макаку сегодня.
Я буду рад, если кто-то сделает генератор качественного ПО, потому что сегодня все "профессиональное" ПО ужасно, будто сделано отрядом JS-макак.
НО я в это не верю. Почему? Да потому что качественных данных почти нет. Если модель будет накормлена той хуитой, которую высирали макаки каждый день на протяжение последних 20-30 лет, то ничего хорошего из этой модели не выйдет. Говно на входе, моча на выходе.
Какой ещё "каждой"? Генеративные нейронки первый раз три года назад выстрелили, до этого были только теории и нелепые попытки без какого-либо более-менее осязаемого результата. Ты не объективен в этом вопросе и общую картину замазываешь так как тебе хочется видеть.
>>298879
>Говно на входе, моча на выходе.
Не всё так однозначно. Последние высеры ОпенАИ свидетельствуют о том, что модель может демонстрировать универсальную "логику" которой её не учили. Возможно, когда у тебя непомерно большая база обучения атомарные данные этой базы в сочетании с большим контекстом формируют "новую логику", точно так же как и человеческий мозг в принципе. Человек же тоже ничего сам не придумывает он синтезирует "новое" из песчинок перемешанных и странным образом измененных у него в голове. Алсоу, наука не знает как, почему и из чего возникает сознание. Может оно и так возникает из сингулярности хаотичной информации. в таком случае если скормить нейронки непомерное количество говна, она в итоге будет способна синтезировать шедевр.
Ладно это уже нерилейтед лирика, которая не имеет отношения к тем нейронкам которые у нас есть в открытом доступе всё равно.
Эта та хуйня которая верещит как свинья и жрет ресы ос почем зря?
Понятно что есть наркоманы которые будут юзать любую эзотерическую хуйню, просто потому что могут.
Они с таким же успехом могли бы написать все на постксрипте, чеб нет.
Свинью с озвучки убрали лет 10 назад примерно. На моем калькуляторе с виндус 7 последний каспер занимает ровно ноль процессорного времени и 1мб оперативы.
Алсоу каспер в любых хитпарадах лучших антивирусов всегда и по сей день стабильно в тройке лидеров и то только из за черного пиара, якобы там зонд кремля вшит (смешно такое читать особенно вспоминая скандал с эксплойтом этернал блю на винде, и я напоминаю, что этот эксплойт на всех виндусах начиная с 95 был встроен и давал бэкдор, который мог буквально полный доступ к системе давать удаленно)
Если зонда там нет, то вдвойне обидно.
Энивейз, каким раком хаскель со своим гц и ленивостью и антивирь который должен жрать минимум ресурсов оказались в одном предложении, понять сложно.
Ты уже сделал свой охуевший быстрый и безопасный проект на расте, которым все пользуются?
А сколько хуевых ты сделал бы на ебучем питоне?
А если ты не сделал нихуя, то как будто ты просто сидишь и серишь в лужу.
uvloop или стандартный asyncio loop?
aiohttp.web или uvicorn+starlette?
aiohttp или httpx?
psycopg(3) или asyncpg?
redis-py или aioredis?
aiomcache?
Есть ли что-то для MQTT?
aiobotocore или botocore+loop.run_in_executor?
Бери то что предлагает твой фреймворк. Если это фастапи, то он тебе сразу старлетт и uvicorn даст.
А дальше как хочешь. Если делаешь скрипт чисто для себя - нахуй в него тащить aiohttp, можно просто request. Если тебе сервер нужен и поддержка тысяч rps, то бери только проверенные асинхронные библиотеки. Либо оборачивай в to_thread.
Сам решай, ты же не довен.
>Энивейз, каким раком хаскель со своим гц и ленивостью и антивирь который должен жрать минимум ресурсов оказались в одном предложении, понять сложно.
Там хаскель - это вроде слоновая башня, можешь даже для линупс кернела писать на этой ебанине.
>>298905
А реально вообще с mypy и типииками жить? История: есть программулина, которая юзает ткинтер и хранит данные в sqlite базке, задача была сделать просто и быстро, теперь же планируется расширение проги, в том числе с веб говёным апи и с сурьёзной базой в виде пгсуки - подумываю свалить на говно в связи с этим, реально ли что-то среднего размера написать на петухоне с типами и вот этим всем, или похуй сразу на что-то статическое валить?
> Бери то что предлагает твой фреймворк.
> бери только проверенные асинхронные библиотеки
С этого нужно было начинать. Что у пацанов на грани прогресса считается проверенным? Есть какой-нибудь общепринятый "стэк"? Предпочтений нет, можно и без фреймворка.
Если есть возможность писать на настоящем языке программирования, то рекомендую сделать это. Если нет возможности или желания, то и с mypy можно жить.
Включай все строгие опции:
strict = true
disallow_any_unimported = true
disallow_any_expr = true
disallow_any_decorated = true
disallow_any_explicit = true
disallow_any_generics = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
disallow_untyped_decorators = true
Если нужны библиотеки без аннотаций (почти вся стандартная библиотека такая), то выключай disallow_any_expr, иначе будет очень некомфортно. С таким конфигом ты все еще можешь как клоун жонглировать Any типами, но только в скоупе функции, а перед return придется сузить тип с if isinstance, assert isinstance, cast, или своим собственным TypeGuard.
Не забывай, что mypy и pyright не защитят тебя от ложных аннотаций в сторонних модулях.
Спасибо, перекатываюсь на говно, ибо оче сложно выходит.
Пользователи настоящих языков (с) поясните по хардкору в чем сакральный смысл этих ваших святых типов, что вы без них не можете ничего писать?
Предполагается что программист это мычащее пускающее слюни животное, которое и говорит с трудом и уж тем более не понимает куда какие аргументы в его коде должны втыкаться без строкой типизации?
Если ты все время свой один пет пилишь, то можно обойтись динамикодрисней. Если слету заскакивешь на кабаний проект, то очень надо. Навигация по коду, автоматический рефакторинг, подсказки методов, подсказки документации типов, самодокументируемость кода выше.
>Навигация по коду, автоматический рефакторинг, подсказки методов, подсказки документации типов, самодокументируемость кода выше.
Но это всё делает пайчарм на основе аннотации типов. Из за этого что ли весь баттхерт?
>да всё заебок есть костыль на основе аннотации типов
Дружище, я же нормально спросил. Мне ответили, что святая типизация это такая вот подсказка для макаки, чтобы проще было в чужом коде разобраться. Ну и если это так, если это просто подсказка для макаки, то в питоне же и без строгой типизации это всё есть так или иначе.
>ГАРАНТИИ КОРРЕКТНОСТИ
Приведи пример. Вот этот код с ГАРАНТИЯМИ КОРРЕКТНОСТИ заебись и такой код на питухоне не напишешь. Но мне почему-то кажется что суть явления которое ты прячешь за ФОРМУЛИРОВКАМИ сведется к тому что строгая типизация просто помогает макаке не обосраться. Т.е. всё сведется к тому что мне ответили выше - строгая типизация это просто QoL фича.
Типизация - это и есть твои анотации, неправильно, аннотации типов - это попытка в типизацию, дружище.
>Приведи пример. Вот этот код с ГАРАНТИЯМИ КОРРЕКТНОСТИ заебись и такой код на питухоне не напишешь. Но мне почему-то кажется что суть явления которое ты прячешь за ФОРМУЛИРОВКАМИ сведется к тому что строгая типизация просто помогает макаке не обосраться. Т.е. всё сведется к тому что мне ответили выше - строгая типизация это просто QoL фича.
Для продолжения беседы нужен пруф, что ты не толстишь.
Ну вот так всегда, визгов про типизацию выше гор, а когда спрашиваешь по сути - начинается виляние жопой. Сектанты вы. которые привыкли к некоему интерфейсу перешли в другой - там всё иначе и вы этим окружающих заебываете.
>в чем сакральный смысл этих ваших святых типов, что вы без них не можете ничего писать?
Если бы ты когда-нибудь писал программы на статически типизированном компилируемом языке, то ты бы знал, что компилятор не скомпилирует программу, если не сможет доказать корректность на уровне типов (если ты его явно не обманул небезопасным кастом).
Если бы ты когда-нибудь занимался рефакторингом, то ты бы ценил ошибки компилятора. Хочешь изменить атрибут структуры или аргумент функции? Поменяй, и компилятор покажет тебе все места в коде, где этот атрибут или аргумент теперь неправильно используется. Исправь все ошибки, и ты уже на шаг ближе к цели. Рефакторинг проекта условно среднего размера в настоящих языках программирования занимает пару вечеров, и ты заканчиваешь рефакторинг с уверенностью в корректности программы.
Как это выглядит в питоне? Хуячим грепом и надеемся, что где-то не пропустили. Рефакторинг любого проекта на питоне заканчивается только тогда, когда ты навернул 100% покрытия юнит тестами, и не дай бог ты забыл проверить типы аргументов и возвращаемых значений каждой функции. Если не покрыл тестами - твоя программа на самом деле не корректна.
Mypy, pyright, pytype, и прочие программы ЗНАЧИТЕЛЬНО увеличивают продуктивность при разработке нетривиальных программ. Не с нихуя такие гиганты как google (python), dropbox (python), stripe (ruby), microsoft (javascript), и другие вложили огромные ресурсы в утилиты для статического анализа.
Питону не хватает хорошего интерпретатора, отключения GIL, и опционального строгого режима анализа типов на уровне интерпретатора.
Думайте.
Ну т.е. настоящий (серьезный, взрослый, не детский, не пет) проект это спагетти говнокод, где один аргумент насквозь проходит через всю программу, а пускающие слюни макаки не в состоянии его изменить не сломав всё остальное. Типизация же помогает дегенератам настоящим программистам в этом нелегком деле рефакторинга.
Ну собственно я всегда так и знал, просто не мог поверить и хотел уточнить, почему все так визжат закатив глаза и требуют святую типизацию в питухоне.
Но ведь сама типизация тут не при чем, как мы выяснили из ответов выше, весь баттхерт из за того, что настоящим программистам нужен помощник, который таким вот образом чекает их говнокод. Так-то все эти инструменты давно есть, но они продолжают визжать и ныть, надо чтобы всё было встроено.
Если тебе сервак то у тебя два стула. Либо джанго и там все уже будет. Либо если ты любишь сам подбирать стек - фаст апи. К фаст апи либо sqlmodel, либо sqlalchemy. У фаст апи прям жирнющая дока в которой очень opininoned все написано. Можешь с нее начать, будешь самый модный на районе. И uv вместо pip и poetry возьми.
GIL почти отключили. В 13 эксперементально выключается. Только нахуй оно тебе надо, если математика в numpy и так выключена, IO bound не подвержен gil, а для всего есть асинки?
Че ты там считать такое в тредах собрался, что тебе нужно отключение гила?
>Только нахуй оно тебе надо, если математика в numpy и так выключена, IO bound не подвержен gil, а для всего есть асинки?
>Че ты там считать такое в тредах собрался, что тебе нужно отключение гила?
Чтобы не запускать 128 процессов на сервере с 128-поточным процессором, конечно же. Даже если сделать load then fork вместо классического питонячего fork then load, вся CoW память процесса будет скопирована из-за референс каунтинга вообще всего, даже модулей и объектов кода.
Сейчас в основном работаю с фастапи, интересуют принципы работы интерпретатора, асинхронность, такие вот вещи.
>У фаст апи прям жирнющая дока в которой очень opininoned все написано.
Все так восхищаются докой фастапи, а по-моему у джанги документация на порядок пизже.
>ряяя нахуя вам си, чё макака не осилила на асме под хуй86
Я всё правильно, понял о доводах дебила, который против типов?
как запостить видео в свой телеграм канал через бота
сообщения отправляются а вот с видео беда
>>299754
>>299803
>>300162
>>300227
Вот честно объясните, для чего вам asyncio? Почему не создать 100-1000-5000 тредов в тредпуле, или загнать gevent на худой конец? У asyncio нет проверенных библиотек. Вы понимаете насколько сложно писать сетевой код? Сколько крайних случаев может быть у сетевых протоколов? Это полировали десятки лет в обычном не-асинк питоне. У asyncio библиотек ишуе-трекеры на гитхабе завалены багами и уязвимостями.
Это честный и серьезный вопрос, не троллинг.
>Почему не создать 100-1000-5000 тредов в тредпуле
Так создай 5000 тредов и 5000 корутин с реквестами к хттпбин и проверь.
Я может в институте плохо учился, потому что пиво много пил, но насколько я помню, асинхронность от тредов в питухоне отличается только тем, что в асинхроности ты сам решаешь где горлышко бутылки и когда уступать выполнение, а в питонячем трединге из за ГИЛа всё равно нет этого самого трединга, одна видимость, и там то же самое уступание, только когда утупать выбирает управляющая система. Т.е. если ты насрешь 5к тредов у тебя всё время будет тратится на бесполезное переключение между тредами. Но это не точно.
Различай вытесняющую многозадачность - когда коды переключает система по таймеру и кооперативную - когда твой код уступает место во время ожидания. В питоне возможна асинхронность на основе кооперативной многозадачности. Все дело в том, что GIL разблокируется во время выполнения операций ввода-вывода и и когда вычисления произволятся не в питонячем коде, а в сишной коде модуля типа numpy. Например ты в треде делаешь реквест с помощью либы requests, и тред засыпает пока не придет ответ от сервера, в этот момент GIL разблокируется, и управление передается следующему треду из пула. В новом треде начинает выполнятся питон, и GIL блокирует другие треды. Потом выполнение доходит до кода с запросом requests, и тред засыпает и разблокирует GIL. И так далее.
>Почему не создать 100-1000-5000 тредов в тредпуле
А в петухоне треды - это прямо треды, как в pthread, или какая-то лайт хуитка как корутины в говне?
Главное чтобы людям было удобно потом с этими конфигами работать и добавлять новые.
Какие-то свойства постоянные и захардкоженные, а какие-то надо параметризировать.
Думал шаблонизатор на jinja2 сделать, но мне сказали что оверкилл.
Я в таких случаях решил использовать класс с паттерном синглтон, наследуемый от словаря. Он в таком виде получается просто как контейнер с полями.
Я не скажу что это прям хорошая практика, но мы вообще подымали игрушечную постгрю с графическим интерфейсом поверх (Directus) и простой схемой, и ее кверяли в рантайме. Полет нормальный если к дизайну не допускать DWH шиза который налепит двадцать пятую нормальную форму.
https://gitverse.ru/features/gigaide
Затестите и скажите ваше мнение.
@dataclass что ли?
>Затестите и скажите ваше мнение.
Ты только что познал суть российского импортозамещения и аналоговнетных продуктов.
В больших проектах динамика это ад, особенно если начинаешь работать над той частью, которую писал другой человек.
Дело даже не в корретности, а в отсутствии необходимости постоянно чекать что у тебя во входных данных придет когда ты собственно что-то переписываешь, вот есть какая-нибудь бизнес хуйня типа куска заказа, а что это какой-то класс, словарь или вообще другое непонятно.
Чем вы Питухон интерактивно дебажите? ВСКоде?
Охереть наговнили, в win11 нельзя увидить эту программу в apps, собственно, по простому удалить.
>>304912
Принты это конечно хорошо, но хотелось в окошечках, попробую
https://visualstudio.microsoft.com/vs/features/python/
Студия есть
for ... print в нужном месте. А еще у меня обычно пользовательские исключения и маленький самописный логер на одну функцию с цветами сообщений что сам подобрал себе по вкусу, аргументы и вывод которого меняю под проект.
Но я камплюктер начинал еще с MS-DOS, мне норм я привык, также как и люблю копролиты в один крупный py файл (но не всегда).
>for ... print в нужном месте
Ну перестань, это же говноедство если ты на локальной машине работаешь, да же во времена ДОС было IDE как помню, BORLAND и Microsoft всякие.
Борланд это паскаль, это уже в технаре было.
Сосницкими в бывшем доме пионеров мы в кружке на турбовасике писали. Файлы открывали, а нортон командере, а сам редактор не помню уже названия.
>это же говноедство
А мне норм.
>Борланд это паскаль, это уже в технаре было.
Да, но у них и С++ был Turbo Vision назывался, можно было нормально отлаживать и окошки для ДОС клепать, Визуал что то там от Майкрософт на ихнем фоне выглядело как говно, еще Ватком был.
>А мне норм.
Ну я сам такое активно пользую, но если есть возможность предпочитаю интерактивный дебагинг и возюкинг мышкой.
Мы в технаре на паскале прогали, но я не помню какая винда там была, наверно 98. Для ее делали простые проги. Ну те самые где вся логика в обработчике нажатия. А вообще скучаю немного за нортоном, такой ламповый был, сейчас миднайткомандер юзаю вместо него.
>наверно 98
Так это не тру, я еще накатывал 3.1 на ДОС, а вот двупанельные менеджеры это да, был еще Волков Командер, Дос Навигатор, конечно они на хуй не нужны как и Тотал Командер, поскольку если ты под Виндой ебешься так с файлами, значит у тебя проблемы с организацией.
>Ну те самые где вся логика в обработчике нажатия.
Может Делфи имеешь в виду? Там можно было под Винду писать.
>Может Делфи имеешь в виду? Там можно было под Винду писать.
Он же технически паскаль насколько я помню, точнее обжект паскаль. А среда борланд дельфи.
На сколько помню Паскаль, Турбопаскаль, это под ДОС и псевдографику и консольки типа Тотал Командера под ДОС, а Делфи это апнутый Паскаль и уже под Видну, в чем различая я хз. Паскаль никогда мне не нравился из за богомерзкого символа присваивания := и begin/end
Я тоже не знаю различий, или может кто-то говорил из преподов когда-то, но я забыл уже давно. Я коммерческого не писал на паскале, только учебные, а потом после техникума забил на него.
Норм, Пыха же чисто под веб, хз как она взлетела в свое время, тогда и Перл был и еще что то.
>хз как она взлетела в свое время
Думаю из-за Денвер под винду где все искаропки, плюс на него много материалов на русике было, также всякие вордпресы, джумлы, друпалы и т.д. плюс фреймворки.
Перл я когда-то пробовал, из комп журналов, там для веба надо было мутить cgi-bin, и вообще он мне заумным показался, не для меня.
>Перл я когда-то пробовал
Перл топчик обожаю его, Питухон кстати чуть младше его на пару ле. Эра Перла прошла к сожалению, но он на всегда в наших сердцах, а у Питухона экосистема хороша и это то же не плохо.
Дорогие аноны, оцените ебанутую идею автоматизировать размещение объявлений на авито. Брать информацию о товаре с другого сайта-магазина (скачивать фото + обрезать, название, характеристики). Заранее извиняюсь за свою тупость и кринж.
>автоматизировать размещение объявлений на авито
На авито тебя забанят за такую автоматизацию
Хз я вручную ебашил много(подработОчка такая), даже капча очень редко выпадала.
Если ты дрочишь питон чисто для саморазвития - идея норм. Если для дальнейшего трудоустройства - то хуйня.
Я про то, что задача хуйня для изучения питона. Для вката нужно django + DRF + postgresql.
> Если для дальнейшего трудоустройства - то хуйня.
Почему? На джанге и фастапи можно писать бэкенд же.
Просто это мне хотя бы интересно.
>Для вката нужно django + DRF + postgresql
Напердел с этого советчика, ты б еще Торнадо посоветовал.
Асинкоребенок, ты? Фастапи с пайдантиком накатил? Что не так с django + DRF?
А с Торнадо?
Простота и скорость разработки: Django с DRF — это тяжелый монолит, заточенный под всё сразу (ORM, шаблоны, сериализация). Для чистого API ты грузишь ненужные компоненты. FastAPI легче и быстрее, без лишних слоёв.
Сериализация и валидация: DRF использует сложные сериализаторы, в то время как Pydantic позволяет валидировать данные проще и быстрее, без лишнего кода и классов.
Минимальный overhead: FastAPI не заставляет писать кучу кода для простых задач. В DRF слишком много абстракций: роуты, сериализаторы, вьюшки. FastAPI — это минимум магии и максимум контроля.
Документация без настроек: FastAPI автоматически генерирует документацию (OpenAPI/Swagger). В DRF для этого нужны дополнительные библиотеки и настройка.
Зависимости и деплой: FastAPI требует меньше зависимостей, тогда как Django тянет за собой кучу лишнего, особенно если ты строишь только API.
Чистая архитектура: Django + DRF завязывают бизнес-логику на фреймворк, создавая монолит. FastAPI легко позволяет строить систему по чистой архитектуре: API отдельно, бизнес-логика отдельно, никаких жестких зависимостей.
Тестирование: В Django тесты сложнее из-за многочисленных слоёв (запросы, сериализаторы, ORM). FastAPI даёт писать чистые юнит-тесты без мокинга всей системы.
Сотни тысяч строк, каждый день. Ты и твои дети будете использовать эти программы, причмокивая и прося добавки.
Ясненько)
Нихуя се треснул.
Сайта достаточно.
Вакух по запросу "питон" овердохуя, другое дело что большая часть это всякий ml и qa, которые для вката и правда такое себе. А чем ещё зная его заниматься можно, какие-нибудь парсеры-хуярсеры на фрилансе писать или кулхацкерить?
Набазарь за питон на бекенде у реддита.
> но процентов на 10 ниже, чем на питоне и на 20, чем на джав
С ума сошёл? Уже 3-5 лет как питонисты стоят дороже джавистов. В любом же около ML проекте хотя видеть питониста, в большинстве Data напрвления питонисты.
>>285853
Добавь json в игнор mypy.
>>306045
>оцените ебанутую идею
Зачем учить питон для этого. Просто посиди пару дней с чатГПТ
Если интересно, то уважение. Не слушай этого >>306183
>>309596
Мы ищем человека со знаниями AWS StepFunction, AWS DynamoDB, ElasticSearch, python, дальше думай сам
>В любом же около ML проекте хотя видеть питониста
Так это не вебмакака крудошлёпская, это аналитик/датасаентист какой-нибудь, которому питухон нужен чтоб дёргать всякие pandas и tensorflow. Питухон - даже не сотая часть его экспертизы, ему не за питухон платят.
Вот тут дикий+. Нейросети туда же, там на питоне только обертка.
>Питухон - даже не сотая часть его экспертизы, ему не за питухон платят.
А есть профессии, в которых знают только за знание языка?
Все по факту, но чем Django + DRF мешает разделению на слои и вынесению бизнес-логики?
Зачем в принципе в эпоху чатгпт чего-то у людей спрашивать, когда речь идёт о каких-то деталях апи?
Есть профессия вебмакаки - математика нинужна, в компуктерах понимать ничё не надо, сиди себе кнопки крась да жсоны перекладывай с референсом очередного модного ФРЕЙМВОРКА под рукой. Справится даже клинический идиот при должной сноровке.
Чучело-ебучело, а где в прикладном программировании надо понимать в компутерах и в математике?
Лол, ты обиделся на меня штоле, неженка ебаная? Ты спросил - я ответил. Пошёл нахуй.
а бидон так вообще перешёл во всякие там мл и ии штуки
мнение?
Всем проектам на джанге что я видел было не больше пяти лет отроду на момент начала моей работы с ними, и пилились они для микрокабанов с полутора юзерами, так что хз на счёт легаси и корпората... другое дело что это не мешало тем проектам быть ебучей лапшой, но это из-за питонистов а не из-за питона или джанги
>но это из-за питонистов а не из-за питона или джанги
Ну хз. Если они поголовно такие, то видимо такая вот новая норма, такой стандарт качества.
Да всё что угодно, что быстрее питона/руби. .нет точно не для лихих молодых стартапов, там корпораты только. А остальное это наверно всякие жс/тс, го
На каком уровне нагрузки питон тормозит?
> .нет точно не для лихих молодых стартапов, там корпораты только. А остальное это наверно всякие жс/тс, го
Переведи.
>На каком уровне нагрузки питон тормозит?
На любом абсолютно
Самый медленный язык же (медленнее только руби, если мне память не изменяет)
А на чем пишут?
>Самый медленный язык же
Лол это не аргумент. Как будто бы кого-то ебёт, что страница сайта откроется на 100 или 300 миллисекунд позже. Если бы ты говорил про суперкомпьютер стоимостью 100 миллионов долларов и там нужно перемножить матрицы максимально быстро - тогда да.
А веб..... нуууууу блять и чо? Щас железо всё равно копеечное. Я могу скупить да хоть тысячу серверов-калькуляторов за 2 копейки и они любую нагрузку выдержат, так что мне похуй.
Ясно. Ты питон сам руками трогал? Очередной пиздун Интернетный.
>медленнее только руби
Симфони и ларавел выдает плюс минус такой же или худший результат чем фастапи.
>Самый медленный язык
Питон это скрытый гем прграммирования, он как Прометей прикованный GILом к скале одного потока, но ученые ставили опыты и отпускали Питон в свободную работу и он показывал скорость ровно в 2,71 раза быстрее асемблера.
>Симфони и ларавел выдает плюс минус такой же или худший результат чем фастапи.
Щас бы микрораздатчик жсона с фулстек фреймворком по производительности сравнивать...
Нашел такое на стаковерфлоу - https://stackoverflow.com/questions/50947022/django-crispy-forms-hide-fields-conditional-on-other-field-value
Но не понимаю в
> some_name = models.ForeignKey(key_name, on_delete=models.CASCADE)
Что тут должно было быть вместо key_name
Подскажите, пожалуйста!
Коллеги, подскажите плз вопрос по камере HikVision iDS-TCM203-A. Не могу разобраться, как с неё вытянуть номер автомобиля
https://stackoverflow.com/questions/79141957/how-to-capture-car-license-plate-by-using-hikvision-isapi-ids-tcm203-a-camera
Что такое фастапи? Зачем нужен?
Имеется понимание некоторых предметных областей, умение анализировать и описывать бизнес-процессы, есть опыт внедрения готовых решений, ручного тестирования доработок и прочая хрень.
psycopg2.OperationalError
ваще 0 инфы нашел годной, помогите пожалуйста
Это недостаток питона?
Поставь binary вариант пакета.
Стоит учить питон?
Почему задумываюсь - хочу откликаться на большее количество вакансий, небольшой плюс мне в карму от работодателей, что я три ЯП буду знать.
>что я три ЯП буду знать.
На самом деле всем похуй, сколько ты там отвёрток потешных выучил, джуняра. Выучить синтаксис очередной императивной скриптовой дрисни плюс нужную тебе библиотеку чтобы get the job done - три дня максимум при наличии схожего опыта, который у любого человека, занимающегося программированием дольше пары месяцев, подразумевается по умолчанию. Вот если бы ты сказал "я знаю СИСИПЛЮС" - это могло бы ещё сыграть, а питухон - это ничто. Может ты ещё и линукса в глаза не видел и шеллскрипт написать не можешь? Как тебя вообще на работу взяли?
Да выучи хоть 100 языков и откликайся на все 100 тысяч вакансий. Что толку от количества, что изменится от того что ты дополнительные языки выучишь. Ты начнёшь какие-то новые сайты делать? Качественно же ничего не изменилось. Твои сайты от этого стали что... быстрее? Красивее? Надёжнее? Это просто дрочка ради дрочки. Я бы тебя понял, если бы ты учил ради внедрения нейронок или биг дата или чего-то ещё. Нууу блять... ради вакансий... а тебе чё мало вакансий что ли? На пхп пол-интернета работает. И тебе всё равно этого мало? Проблема только у тебя в башке. Тебе повсюду мерещется мало вакансий. Дай тебе хоть 100 тысяч вакансий, ты всё равно скажешь что этого мало, и хорошо бы хоть миллион вакансий иметь.
- здратути, верно, мы работаем исключительно на пхп+ларавел, но убедите нас что вы лучше других кандидатов
- ну я еще питон знаю
- вы приняты
Лол, так все и будет.
про MLops что-нибудь слышал, маня? Там как раз нужны только навыки работы с инфраструктурой + питон или питон + общее понимание ML.
Тебе когда МЛ инженер выкатил модель. Она сразу подключается в систему и начинает работать? Или к ней надо прикрутить ручки и ножики.
И вот часто бывает, что менеджер или CTO думает: вот у меня МЛ -> МЛ на питоне -> Его надо подключить к сайту (и написать тонны бизнес логики) -> сайт надо сделать -> выберу питон, так как он уже есть у МЛ ребят. И вот так питон может оказаться в любом проекте.
ETL/ELT это на 50% питон, сейчас ЛЮБАЯ средняя компания имеет etl инженеров, а крупная имеет сотни их.
Вы слишком зациклены на том, чтобы писать крад. Посмотрите поинтереснее вакансии
К чему ты это насрал? Чел написал что питон для этого нужно знать на уровне хелловелд.
>Мы ищем человека со знаниями AWS StepFunction, AWS DynamoDB, ElasticSearch, python, дальше думай сам
Лол это как раз я. Правда там не эластик, а opensearch. И я на typescript/rust пишу.
>Там как раз нужны только навыки работы с инфраструктурой
Инфраструктуру можно на любом языке писать. Там как правило языков 6 основных - TypeScript, JavaScript, Python, Java, C#/.Net и Go. Принципиально инфраструктурный код ничем не отличается от того же typescript.
>питон + общее понимание ML.
Ну тут согласен, ml сильно зависит от питона. Тот же dbt, pyspark, ddt и прочее... Но аналогичные же решения есть и на Scala, Java, можно даже замутить etl на R. Подключаешь sparkR, dremio и всё будет плюс-минус также работать.
Не нужна.
В анальные шлюхи.
Типы не нужны
Попробуй в хаскель.
Никому не нужный парашевод пытается запрячь наивных сосачеров айтишничать на его параше для пидорнутых за спасибо, спешите видеть. Чувак, ты опоздал лет на 10, "бот в тг" и "движок для борды" уже недостаточно, чтобы найти РАБотку обоссанным джунярой за 40к и получить социальный лифт, аноньчикам нет смысла работать на благо твоей параши. Возвращайся на двач, тут все твои друзья.
Плюсы питона
- более строгая типизация чем в баш
- более интересные структуры данных, не надо ебаться с jq если надо распарсить json\yaml.
- более гибкие функции (бесит, что в баш функция может сделать только одно echo в конце)
- либы под любой пук уже написаны
Минусы питона
- классы мне нужны
- ебань с отладкой
- то что в баш решается в одну строку на 5 пайпов, в питоне это пол страницы кода
- питон не так чтобы очень быстрый по сравнению с башем, на операциях с файлами, плюс сам питон интерпретатор стартует очень медленно
баш это просто список команд, в который долгое время слоями приляпывали расширения и элементы яп.
Плюсов по сути нет, имея искаропки питон или перл.
Попробуй может перл, кстати, он намного ближе к шелл скриптам и там куча всяких шорткатов для типовых шелловых задач.
Я на перле писал в начале-середине 2000-х, и не хочу погружаться в эти вайбы опять.
У меня на баше и так все на функциях с локальными переменными.
По быстродействию всё равно все упирается в ОС (например рестарт сервиса это тормоза systemd). А так одинаково - баш быстро стартует но тормозит на форках и вызовах сторонних программ, а питон медленно стартует зато быстро работает.
Я прям хз зачем в подобных задачах измерять скорость.
Но скорее всего пайплайны с вылизанными кореутилс будут быстрее питоньих итераций в общем случае. Но эти всякие тесты башевские это адовая дрисня после нормального яп. Наверное, привычка нужна.
Что насчет го?
Для скриптов перл топ. Особенно в плане работы с логами/текстами дает питону пососать. Во всем остальном сосет у питона.
>Я на перле писал в начале-середине 2000-х
Уверен, ты делал это неправильно, как и большинство пехопешников, дорвавшихся до перла.
даже Баш пойдет
Насмешил содомит.
Завтавлял бы вкатуна писать код за спасибо и гнобил по преколу, а потом послал бы нахуй.
Пиздец, дедовщина в айтишечке.
Зачем мне перегревать рынок и рыть себе яму?
Чтоб потом этот джун меня подсидел?
Я вообще зарёкся что-то кому-то объяснять, обучать. На спец форумах помогаю советом иногда, но не разжевываю джунам, а как коллега с коллегой, на определенном высоком уровне понимания предмета.
Да и как правило обучают джунов такие же джуны+, с опытом работы года 2. Это гнилая тема.
А что ты ждёшь от менторства? Мотивации? Чем тебе чатжпт не ментор?
Мне интересно, как это работает со стороны опытного человека, потенциального ментора. Интересно ли ему делиться знаниями, если да, то в какой форме и как бы он в теории выбирал себе подопечного и т.д.
Обучал бы чувака который искренне хочет кодить на емакс лиспе потому что он шизик с горящими глазами. Нормиблядское заводобыдло, которое хочет по-быстрому выучить ПИТУХОН и РЕКТАЛ.ДЖЭЭС чтобы стать УСПЕШНЫМ формошлёпом 400к в наносекунду, годится только для того, чтобы запрячь его бесплатно заниматься безблагодатным говном, которое чатгопоте доверять пока страшно, а самому делать не хочется.
Не все вкатуны нормибляди же. Очень много зумеров домашних или скуфов двачероподобных, которые работают на хуёвой работе.
Если тебя джун может подсидеть, то нахуй ты вообще нужен?
>После джанго - долго.
>А так вообще пары дней хватит.
Так какое из этих двух противоположных утверждений истинное?
Ну нихуя себе, наверное с рыночком что-то случилось...
square2 = lambda el: elel
result = map(square2, list_of_smth),
end_time = time.time()
execution_time = end_time - start_time
print( 'map', execution_time )
start_time = time.time()
def square(elements) -> list:
result = []
for el in list_of_smth:
el = el*el
result.append(el)
return result
result = square(list_of_smth)
end_time = time.time()
execution_time = end_time - start_time
print( 'foreach', execution_time )
map 14.047540426254272
foreach 10.371117115020752
Ты просто неосилятор. Перловый код в 10 раз компактнее и нагляднее, чем питоновый. И нет, я не говорю про код-гольф приколы, а элементарно парсинг строк регулярками, всякие map-grep-reduce пишется намного проще.
Накладные расходы на вызовы блямбы скорее всего.
ну так в этом и каеф погромирования
Анон, зачем это? В чем бизнес логика?
Зачем на опубликованом объявлении нажимать опубликовать?
Эти объявления не опубликованы, они в архиве, скрипт их достаёт с архива и активирует
>всякие map-grep-reduce
Более того, можно ещё и самому сабу с такой семантикой сделать:
sub foo (&;@) { my $code = shift; ... }
foo { do_something @_ } qw/bar baz qux/;
Но питухонодебилу это не надо, у него две извилины. ИФ ГОВНО: ЕЛС МОЧА - потолок его интеллектуальных способностей. Собственно, все популярные скриптовые язычки, появившиеся после перла (питухон, руби, пехопе, моча/жопаскрипт) - попытка сделать перл, на котором смогут писать даже дауны, оригинальный перл осилить неспособные по причине умственной отсталости. Питухон - наиболее наглядный пример такого поделия, что и видно по количеству гречи с говнокурсов.
>ЦЕ :::\\\\ юзерс
>текст равно инпут('введите хуйню')
В виндусе не поддерживаются аргументы у команд или ты даблкликом запускаешь свой скрипт, потому что цмд.екзе слишком отвратительное, чтобы всерьёз им пользоваться? Это же ужас а-ля лаба2, ну сделай ты по-людски.
Нахуя вы селениум дрочите? У Avito есть нормальный RESTapi без человеческой документации, запросы которого можно спалить в отладчике браузера.
Это говно буквально не способно выполнить параллельно элементарную сука вычислительную задачу. Просто блять циферки сука посчитать. Не дрочиться с асинхронным IO, просто сука 2+2.
Самый апофеоз хуиты - это ProcessPoolExecutor. Который умудряется выполняться МЕДЛЕННЕЕ, чем в 1 поток.
У всех остальных скорость не отличается от 1 потока.
Не язык, а высер имбециала.
Сука, надо было сразу на жаве писать, нет блять, имел тупость подумать, что петухон хотя бы тут не обосрется.
Обновись до 3.13 и выруби гил, если тебе прям хочется CPU bound считать ебаный дебил.
Это какой питон? В третьем map возвращает генератор и времени должно быть примерно ноль если не добавить еще сумму или что-то такое.
Ты долбоеб, мы про перл говорим? Регулярки и в фитоне есть.
Использую Arduino Micro
ОС windows 7
Заменил в boards.txt usb_product на имя прибора, которое мне надо чтобы отображалось. В устройствах и принтерах отображается это имя, да, но как через софт это имя получить я не догоняю. Надо чтобы я мог его отфильтровать от других com-соединений, чтоб показывало только мою железку, может это можно и иначе как-то сделать?
Железка используется втыкаясь в комп, не автономно.
Софтина работающая с контроллером написана на python, сканирую порты через serial.tools.list_ports.comports(), параметры класса дают и pid, и vid, и производителя, и че хочешь, но имени, которое я указывал в usb_product - нету.
Гуглил, да не нагуглил.
Попердолься для начала с USB Device Tree Viewer
https://www.uwe-sieber.de/usbtreeview_e.html
И че мне в нем сделать надо? Ну он мне инфу выдал о порте, в Product String указано имя которое я указывал в usb_product
Сравни все параметры с теми которые передаешь, переткни в другой порт, правильно ли имя читается с файла
>асинхронным IO
>это говно буквально не способно выполнить параллельно
>ProcessPoolExecutor
Т.е. ты ни про гил не слышал, и не знаешь как трединг питухона работает. Получается что ты обезьяна, которая калькулятором гвозди забивает и визжит что инструмент плохой. Это даже не уровень баристы-вкатуна, это уровень скрипто-киди или даже ниже, не позорился бы так лучше в тематике.
Ну имя там такое, которое я и указывал. Чего мне делать то с этим? Как мне его в python'e получить?
Вот типа эта софтина это имя умеет читать. Как она это делает и как это сделать мне?
Я слышал про это говно, чёрт, именно поэтому использую разные пулы из мультипроцессинга, не мультитрединга. Мне даже код пришлось изменить, убрать лямбды, чтобы этот кал вообще запустился и не падал на процессах. При одинаковом апи на тредах запускался, а на процессах нет.
В итоге нихуя, никакой разницы с тредами, все так же дробится в одно яичко.
Ебал я этого петухона в рот короче.
Иди нахуй.
Питон через командную строку работает, нужен MS DOS
>Самый апофеоз хуиты - это ProcessPoolExecutor. Который умудряется выполняться МЕДЛЕННЕЕ, чем в 1 поток.
>>324116
>даже код пришлось изменить, убрать лямбды
>При одинаковом апи
Не хочу даже знать, что ты там наговнокодил, но по всей видимости ты конченный ФРОНТЕНДЕР-спермоблядок с IQ 70 и знанием полутора отвёрток и даже не понимаешь, чем треды отличаются от процессов и что процессы даже не шейрят стейт. Неудивительно, что выбор технологии у тебя из ПАЙТУХОН и ГО - эталонное модное говно для зумеров и гречневых даунов с курсов скуфбокса.
> Встречаем новый революционный Питон 3.13. Питон встаёт на путь избавления от GIL. Подключают JIT технологии. У нас появляется надежда догнать и перегнать C++. Или хотя бы Rust/Go
На сперме не работает, к сожалению, после 3.8
Только на винде (причём желательно pro edition), сорян.
Щас бы в эпоху чата гпт такие вопросы у людей спрашивать
Вываливая подобную шизофрению, ты только больше расписываешься в том, что вообще ни хуя не понимаешь что делаешь.
>ProcessPoolExecutor
Не знаю что ты там наговнякал, но судя по всему - человеческий фактор - главная уязвимость твоей программы. Если ты измеряешь скорость простого матана, 2+2 в ProcessPoolExecutor, то у тебя больше времени будет потрачено на накладные расходы нового процесса, чем на сам матан. Запускай инсты заранее и используй только решения с нумпи.
Я сразу распаковываю же в том коде, видимо макаба астериск сожрала, поэтому не видно
*map(print, ["its", "kind", "of", "magic"]),
Рассказал бы что ли поподробнее анончик.
Что знаешь, умеешь? Как и сколько обучался начиная с нуля? Есть проекты/практика?
Какие ищешь вакансии, где ищешь? Сколько собеседований за сколько времени было? В каких компаниях?
480x270, 0:07
Это классическая дилемма начинающего разработчика, особенно на этапе поиска первой работы. Вот несколько советов и размышлений:
1. Почему не получается с Django/DRF?
Недостаточно навыков: Возможно, нужно подтянуть уровень. Например, изучить более сложные вещи: асинхронность в Django, оптимизацию запросов, работу с Celery.
Плохая практика поиска работы: Резюме, портфолио, GitHub — всё это играет роль. Убедись, что у тебя есть проекты, демонстрирующие навыки Django и DRF.
Низкий спрос в регионе: Django может быть менее популярным в некоторых регионах. Посмотри вакансии на удалёнку.
2. Стоит ли переходить на Java Spring?
Spring сложнее: Java Spring требует изучения не только Java, но и всей экосистемы, которая гораздо шире и сложнее, чем Django.
Длинный путь: Если человек только начинает с Python, переход на Java добавит кучу новой информации, что может замедлить прогресс.
Потенциал: Spring популярен в крупных проектах, банковском секторе и корпорациях. Если есть тяга к этому — это может быть полезно, но нужно понимать, что путь не быстрый.
3. А как насчёт FastAPI?
Переключение легче: FastAPI — это тоже Python, но с другим подходом (асинхронность, работа с REST API).
Совместимость с Django: Можно комбинировать их в проектах, использовав Django для административной части и FastAPI для API.
Растущий спрос: FastAPI набирает популярность, особенно в проектах, где важна скорость разработки и производительность.
4. Совет: что делать?
Не бросай Django/DRF сразу: Развивай своё портфолио, участвуй в open-source проектах, ищи заказы на фрилансе. Это покажет работодателю твой практический опыт.
Осваивай FastAPI параллельно: Это не потребует от тебя много времени, а знание двух популярных инструментов расширит твои возможности.
Spring — опция для долгосрочной перспективы: Если душа лежит к Java и большим корпоративным проектам, переходить на Spring — логичный шаг. Но сначала стоит уверенно встать на ноги с Python.
Главное — не метаться слишком быстро. Найди одну область и добейся уверенности, прежде чем переходить к другой.
480x270, 0:07
Это классическая дилемма начинающего разработчика, особенно на этапе поиска первой работы. Вот несколько советов и размышлений:
1. Почему не получается с Django/DRF?
Недостаточно навыков: Возможно, нужно подтянуть уровень. Например, изучить более сложные вещи: асинхронность в Django, оптимизацию запросов, работу с Celery.
Плохая практика поиска работы: Резюме, портфолио, GitHub — всё это играет роль. Убедись, что у тебя есть проекты, демонстрирующие навыки Django и DRF.
Низкий спрос в регионе: Django может быть менее популярным в некоторых регионах. Посмотри вакансии на удалёнку.
2. Стоит ли переходить на Java Spring?
Spring сложнее: Java Spring требует изучения не только Java, но и всей экосистемы, которая гораздо шире и сложнее, чем Django.
Длинный путь: Если человек только начинает с Python, переход на Java добавит кучу новой информации, что может замедлить прогресс.
Потенциал: Spring популярен в крупных проектах, банковском секторе и корпорациях. Если есть тяга к этому — это может быть полезно, но нужно понимать, что путь не быстрый.
3. А как насчёт FastAPI?
Переключение легче: FastAPI — это тоже Python, но с другим подходом (асинхронность, работа с REST API).
Совместимость с Django: Можно комбинировать их в проектах, использовав Django для административной части и FastAPI для API.
Растущий спрос: FastAPI набирает популярность, особенно в проектах, где важна скорость разработки и производительность.
4. Совет: что делать?
Не бросай Django/DRF сразу: Развивай своё портфолио, участвуй в open-source проектах, ищи заказы на фрилансе. Это покажет работодателю твой практический опыт.
Осваивай FastAPI параллельно: Это не потребует от тебя много времени, а знание двух популярных инструментов расширит твои возможности.
Spring — опция для долгосрочной перспективы: Если душа лежит к Java и большим корпоративным проектам, переходить на Spring — логичный шаг. Но сначала стоит уверенно встать на ноги с Python.
Главное — не метаться слишком быстро. Найди одну область и добейся уверенности, прежде чем переходить к другой.
Ниправда працесы (ониже патоки) это када многа сразу всево делоеться эта быстро и круто мне на курсах скозали! И чем большы працесов создаёш тем быстрее жсон перекладывоеться!!1
Ещё на телефон сфоткал бы.
>>324555
>>325037
>>323852
ВСЁ БЛЯТЬ. 50к симуляций за 8 секунд. Петухон на одном яичке умудрялся это считать полчаса.
Все ядра загружены, потребление памяти приблизительно нулевое нахуй, потому что все дерьмо передается по указателям (питухон умудрялся выжирать по 4 гига, хотя я честно пытался там тоже все максимально по ссылкам передавать).
За 2 дня освоил GOвно и нахуякал симулятор. Какой же пиздатый язык. С петухоном не идет ни в какое сравнение. Типизация строгая, дженерики, есть доступ к указателям, что дает возможности что угодно передавать по ссылке, но при этом не надо чистить говно вилкой как в крестах. Синтаксис лаконичный, многопоточность - мое почтение. То, что в петухоне делается с анальной болью (вообще не делается), тут делается в 2 строчки нахуй.
При этом я даже не компилировал эту хуйню, просто жму go run и код запускается как в интерпретаторе.
Охуел, что это единственный язык, который я знаю, где объекты можно передавать по значению, лол. А все потому что нет никаких блять объектов, есть СТРУКТУРЫ из примитивных типов или указателей на другие структуры, эта хуйня легко копируется. Нет классов, конструкторов и прочей параши, вообще идеально.
Решительно готов писать дальше на ГО, питухон идет нахуй. Всем рекомендую.
Конечно будем смеяться всем тредом. Иначе для чего мы тут сидим. Давай говори.
>Итак, отсутствие _ означает, что метод является частью публичного API класса, а наличие _ служит сигналом: "Не трогать без необходимости".
Блядь почему у меня сразу возник вопрос - а мой хуй ты можешь потрогать без необходимости?
Ты мне, сопливому новичку, предлагаешь рыться в кишках асинхронности питона?
Мне бы книжку или гайд.
>питона
Нет, сишного кода, который питухон дёргает под капотом, пока ты пишешь свои хелоуворды. Хотя в питухоне, самом ЮЗЕРФРЕНДЛИ языке в мире, на удивление так никто и не сделал нормального эвент лупа с интуитивным апи, так что один хуй будешь ебаться с селектами напрямую, когда понадобится, например, неблокирующий и/о для сокетов. Прямо как в голых сях.
Какую книжку ты ожидал, дебил с курсов? Нет такой книжки, где тебе напишут "асинхронность - это когда многа всево и сразу делоеться и всё супир пупир быстро а синхронность гавно! Вау асинхронность крута, надо только сделать await ScalableRobustEnterpriseFramework.sdelat_zaebis_async() и ты сразу станеш мастиром асинхронности!" Хочешь ПРОСТА - ставь ФРЕИМВОРК, перекладывай жсоны и не еби мозги, ты же всё равно веб-дриснёй собираешься заниматься, уже видя себя успешным анальником 400к в наносекунду? Веб-кодиры в массе своей мало что понимают в асинхронности и прочих нюансах, они только знают ФРЕИМВОРК, большего от них не требуется для успешного закрытия тасок на перекладывание жсонов. Хочешь разбираться в вопросе - готовься напрягать мозги и читать многа букв на англицком, другого пути нет.
База.
>Какую книжку ты ожидал, дебил с курсов?
Ты почему агрессируешь тут на меня сидишь, хуила?
Я тут вежливо общаюсь.
Может, анон натыкался на книжку/гайды, в этом и был вопрос.
Ты зачем-то побежал срать хуету про зумеров? Зачем? У тебя с головой все в порядке?
Потому что ты залётный невежественный уёбок с курсов с розовой жижей вместо мозгов, не желающий слышать об отсутствии ИЗИ решения твоей проблемы
>Может, анон натыкался на книжку/гайды
Тебе намекнули недвусмысленно, что нет такой книжки. Айти и в частности то, что ты хочешь - это сложная хуйня не для всех, с которой надо основательно разбираться. Но ответ тебя не устроил, нет, дайте мне КНИЖКУ, где всё ПРОСТА, для НОВИЧКОВ и не надо думать! Ну хули с тобой поделать? Иди читай гайды от PajeetGPT на супир пупир питухон дотком, раз так сильно хочешь навернуть говна. Можешь ещё в ТИКТОКЕ материал поискать, зумерок.
Хуя у меня ноут троттлит. Тупо в полтора раза производительность падает. А тухлозион наоборот разгоняется под нагрузкой, лол.
Пикрил норм.
Шизов выше не слушай, это просто ебланы которые горят с того, что их профессия перестает быть ЭЛИТАРНОЙ и они перестанут лутать сотыги, аутируя за пекарней на самом деле никогда и не была, обычная профессия, не требующая сверхвысокого icq, просто в нее часто влечет закомплексованных кончей, вот и возникают такие побочные эффекты.
>не требующая сверхвысокого icq
Сильное заявление. Погромирование это чистая абстрактная логика. Т.е. деятельность напрямую зависящая от уровня интеллекта, ведь интелект это и есть логика и вывод. Другой вопрос, что много инструментов, например фреймворков, которые позволяют выполнять некую работу не напрягая мозг вовсе. По этой причине у людей часто бывает баттхерт, что бариста вкатун с интеллектом школьника, перекладывющий джосны считается погромистом прямо как ты,150 iq байтоёб. Впрочем, 150 iq красноглаз не стал бы так визжать и кидаться на людей как анон выше со своей сишной асинхронностью, он тоже скорее всего говночист с галеры, вымещающий свой стресс на мимокроках.
>перестает быть ЭЛИТАРНОЙ
С чего бы это? ИТ масштабируется за счёт инструментов, абстрагирующих сложность, однако эти инструменты кто-то должен разработать. Это точно не перекладыватели JSON.
>эти инструменты кто-то должен разработать
Несоизмеримо значительно меньшее количество людей, чем барист, которые этими инструментами будут пользоваться, что практически полностью вымещает СЛОЖНОСТЬ из профессии и обесценивает ЭЛИТАРНОСТЬ. О чем и писал анон выше.
Сложность этой работы не выше, чем сложность работы любого другого инженера.
Инженером ты можешь выучить свой стек и до пенсии в НИИ Рога и Копыта чертить втулки уже по мышечной памяти, а погромистом ты до старости должен будешь переучиваться, чтобы не отставать от прогресса.
Ты делаешь вот это утверждение. Я хочу спросить, ты как это измерил?
Я как минимум отмечу, что программисты ещё и реализуют свои проекты, помимо просто проектирования.
>что практически полностью вымещает СЛОЖНОСТЬ из профессии и обесценивает ЭЛИТАРНОСТЬ
Ты бариста что ли? Как это, вымещает сложность?
Ну, вон, Нетфликс не выдержал трансляции боя Тайсона, а там инженеры получше, чем много где. Им просто забыли сказать, что всю сложность выместили, и надо просто было сделать import python.framework.pizdatiy_stream.
Быдло уймись. Думаешь, кому-то итт не очевидно, что ты набросился на нюфаню с асинхронностью только для того чтобы свое чсв потешить. Унижать других для того чтобы почувствовать свою значимость - поведение жалкого отброса.
>Быдло уймись.
/bратан, прежде, чем оскорблять людей на анонимном форуме, попробуй осознать мысль, что тебе могут отвечать разные люди.
>import python.framework.pizdatiy_stream.
>ScalableRobustEnterpriseFramework.sdelat_zaebis_async()
>разные люди
Как скажешь, зайчик.
Вы только поглядите на эту обиженку, уже полдня здесь ошивается-зашивается.
>что практически полностью вымещает СЛОЖНОСТЬ из профессии и обесценивает ЭЛИТАРНОСТЬ.
Тебе же ясно было сказано:
>Хочешь ПРОСТА - ставь ФРЕИМВОРК, перекладывай жсоны и не еби мозги
Здесь не было ни намёка на недостаточную илитарность веб-кодиров или что там ещё узрел твой воспалённый мозг, чмо ты закомплексованное, лишь сухая констатация факта, что баристам, которые хотят вайти и получать заветные 400к в наносекунду, достаточно открыть референс ФРЕИМВОРКА, чтобы освоить материал на достаточном для перекладывания жсонов уровне - книжечек для этого либо не пишут (ибо фреимворки в пайтухон и джээс устаревают каждую неделю или типа того), либо они говно и их чтение нерационально.
Ты какой-то очень тупой, даже с перекладкой жсонов вряд ли справишься, серьёзно, не надо оно тебе. Попробуй в пятёрочку вкатиться.
не бомбит
>бо фреимворки в пайтухон и джээс устаревают каждую неделю или типа того
Борщехлеб, простой вопрос: ты вообще в ИТ работал? Или ты чмо из НИИ кислых щщей вроде шизика-столярова?
Какую же ты хуйню несешь. Услышал где-то мемы про устаревающие за неделю фреймворки и сидит с серьезным видом повторяет.
Устройся на работу уже наконец, а не сиди на шее у мамки, и поймешь, что кишки С нахуй никому не сдались, как и твои обоссаные алгоритмы.
Эксперт, зэпку озвучь?
> Недостаточно навыков: Возможно, нужно подтянуть уровень. Например, изучить более сложные вещи: асинхронность в Django, оптимизацию запросов, работу с Celery.
Нихуясе требования для ПЕРВОЙ работы. Вы там в ращке ебнулись?
> Spring сложнее: Java Spring требует изучения не только Java, но и всей экосистемы, которая гораздо шире и сложнее, чем Django.
Какой конкретно?
Какой фреймверк лучше использовать для веб интерфейса устройства с аутентификацией? Джанго это оверкилл.
>Нихуясе требования для ПЕРВОЙ работы
Нам на дне карьеры в вузе рассказывали, что для того, чтобы тебя взяли джуном, нужно иметь знания мидла.
Это было 4 года назад
Это раш каособенности (спамлист) какие-то? А как стать мидлом? И главное на какую это зп?
> А как стать мидлом
Нужно обладать знаниями мидла и опытом мидла.
> И главное на какую это зп?
Хз, это говорил чел из говноаутсорскомпании симбирсофт. Нестабильные тыщ 80 в зависимости от того как ебашишь думаю, не больше.
> СТАТЬ КАК, СУКА?
Получаешь знания мидла, становишься джуном, зарабатываешь опыт несколько лет, становишься мидлом... Хотя в текущих реалиях ответ скорее NEEQAQUE
> И как получилось что джуны у вас не нужны?
Почему не нужны?
> Получаешь знания мидла,
КАК, БЛЯДЬ? Чего я все из тебя клещами тяну?
> Хотя в текущих реалиях ответ скорее NEEQAQUE
Что за реалии?
> Почему не нужны?
Ну ты же сам говоришь что надо каким-то хуем дотянуть до мидла.
> Ну ты же сам говоришь что надо каким-то хуем дотянуть до мидла.
Нет, я говорю, что тебя возьмут джуном, но знать ты должен как мидл. Ты не должен быть мидлом, но должен знать примерно то, что знают они.
> КАК, БЛЯДЬ? Чего я все из тебя клещами тяну?
Ну откуда я знаю, чё ты из меня вытянуть пытаешься. Ты не знаешь как выстроен процесс обучения? Берёшь книжку какую-нибудь, если совсем хлебушек и ничего не знаешь, потом пишешь проект и постепенно навешиваешь на него новые всё более сложные фичи. Потом ещё проекты делаешь, со временем знания наберутся.
> Что за реалии?
Перенасыщение рынка, даже синьки работу годами найти не могут.
> Ну откуда я знаю, чё ты из меня вытянуть пытаешься. Ты не знаешь как выстроен процесс обучения? Берёшь книжку какую-нибудь, если совсем хлебушек и ничего не знаешь, потом пишешь проект и постепенно навешиваешь на него новые всё более сложные фичи. Потом ещё проекты делаешь, со временем знания наберутся.
Аааа, то есть джун должен бесплатно учиться в интернете в отрыве от реальной работы и каким-то хуем дотянуть до мидла? Не работая в фирме, не зная как это организовано? И что, люди идут на это? И получается?
> Перенасыщение рынка, даже синьки работу годами найти не могут.
Неебу кто такие синьки. Это после гойды когда работу за границу закрыли?
Кстати, а что с теми кто работал? У меня один давний интернет знакомый работал на заграницу по удаленке. 2.22 выдал ватное бинго. Потом ему переводы на часть счетов санкциями закрыли, но какой-то остался. Интересно что с ним сейчас.
Я так понимал, что мидл - это опыт работы. А как ты сука можешь получить опыт работы без работы??
В одно рыло ты засыпешься гарантированно
Не понимаю, о чём ты. Я сижу в тематических чатиках, на харкаче вот, тоже сижу, даже если ирл спрашивают, я почти всегда готов помочь.
Но это не относится к моментам, когда кто-то спрашивает какую-то очевиднейшую хуйню. Бывает просто пишешь вопрос, который тебе задают, в гугле, и там в самой первой ссылке ответ. К нпс, которые думают, что им всё должны принести на блюдечке, отношение подобающее.
>инструментов, абстрагирующих сложность
Чем больше этой хуйни, тем легче выстрелить себе в ногу в плане того, что эта хуйня под капотом будет заниматься вычислительно неэффективной хуйней, потому что ты не очень понимаешь, как оно работает.
Пример - реализация "массивов" в большинстве высокоуровневых языков типа петухона, пхп, жс. Подсказка: там это НЕ массивы со всеми вытекающими.
Поясни слова. Не всм ты лох, а прост интересно послушать. Дело в том, что как я понимаю в Питоне все - объект сверхкласса. А класс в питоне сам по себе это __dict__ из методов, атрибутов, неба и Аллаха. Чем не массив?
Ну я ж и говорю, дешевый нищий скот готов ехать хоть чучелом, хоть тушкой, лишь бы вайти.
Для меня это хобби, на сей момент денег не принесшее. Занимаюсь скриптингом и скрепингом. Меньше часа на любой фикс очень редко ебался. Для нищего скота я наверно npc, да. Со многим говном разобраться можно только с гуглом и оверфлоу. А геморрой этого не стоит.
Бамп вопросу.
Если тебе нужна скорость есть инструменты типа нампи. Там все оптимизировано.
Суть тупняка такая: я не могу понять как в pandas можно сделать самосоединение таблицы (см пик) по следующему условию: значения в полях Account и Period совпадают, а Rate отличается.
Cделать я это хочу для того, чтобы в строках, где Rate=0, заменить его ненулевым значением, взятым из строки с такими же Account и Period, чтобы далее сгруппировать всё по Account,Period,Rate и просуммировать поля Sum.
Если есть более простая последовательность решения данной проблемы, чем:
1) Самосоединение таблицы с последующим обновлением Rate=0 из левой части таблицы ненулевым значением из правой.
2) Удаление колонок правой таблицы.
3) Группировка и суммирование.
то подскажите, пожалуйста, в сторону каких функций смотреть.
Примечание: Строк с повторяющимися Account и Period всегда не более двух. Значения Rate в таких случаях либо одинаковые либо одно из них 0.
С группировкой и суммированием у меня проблем нет - groupby и agg работают отлично. Мне надо только понять в какую сторону смотреть, чтобы разобраться с обновлением значения Rate в тех слуаях, когда оно 0
Ну, не в квадрате, да. Просто если он сначала делает полный проход, чтобы сделать срез, сохраняет его в память, и только потом -- начинает обходить отдельную последовательность, то это два обхода строки вместо одного... Типа O(2N). А если делает генератор, то обходится просто O(N).
Чел, генератор выплёвывает результат и забывает, идет к следующему, а срез строки предполагает что тебе нужна новая строка с которой ты что-то будешь делаешь. Если бы срез забывал какие он символы последовательно выплевывает это было бы пиздец как неудобно. Тогда вместо со срезом надо было бы всегда использовать конструкцию, которая символы сохраняет.
А вот если тебе по каким-то фантастическим причинам нельзя делать срез строки - ты всегда можешь итерироваться сразу по его элементам. А с помощью itertools.islice ты можешь начинать итерацию сразу с нужного индекса.
Но обычно это излишне. Если у тебя в памяти строка на сто гигобайт и ты не можешь делать срез - это значит что у тебя хуево написана программа. В остальных случаях такой временный срез это ничтожная величина которая ничего не стоит ничего не занимает и быстро уничтожается gc. Как принято говорить - это нормальный ПИТОНИЧЕСКИЙ подход.
Спасибо.
Я просто увлёкса литкодом и после решения самостоятельно -- всегда заглядываю в едториалы (если доступны) и солюшенсы и там всегда отдельно проговаривается сложность и оптимальность алгоритма, вот и решил заморочиться c деталями.
>O(2N)
Это то же самое, что O(n) - суть в том, что это линейный рост. Константный фактор не учитывается. Любой вкатун это знает а сеньоры нет потому что в годы их молодости на собесах ещё не ебали алгоритмами и давали оффер за то что ты не даун.
>Я просто увлёкса литкодом
Чёт незаметно.