Питон-тред №171 /python/ 3284682 В конец треда | Веб
Тред, посвящённый языку программирования Питон, #171

Встречаем новый революционный Питон 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
1727618394.png93 Кб, 745x709
2 3284686
3 3284698
Питон - язык для написания 100 строковых утилит, не более

/thread
4 3284703
>>284698
А если мелкосервис на 300 строк, то уже нельзя на питухоне?
Вы извращенец.webm3,7 Мб, webm,
1280x720, 0:19
5 3284722
>>284698

>Питон - язык для написания 100 строковых утилит, не более


Держи в курсе.
6 3284852
>>284698
Ты застрял в нулевых, попробуй посмотреть что-то за пределами своего мирка.
image.png1,9 Мб, 1024x1024
7 3284861
Анончик, посоветуешь рес по питону для того кто уже сеньор помидор? Так-то питон очень просто, очевидно. Хочется заглянуть в дебри, без вот этого стандартного "х это переменная"
image.png87 Кб, 270x369
8 3284908
9 3284916
Йоба, тыща страниц.
Спасибо!
10 3285200
>>284703
Разбей на 3 и можно
image.png39 Кб, 1009x242
11 3285317
Аноны, использую алхимию для работы с БД на бэкэнде. В качестве БД - Postgresql (еще стоит прослойка в виде PgBouncer, но она не влияет на скорость).
Через Sentry trace view наблюдаю следующую картину - пик 1.
При каждом запросе к бэку происходит коннект к БД, который отнимает 80% времени. Включал пулер от алхимии, оставлял только ПгБаунсер - нихуя не меняется. В какую сторону смотреть и что гуглить?
Стек: Алхимия 2.0, asyncpg, PostgreSQL 16, python 3.12.
12 3285409
Сап разрабач, кто-то может объяснить нахуя нужен Poetry и актуален ли он вообще в 2024?
Я вот, к примеру, умею создавать окружения через venv. А Poetry, я так понял, больше нужен для создания пакетов под pip, чем для работы с виртуальными окружениями.
То есть зачем мне `pyproject.toml` если есть `requirements.txt`?
13 3285419
Уже 3 года долблюсь в .NET разработке, хочу перекатиться в питонисты, насколько реально сразу в миддла на новый стек попасть и куда лучше? В аналитики или бэкенд разрабы(Чтобы работа была максимально макакской и оставалось время на личные проекты)?

На питоне постоянно пилю что-то для души, да и на текущем месте частенько его для анализа данных юзаю
14 3285436
>>285419
Почему решил перейти?
15 3285477
>>285419
Куда тебе в мидлы сразу на другой язык, ты и на дотнете еще джун.
16 3285510
>>285419

>В аналитики


а ты дохуя математик или кто?
17 3285651
>>284698

>Питон - язык для написания 100 строковых утилит, не более


Правильнее сказать, что питон предназначит только для написания программ. Написанное невозможно читать и изменять, только дополнять.
18 3285755
>>285436
.NET рынок в РФ сдох, конкуренция высокая, вакансий мало, зп низкая, область применения душная, сам ЯП многословный и непрозрачный

Там путь один - красноглазить бэк в коллективе душных скуфов
19 3285756
>>285755
Я скорее всего скоро начну сисярпить в корпорации непосредственного зла. Уже предвкушаю хелло ворлд который полторы секунды запускается.

Че нынче по зп?
20 3285757
>>285477
3 года - коммерческая разработка на последнем месте работы, до этого были стартапы и фриланс
Прогаю я уже лет 8, начинал вообще с Си

Питон на текущем месте работы - второй ЯП, да и в куче пэт-проектов, в т.ч. коммерческих и командных я юзаю именно его

.NET намного обширнее, чем питон и сопутствующие технологии, причём половина вообще пересекается, не вижу проблемы в том, чтобы переходить на этот стек с понижением грейда
21 3285758
>>285756
.NET быстрее, чем тот же Python, да и бэк на нём вроде даже быстрее гошного

По зп, хз, от грейда зависит, но процентов на 10 ниже, чем на питоне и на 20, чем на джаве, ну, у синьоров-помидоров вроде как и везде

Готовься к куче абстракций ради абстраций и DI-помойки, ну и к охуительному в своей убогости интерфейсу VS, хотя, если есть возможность, то сразу на райдер перекатывайся
22 3285763
>>285758
Та норм, я скомпилил omnisharp и на емаксе его запустил. Полет нормальный удалил все к хуям.

Но dotnet run который тормозит это конечно пушка. С 2017 года ишью висит, и они такие "мы увеличи производительнность! Было 3 секунды, стало 1.3".

Объясните мне в чем прикол DI? Это такой фенси способ сказать что в функции можно передавать параметры?
23 3285766
>>285763
DI - штука, которая реализует IoC, типа, у тебя есть контейнер с гновном, ты в него регаешь всё-подряд, а там он через рефлекшон сам подсовывает зависимости куда надо и собирает тебе обьекты, всё в целом круто, до тех пор, пока туда не приходится лезть, или отлаживаться
24 3285767
>>285766
Ох, тыж ептыть. Что скрывается за IoC я знаю как это расшифровывается?
Алсо, нахуя это все?
25 3285768
>>285510
Ну типа того, хотя, матеша, которую я юзаю, не используется в дефолтной аналитике, я скорее обработкой сигналов занимаюсь

В любом случае, матешу заботать не сложно, даже проще чем сам питон, если бы это потребовалось
26 3285770
>>285767
IoC ваще нужен для солида, типа ты отдаёшь менеджинг зависимостей на уровень выше, т.е. у тебя их регает не класс, который потом их же и юзает, а какой-нибудь чел, который чисто за эти зависимости отвечает перекладывание ответственности, от которого легче не становится, хотя, кто-то говорит, что благодаря этому тестировать код легче, но я хз
27 3285772
>>285770
Любопытно что каждый ответ вводит новый термин.
Солид это SOLID? https://www.youtube.com/watch?v=7YpFGkG-u1w

> типа ты отдаёшь менеджинг зависимостей на уровень выше,


Ну то есть вместо того чтобы дернуть глобальную db.Shit() мы получаем db в виде параметра или как это на практике то выглядит?
28 3285781
>>285772
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/
29 3285795
Нужно сохранить веб-страницу в пдф (не как картинку, а с текстами и т.д.). Пробовал через pyppetteer, что-то делает, но не идеально. Какие есть годные варианты?
30 3285798
>>285795
Смотря что именно тебе не нравится
Всегда можно заюзать какой-нибудь конвертер типа https://pypi.org/project/pyhtml2pdf/
Но это подойдет только если на странице нет элементов, которые подгружаются динамически, обеспечит неплохую скорость

если на странице защита от ботов, то можно заюзать селениум, накрутив на него всякого говна типа undetected chromedriver

Что именно тебе в pyppetteer не нравится?
31 3285800
>>285798
Не, такие просто конвертеры не канают, надо именно скрин живой страницы из браузера. В паппетире криво получается, хотя я увидел, что он депрекейтнулся и они советуют playwright, пока его ковыряю на пару с гопотой, вроде получше уже.
32 3285853
Помогите разобраться, для чего вообще нужны эти ваши mypy, pyright, и другие статические проверятели типов. Написал я программу без зависимостей, даже без стандартной библиотеки, кроме dataclasses, typing, и collections.abc. Запустил 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

Теперь мне нужен парсер 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 охотнее предсказывал типы и показывал автокомплит имен без аннотаций. С приходом аннотаций все забили хуй на старый питон?
33 3285973
>>285781
Глянь видео в >>285772 если еще не.

В общем получается что единственное чем это отличается от любого другого языка, где ты точно так же просто передаешь параметры (например в гошечке ты можешь в контекст добавить любое свое говно и оно будет доступно везде, куда этот контекст передается), заключается в том, что магическая коробка через рефлекшн выясняет какие нужно параметры передать в метод и подставляет их сама из того что ты там где-то зарегал?
34 3286097
>>285419
правильнее перекатываться в Го, если более-менее с сетями дружишь

зарплаты выше, хрюши готовы отсасывать, работа есть не только в рашостане, а во всём мире. Сам язык может и говно, но люди как-то привыкают.
35 3286098
>>286097
Я тут только что установил себе на прыщи дотнет. Создал hello-world и сделал dotnet run. Полторы секунды. Этот кал просирается полторы секунды. На хелло ворлде. И эти люди что-то о го говорят. Пиздец.
36 3286245
Есть таблица в excel которую загружаю через pandas и у меня такой вопрос, как разбить строки на несколько по условию, например:

маша хлеб,молоко 250
миша мясо,мука 100

нужно чтобы стали

маша хлеб 250
маша молоко 250
миша мясо 100
миша мука 100
пример выдуманный, разделитель в данном случае запятая
image.png8 Кб, 313x193
38 3286333
>>286277
вот так сделал:
data['Продукты'] = data['Продукты'].apply(lambda x: x.split(','))
data = data.explode('Продукты')
39 3286412
>>286245

>pandas


Объясните мне зачем нужен pandas когда есть стандартный модуль sqlite3 ?
40 3286447
>>286412
Панда про датафреймы. Такой себе мини-эксель. А сквиртлайт это модуль для доступа к бд.
41 3286557
pip install PySide6
@
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'
@
Повторить, пока не начнётся бугурт

Причём голый питон эту хуйню видит, а всякие там пайчармы и вскоды, СУКА, ГОВОРЯТ, ЧТО НЕТ НИКАКОЙ БИБЛИОТЕКИ... Что делать, аноны, не подскажите?
42 3286607
>>286557
С дивана
что-то мне кажется что дело в venv ( https://docs.python.org/3/library/venv.html )
Там наверно часть поставилась в локальную venv, особенно если ты не из терминала линуха работал, а из терминала ide.
43 3286715
>>286557
from PySide6 import all
44 3286716
бля, май бед
from PySide6.* import all

>>286715
45 3286718
>>286715
Пробовал всë, и import PySide6, и from PySide6 import *, и вот так...
>>286607
У меня винда. Я ставил через кмд, через кмд в ide, через кмд в другой ide, в итоге проблема решилась, когда я поставил через настройки проекта в pycharm (в vs code всë ещë не пашет)
изображение.png2,3 Мб, 1024x1024
46 3286734
>>286718

Начни код с import pip; pip install
Если и это не поможет, проблема в либе и руках. Если работает - проблема в ИДЕ
16538168828740.jpg286 Кб, 810x1080
47 3286816
Почему ебанный поетри не хочет работать в шиндоус? Какого хуя ебанный пучарм Запрещенное по в российской федерации не видит блядь ебанный PATH для поетри когда я пытаюсь сделать проект сразу с поддержкой поетри. Ну почему все не может просто работать после установки на ебанной блядской одибиленной гукоподложзеной шинде.

Рабочий ноут на линукс минт, а на свой бытовой вторую систему лень ставить
48 3286872
>>285973
Да, всё так.
ХЗ как контекст в гошке работает, наверное что-то типа редакса в JS?
Вообще, скорее всего DI контейнеры - попытка найти баланс между приватностью и гибкостью, в и тоге получился кал
49 3286930
>>286412
у меня тоже была мысль загнать всё в бд и там обрабатывать, но экспортировать постоянно каждый шексель файл такое себе занятие. а pandas позволяет очень круто обрабатывать данные табличные и не надо каждый раз создавать разные базы данных для разнотипных файлов
50 3286970
>>285781
>>285767
>>285770
>>285772
>>285781
>>285973
>>286872
Эти ваши DI-хуяй и IoC-хуи абсолютно ненужное говно. Вместо того, чтобы дрочить свои техники пробрасывания пар (указатель на функцию, данные для функции) через сотни стековых кадров, используйте глобальный статический указатель на структуру со всеми "системами", работающими в вашей программе.
Вы ничего этими Паттернами-Хуяттернами не добиваетесь, абсолютно ничего. В типичном ПО >99% кода очень специфично, его невозможно переиспользовать, даже если обмазать свинью SOLID помадой.
Прекратите тратить свое и чужое время на ерунду.
51 3286988
>>286970

>переиспользование


Что-то как-то ты тухло ДИ понимаешь, на уровне ждуна

>тратить время


В нормальных фреймворках ДИ из коробки бесплатный

>используйте глобальный статический указатель на структуру


Твоя глобальная структура не решит проблему построения графа зависимостей. С ДИ нет разделения на зависимости и реципиенты - все сервисы и есть те самые зависимости и они одинаково в ДИ попадают и одинаково из него достаются через конструкторы.

>невозможно переиспользовать


Постоянно переиспользуется инфраструктурный код. Те же репозитории с запросами. Или обертки вокруг чужих либ.
52 3287002
>>286988

>Что-то как-то ты тухло ДИ понимаешь, на уровне ждуна


Какую проблему в программировании решает ДИ, как ты считаешь?

>В нормальных фреймворках ДИ из коробки бесплатный


"Я покрыл свою голову упругим материалом чтобы установленный у меня на лбу молоток на пружине не оставлял больших синяков когда я забиваю гвозди".

>Твоя глобальная структура не решит проблему построения графа зависимостей.


Выдуманная проблема. Что такое "граф зависимостей", и зачем его строить? Ты пишешь пакетный менеджер для python? Давно пора, потому что pip ужасен.

>Постоянно переиспользуется инфраструктурный код. Те же репозитории с запросами. Или обертки вокруг чужих либ.


Что такое "инфраструктурный код", и почему для него нужно "строить граф зависимостей" с помощью Объектно-Ориентированного Паттерна Инъекции Зависимостей? Такой же вопрос для "обертками вокруг чужих либ".
53 3287022
>>286872
Контекст это прост обычный объект, который положено первым аргументом передавать вниз по стеку. Обычная конвенция, никакой магии. В нем хранятся всякие таймауты и можно любое говно прицепить.
54 3287029
>>286970
Единственный кейс где вся это еботня необходима кмк, это для тестов.
Впрочем, не ясно что мешает создать этот глобальный контекст для прогона тестов. Разве что если они выполняются многопоточно, тогда это вероятно проблема.

Я предпочитаю прокидывать всякие глобальные сервисы как параметры, просто потому что тогда я вижу что функции нужно в одном месте. Впрочем, в реальности нужно обычно 2-3 сервиса (база, логгер, инфа о сессии), остальное ситуативно.

Я делал и так, и так, и не могу сказать что какой-то метод сильно лучше или хуже.
55 3287043
>>286970
Согласен, все эти "паттерны проектирования" созданы для криворуких одноклеточных макак, типа как методичка как надо программировать, если своего мозга нету. И вот если вы посмотрите где в основном это с изобилием используется как раз таки на макакских языках типа джавы и дотнета, чтобы лоускильные дауны которых заменяют одним днем подбирая первого встречного с улицы, сразу сели за комп и хуячили так же как написано в методичке в такт с остальной командой выдрессированых обезьян.
Они еще потом обмажутся скрамами и будут дрочить в кружке друг на друга.

Короче все это для быдла низкоквалифиционного.
Для меня как на плюсовика с многолетнем стажем, это все выглядит как блевотина нахуй не нужная, у нас так нигде не пишут, чтобы обмазываться паттернами ради паттернов. Это используется только где необходимо и далеко не всегда в таком явном стиле методички.

Ну хуле взять, большинство кодеров овцы безмозглые, которым нужна упряжка.
di.jpg236 Кб, 639x1698
56 3287047
Да ДИ решает проблемы которые на начальном этапе отсутствуют. Но напоминаю у нормальных людей ДИ беспланый. Они не изобретают каждый раз велосипед.
57 3287049
>>287043
Т.к. все эти паттерны это фаззи набор присказок, а не конкретное руководство к действию, мне кажется что они создают гораздо больше проблем в описанном кейсе, чем решают.

Любопытно, что в книжке банды четырех кресты были одним из основных языков для описания паттернов.
58 3287051
>>287029

>Единственный кейс где вся это еботня необходима кмк, это для тестов.


Могу сказать, что это действительно помогает в написании тестов со 100% изоляцией всех маленьких индивидуальных кусочков кода, с возможностью простого параллелизма в одном процессе, выполняющем тесты.
Однако, в моей практике это сомнительное занятие, и в большинстве случаев ПО тестируется или целыми изолированными подсистемами, или целиком. В очень редких случаях действительно можно отделить значимый объем кода в независимый "модуль" для которого можно писать отдельные тесты.
Интересный код, который действительно стоит тестирования, как правило взаимодействует со всеми подсистемами, и сами подсистемы между собой взаимодействуют. Писать для этого юнит-тесты с тестовыми дублями - это пустая трата времени. Такие тесты проверяют сами себя, а не конечный продукт.
59 3287053
>>287047
А теперь попроси его написать такой же список, только с аргументацией в обратную сторону. промпт в студию
60 3287059
>>287051
У меня ровно такой же опыт. Я 10 лет в разных проектах, в разных командах пытался внедрить тесты, и везде, каждый раз стоимость внедрения конская, а выхлопа на три копейки.

Юнит тесты хороши только для узкого класса проектов - там где есть четкая связь инпут-аутпут. Типа ЯП и прочих числодробилок.

Интеграционные тесты уже более осмыслены, но опять таки, стоимость их автоматизации часто необоснованно высока.
Щешевле посадить тестеров.
import.jpg221 Кб, 663x1644
61 3287060
62 3287061
>>287049

>Любопытно, что в книжке банды четырех кресты были одним из основных языков для описания паттернов.


На сколько я помню действие той книжки происходит на примере написания GUI. Я в гуи никогда не работал, но на сколько я знаю, с тех пор многое поменялось там и гуи теперь вообще редко пишут на плюсах. Хотя вот вроде в Qt не особо этого говна напихали, как мне казалось, но там и своего хватает.
63 3287066
>>287060
В общем мнение чатжипити как обычно ничего не стоит.
Читать я это конечно же не буду
64 3287068
>>287061
Угу.
Вообще на фоне imgui, классический retention mode gui это пиздец.
65 3287079
>>287047
Ну давай разберем по частям тобою написанное.
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.
66 3287083
>>287066
А хули там чиать. Просто если глазами пробежаться, то видно чтл весе аргументы сводится к тому, что нормальный ДИ сложный для имплементации. Но я же не пишу каждый раз ДИ, я беру готовый.

Если писать микросервисы, то проблемы импорта не так очевидны.

Причем здесь противопоставление С++ другим языкам вообще не понятно. Любой фреймворк решает проблему зависимостей. Тот же кьют имеет несколько способов управления зависимостей. В плюсах на проблему зависимостей еще накладывается проблема деалокации зависимостей, поэтому обязательно делегировать эту проблему специфичным паттернам из С++, как викпоинтеры или как в кьюте через передачу указателя на родителя в конструктор кьюобжекта.
67 3287089
>>287083
Я все еще слабо понимаю что это за говно.

Магическая хуита, которая смотрит на сигнатуру метода который ты создал и подставляет на этапе вызова нужные аргументы из некого глобального стора, который ты сам настраиваешь?

Как эта хуйня выглядит на практике, покажите мне код уже.
68 3287090
>>287068

>imgui


Кстати да, год назад писал свой path-tracer ради прикола, юзал imgui мне очень понравилось.
Все довольно просто и удобно сделано. Перед тем как его нашел, стал вспоминать эти ужасы GUI программинга на том же Qt или чем-то подобном, аж в дрож бросало, даже хотел сам написать мини гуи для этого который бы просто рендерил кнопочки и ползунки, но нашел imgui и это была прям манна небесная.
69 3287094
>>287089
Да примерно такое делает. Раз мы уж в питоно треде обсуждаем то смотри в fastapi документации есть примеры. У фастаапи минималистичный удобный ДИ, как раз для написания крудов самое то.
70 3287096
>>287090
Я имел ввиду imgui как парадигму, не да, dear imgui очень хвалят.
71 3287100
>>287094
Я просто нихуя не понимаю. "DI сложно реализовать"
Что DI делает? Прокидывает аргумент в метод.
То есть самая простая на свете хуйня - передать аргумент в метод, требует сложной в реализации, основанной на рефлекшне?
72 3287102
>>287100

>Я просто нихуя не понимаю. "DI сложно реализовать"


>Что DI делает? Прокидывает аргумент в метод.


Путаешь DI и DI Container (или IoC Container). DI - передача аргумента в функцию (обычно это конструктор класса в OO языках). DI/IoC Container - автоматическая передача аргумента в функцию. Как, что, и когда создается, и куда передается - настраивается отдельно, как правильно каким-нибудь душным DSL или не дай бог XML файлами, при инициализации программы.
73 3287117
>>286970

>используйте глобальный статический указатель на структуру со всеми "системами", работающими в вашей программе.


Вот только в питоне вместо глобальной статической переменной принято использовать явный аргумент self. Вся программа пишется в одном классе, затем очевидные подсистемы отделяются в отдельные классы.
74 3287125
>>287102
Понапридумывали миллион терминов.

То есть вместо того, чтобы в main() сказать
if YOBA_TEST:
db = TEST_DB
else
db = PROD_DB

я должен теперь xml ковырять?
75 3287382
У меня в джанге есть некая модель A из какой-то библиотеки
Есть моя модель B
Я хочу сделать что если модель A сохраняется, обновляется или удаляется - то это триггерило бы модель B на какую-то операцию, типа если create - я тоже create делаю в B с полем из А и своим значением, ну и так далее. Как это сделать?
image.png2 Кб, 327x67
76 3287486
>>284682 (OP)
Вы знали про такое поведение?
Ебанаты.
vkateesh.jpeg142 Кб, 1048x916
77 3287493
>>287382
Сигналы.
78 3287530
>>287382
Это должно быть реализовано в реляционной базе данных в виде процедуры/функции, или на худой конец в виде триггера, с использованием настоящей ACID транзакции (это значит ISOLATION MODE SERIALIZABLE). Пожалуйста, не делайте это на клиенте (базы данных).
79 3287572
>>284908
Начал читать. Прям то что нужно, сразу в дебри с первой главы. Пока что нравится.

Алсо

> 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.
photo2024-09-1904-44-51.jpg75 Кб, 716x475
80 3287576
>>287530
Не душни дед.
81 3287632
>>287486
какое? Если ты думаешь, что | тут как OR работает, то нет. просто все указанные символы убирает

я так понимаю рынок уже реально всё и не вкатиться? какие то переходы из нет в хует обсуждают, девопс вроде, никто тупых вопросов новичков не задает, мою хуйню вначале треда проигнорили
82 3287640
>>287632
А как же постоянное нытье о том что кадров не хватает?
Или это не хватает тех кто может гайки крутить, а вкатунов наоборот навалом?
83 3287861
>>287632

> никто тупых вопросов новичков не задает, мою хуйню вначале треда проигнорили


Нынче можно задавать вопросы в какой-нибудь ChatGPT, и получать какие-то ответы моментально, даже если ответ незаметно-тонко ложный. Если новички это делают, то готовьтесь к ухудшению качества жизни после того как все неновички уйдут на пенсию.
84 3287901
Любая строка питон-кода может поднять любое случайное исключение. Это приводит к комбинаторному взрыву возможных путей исполнения программы. Есть ли техника обработки исключений, которая позволяет этого избежать? Это особенно актуально при использовании сторонних библиотек.
85 3287917
>>287901

>Есть ли техника обработки исключений,


Есть. Обрабатывать исключения в самом верху или вообще не обрабатывать, если программа дальше не может работать.
86 3287931
>>287917

>Обрабатывать исключения в самом верху или вообще не обрабатывать, если программа дальше не может работать.


Как отличить исключения, из-за которых программа не может безопасно продолжить работу, от исключений, которые можно логировать и игнорировать? В самом верху контекст потерян.
Если, например, долгоживущий компонент серверной программы испортился и начал кидать исключения, то весь процесс испорчен, и его нужно как можно скорее остановить; при этом большую часть исключений стоило бы действительно логировать и игнорировать, чтобы не прекращать сервис для всех пользователей из-за одного бага, не угрожающего состоянию процесса.
87 3287946
>>287931
Не допускай деления на ноль. Если же поделилось то это фатальная ошибка в коде
Невозможность подключение к БД - дальше работать нельзя
Ресурс не найден в бд - это резонно обработать вверху в специальном обработчике хттп ошибок
Резюмируя. Любая неведомая ебаная хуйня фатальна, Любая дженерик ошибка фатальна. Любое логическое исключение для которого существует специальный класс (твой или из фреймворка) обрабатывается.

Не утверждаю что это абсолютная истина, но так все макакич на языках с исключениями живут
88 3287953
>>287946

>Ресурс не найден в бд - это резонно обработать вверху в специальном обработчике хттп ошибок


Если подразумевается исключение типа ResourceNotFoundInDatabaseError, то это верно только если ты 100% уверен в источнике исключения (то есть не уверен, потому что статический анализ исключений не производится). На "верхнем уровне" это определить невозможно. Та же проблема с питонячими встроенными generic ValueError / TypeError - в стандартной библиотеке полно функций, кидающих такие исключения. Это баг, или у функции такой вот интерфейс? Только хуй знает.

>Резюмируя. Любая неведомая ебаная хуйня фатальна, Любая дженерик ошибка фатальна. Любое логическое исключение для которого существует специальный класс (твой или из фреймворка) обрабатывается.


>но так все макакич на языках с исключениями живут


Я еще ни разу не видел, чтобы в каком-нибудь веб-сервере не было try...except Exception: logger.exception(...); return 500. Часто даже AssertionError таким образом игнорируется, что абсолютно точно должно моментально убить процесс, и вместо этого возвращается HTTP 500.

На мой взгляд, у каждой функции, в которой что-то может пойти не так, должен быть определен закрытый набор ошибок, который эта функция может поднять/бросить/вернуть. Но я еще ни разу не видел, чтобы в языках с исключениями так кто-то делал.
89 3287956
>>287953
Не понятно зачем тебе статический анализ ошибки если можно в динамике проверить isinstance.

Не найдено в БД это когда тебе надо сделать действия по id юзера, а такого юзера не найдено. Существует общая логика обработки таких ошибок, не надо ее имплементировать по месту возникновения

Под дженерик ошибками я поразумевал общие ошибки системы из за которых она не может работать. Наверно хуево выразился. Но я привел пример - невозможно подключится к БД

Деление на ноль, AttributeError и прочие НЕХ ошибки, обычно питонячии пррограммы падают в таких случаях.

Если у тебя монолитное веб приложение, то естественно тебе падать нелья, только логировать НЕХи. Придется работать пока весь сервак не упадет из-за того что место на диске или память закончатся.

Микросервис вполне может упасть как общепринято в питоне. Его поднимет кубер. Но там тоже проблемы шторма ретраев, залипания ситемы в метасостоянии и подобной хуйни.
90 3287957
>>287956

>метасостоянии


забыл ка оно правильно называется когда пациент то ли жив то ли мертв
91 3287960
>>287956

>Не понятно зачем тебе статический анализ ошибки если можно в динамике проверить isinstance.


>


>Не найдено в БД это когда тебе надо сделать действия по id юзера, а такого юзера не найдено. Существует общая логика обработки таких ошибок, не надо ее имплементировать по месту возникновения



Я неправильно выразился. Ошибка "юзер не найден" имеет однозначное значение, если она поймана непосредственно при вызове функции "дай юзера с id 7', то есть "локально". У верхнеуровнего обработчика ошибок это выглядит как "функция 'обработай http запрос' вернула ошибку 'юзер не найден'". Почему юзер не найден? Если из-за пользовательского ввода, то это, наверное, код 404. А вот если был нарушен какой-то инвариант системы, то это или ответ 500, или паника. Различить эти случаи на уровне общего обработчика ошибок невозможно, потому что тип исключения - это не достаточная информация, и также важен и контекст исключения.
92 3288536
Почему этот код выдает 500000500000?

a = list(range(1000001))
print(sum(a))
93 3288540
>>288536

>>> (1000000 + 1)*1000000/2


500000500000.0
94 3288605
>>288540

>(1000000 + 1)*1000000/2


Это что?

Команда sum должна выдать сумму чисел от 1 до 1 млн или я что-то путаю?
95 3288628
>>288605
школу прогуливал?

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
images.jpg5 Кб, 225x225
96 3288764
Здаров мужики! Выбираю язык куда укатиться с другого языка с PHP обосанного. Зачем? Потому что могу. Так вот, как я понял, если я N лет клепал бэк (и немного фронт) разных там сайтиков-магазинчиков на разных хороших и не очень CMS, а заодно вертел сервисы на всяких ларавелях, то мне не составит особого труда перекатится в что-нибудь типа пайтон+джанго+фастапи. По сути, просто на другом языке писать буду. Верно мыслю? Или нужно че-то еще учесть? База по всяким там алгоритам, паттернам ооп и прочей хуйне в башке в наличии.

Если есть что-нибудь почитать на этот счет - скиньте, буду премного благодарен. А то самостоятельный гуглёж выдал выдает какую-то совсем детсадовскую чушь.
97 3288785
>>288764
Бля, ну конечно. Сраный сайт, он везде останется сраным сайтом, на каком языке ты его не делай. Хоть на питоне, хоть на джава, хоть на языке тумба юмба. Всё что относится к сайтам - оно универсально. Общие принципы, базы данных, кеширование, безопасность, масштабирование - одно и то же. Отличия - в деталях, в реализации, в скорости.
he.jpg4 Кб, 225x225
98 3289122
>>288785
Ага, я тут уже документации обожрался большой ложкой, вижу все то что ты говоришь. Джангу в доцкер уже засунул и развернул, пойду МаКеТиК натягивать, а потом на хехеру резюме перевкатуна выложу. Какой же хуйней я страдаю боже мой.
99 3289490
Почему все эти IoC, клин архитекчур, солид и прочая хуйня в проектах на питоне выглядит как что-то несуразное?
Вот смотрю эту репу и искренне не понимаю нахуя.
https://github.com/Tishka17/deseos17/

мимо джун 80 iq
100 3289506
>>288764

>По сути, просто на другом языке писать буду.


Ты будешь писать на питоне так, как писал на PHP. Хотя языки на самом деле разные, в питоне есть масса вещей, которых нет в PHP и которые ты не привык использовать

Дальше ещё конкретные фреймворки, их особенности. Джанго/DRF это в принципе тупик, да и рыночек скромненький
101 3289516
>>289490
Потому что все эти архитектуры придумывают ребята, главная задача которых продавать книжки и курсы, а не шипить продукты.
102 3289518
>>289490
Кроме паттернов-хуяттернов, в этой репе еще и 9000 файлов, каждый не более 100 строк. Так пишут только мудаки. Если так делать в серьезном проекте, кол-во файлов превысит ограничение файловой системы.
103 3290042
>>289490
Так ебашь всё в main.py, только потом не злись, почему код ревью не проходишь.
104 3290070
>>290042
Конечно, если кодревью делают сеньоры-макакены, у которых вместо мозгов паттерны из блогов.
105 3290127
>>289490
>>289516
>>289518
>>290070
Если у тебя в одном файле больше одного класса и двух-трех функций, или в методе больше 20 значимых строк кода, то ты что-то делаешь не так - не понимаешь проблему, которую решаешь; следовательно, не находишь правильные абстракции. У нас за такое сразу гонят с собеседований на хуй, и отвергают код ревью.
Настоятельно рекомендую перед написанием первой строки кода прочитать и перечитать от корки до корки классику программирования - Design Patterns и Clean Code.
106 3290136
>>290127
Кек, жирненький.

Смотри, 20к строчек в одном файле: https://github.com/bzg/org-mode/blob/main/lisp/org.el
Гитхаб еле грузится.
И ничего, отлично работает и куча народа этим пользуется.
107 3290152
>>290136
Ну и как это читать? Как это переиспользовать? Где классы? Где unit-тесты?
Почему так много комментариев? Это анти-паттерн, и запашок кода. Если бы длины функций были менее 20 строк, и имели бы нормальные, понятные названия, то комментарии бы можно было все удалить. Статический анализ комментарии не проверяет; может быть, они уже устарели?
Кроме того, написано это все на игрушечном языке программирования из 1960х. Они бы еще на SQL это написали.
108 3290155
>>290152
Да ну тебя, толстый ты.
109 3290349
>>290042
А между двумя крайностями вообще ничего нет, да?
110 3290407
Я люблю копролиты в одном/паре файлов.
111 3290419
Пизда. Есть. Любители глобалов. Особенно глобальных конфигов. И глобальных сессий к бд. А ещё любители создавать клиентов на каждый запрос.
112 3290427
>>290070
Конечно, ведь новоиспечённые смузихлёбы с list(somedict.keys()) лучше знают, как код писать.
113 3290482
>>290419

>Любители глобалов. Особенно глобальных конфигов.


Что не так?

>И глобальных сессий к бд.


В каком контексте?

>А ещё любители создавать клиентов на каждый запрос.


Что ты подразумеваешь под "клиентом"? Наверное ты говоришь об HTTP. Если ты говоришь о клиенте вида requests.Session, то да, это пиздец. Если же речь о молодежном aiohttp.ClientSession, то это нормально, если каждый новый клиент использует один общий aiohttp.TCPConnector. Но это больше говорит о идиотском дизайне многих популярных библиотек питона, нежели о программисте, который пытается хоть как-то их использовать.
Если ты разрабатываешь хоть сколько-нибудь технически интересный проект, ты не раз будешь удивляться ужасному качеству популярных библиотек. У requests долгое время на веб-странице с документацией было написано, что она thread-safe, например, но мейнтейнеры тихо и со стыдом это убрали после разоблачения.
Когда новый программист изучает и практикует питон, он видит чужой код. Для веб макак это, как правило, Django/Flask/FastAPI параша. Они все устроены "неправильно" - обязательно есть глобальная конфигурация, имплицитное соединение к базе данных, и прочие дикости. Не удивляйся тому, что большинство так делает и продолжит делать долгие годы впереди.
114 3290568
>>290482

>Что не так?


Не надо так делать.

>В каком контексте?


В контексте запроса-ответа. Взял из пула соединение - создай сессию, закрой сессию, верни обратно в пул соединение. Многие это не делают, т.к. не понимают, как это под капотом работает.

>Что ты подразумеваешь под "клиентом"?


Да любой клиент, хоть хттп, хоть грпц, хоть эластиксерч, хоть аэроспайк. Челы в контроллере или интеракторе создают клиент на каждый запрос, ещё и закрывать его иногда забывают, вместо того, что бы всё это делать через di и переиспользовать.
115 3290582
>>290568
В aiohttp создание новой сессии дорогое, они сами пишут в доке что лучше переиспользовать.
116 3290605
>>290427
Что не так с list(somedict.keys())? Я нюфажа.
117 3290660
>>290605
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..
118 3290667
>>290660
А если тебе нужна копия, я а не view? Можно, конечно, написать чуть короче - list(somedict), но разницы во времени выполнения этом игрушечном языке ты не заметишь.
119 3290708
>>290660

> Т.е. там лист на результат в общем не нужен.


В общем какой-то ты хуевый пример привел.
Я бы еще понимаю ты бы показал пример где итератор сначала превращается в список, а потом ты по нему делаешь цикл.
Но в общем случае превращение итератора в контейнер вполне законная и частая операция.
120 3290710
>>290708
Приведи хороший пример.
121 3290719
>>290710
Хороший пример того как смузихлёбы хуево пишут код?
Хз, я с такими не работаю, поэтому без понятия что они там нынче пишут.
122 3290724
>>290719
Мне вспомнился еще баян модемных девяностых, с инетом по карточкам.

Если спросишь на англоязычном форуме - тебе скорее всего дадут верный ответ.
Если спросишь на русскоязычном форуме - тебя всегда пошлют нахуй.
Вывод - учите английский.
123 3290726
>>290724
Берёзы наверное тоже тревожно растут?
124 3290772
>>290724
Покажи мне англоязычный форум, где взрослые профессионалы обсуждают программирование. Не реддит, не форчан - в этих местах большинство состоит из студентов и аутистов-теоретиков, которые настоящим программированием никогда не занимались. Их мнения часто пересекаются с Чат Жэпэтэ, ответами на стак оверфлоу, случайными туториалами, веротяно сгенерированными с чат жэпэтэ, и "классическими" книгами от продавцов змеиномасленного консалтинга по типу Роберта Мартина; дальше мнений обсуждения там почти не заходят.
125 3290810
>>290772
Ну он видимо имел ввиду форумы из 90ых же.
Скорее всего там и правда были вполне внятные разговоры.
Впрочем, думаю что русских форумов на тот момент было очень мало (какой-нить может ЛОР), не в последнюю очередь потому что люди которые тогда пользовались интернетом наверняка либо знали английский, либо были пиздюками которые про кодинг ничего не знали.
126 3290836
Анончики, помогите советом мудрым!
Есть цикл, который печатает от 1 до 1000:
while i < 1000:
i = i + 1
print(i)

Как мне сделать так, чтобы при нажатии на 'q', цикл останавливался, при повторном нажатии продолжался с того же места, где была пауза?
127 3290882
image.png126 Кб, 1071x734
128 3291043
>>290836
Можно примерно так сделать.
129 3291092
>>291043
Правда, нужно бы подумать про вот эти сабмиты на тредпул с генераторами...
Мне код немного подозрительным кажется.
130 3291102
>>291043
Разве инпут не блокируется пока ты что-то не введешь и не нажмешь энтер?
131 3291105
>>290836
>>291043
>>291092
>>291102
Попробуй стандартный модуль curses с включенным nodelay.
132 3291106
>>291092
Не будет ли утечек? Это имею в виду.

>>291102
Цикл блокируется инпутом, да.
image.png1 Мб, 1920x1080
133 3291111
>>291106
Думаешь вопрошающий хотел это, а не чтобы q моментально останавливало цикл?

>>291105
Опа, любопытно.
134 3291114
>>291111

>Думаешь вопрошающий хотел это, а не чтобы q моментально останавливало цикл?



на 100% соответствие заданному

>чтобы при нажатии на 'q', цикл останавливался, при повторном нажатии продолжался с того же места, где была пауза

135 3291122
>>291114
А, при нажатии, а не вводе. Ладно...
136 3291144
>>291105
Не, эт чет залупа. Если только, там нет режима "не надо мне окон создавать".
137 3291172
Так и что в итоге, нужно мне для моей микроапишки на фастапи городить слои абстракции для чистоты архитектуры и солида? Без них меня обоссут и скажут, что я ничего не понимаю в программировании? Или и так сойдёт? Я просто только постигаю азы бэкенда и пока не очень шарю.

>>290568

>В контексте запроса-ответа. Взял из пула соединение - создай сессию, закрой сессию, верни обратно в пул соединение. Многие это не делают, т.к. не понимают, как это под капотом работает.


То есть если я просто, как везде советуют, инъектирую для эндпоинта зависимость session = Depends(get_db) для получения сессии, это неправильно?
138 3291182
>>291172

>Так и что в итоге, нужно мне для моей микроапишки на фастапи городить слои абстракции для чистоты архитектуры и солида? Без них меня обоссут и скажут, что я ничего не понимаю в программировании? Или и так сойдёт? Я просто только постигаю азы бэкенда и пока не очень шарю.


Это дрочево для дебилов. Сделай один dataclass со всеми зависимостями и пробрасывай его во все ендпоинт-обработчики любым удобным способом. functools.partial, например.

>То есть если я просто, как везде советуют, инъектирую для эндпоинта зависимость session = Depends(get_db) для получения сессии, это неправильно?


Завит от определения get_db. Если оно возвращает коннешен пул, то правильно. Если оно возвращает соединение из пула, то это неправильно, потому что ты будешь держать соединение дольше чем нужно, уменьшая пропускную способность.
139 3291185
>>291172
Если у тебя есть время, советую написать свой фреймворк разок другой.
Начни с пустого файла и добавляй нужные фичи по одной.
Запусти http сервер и отдай строку на запрос.
Потом научись вызывать различные функции в зависимости от урла в запросе.
Теперь добавь в микс базу. Возьми какой-нить sqlite3 и разберись как тебе удобней прокидывать соединение в обработчики запросов, как удобней мапить то что тебе выдает база в то, что ты хочешь отдать из эндпоинта.

Сделай туду-апп с регой юзеров, например.

Если ты через это пройдешь, ты выяснишь, что фреймворки это просто чей-то набор костылей, которые решают довольно простую задачу. Но т.к. они не знают какая проблема конкретно у тебя, они пытаются понапихать как можно больше разной хуйни, чтобы покрыть максимальное количество юз кейсов.

После этого у тебя будет гораздо больше понимания почему фреймворки делают то что делают, и какие компромисы они зашили ради "удобства".
140 3291227
>>291185

>Потом научись вызывать различные функции в зависимости от урла в запросе.


Никогда не понимал этого. Почему все веб фреймворки так делают? Вот хочу я добавить аутентификацию, но только для ограниченного набора урлов, и логирование метрик для другого набора урлов, и прочее. Фреймворк требует от меня колобек на каждый урл-паттерн. Теперь мне нужно трахаться с классами или функциями высшего порядка, чтобы реализовать это без большого кол-ва бойлерплейта. Если бы фреймворк просто вернул мне значение енума, я бы сделал одну функцию с предобработкой, свитчем, и постобработкой, как нормальный человек.
Вот werkzeug.routing.Map делает это правильно, но это WSGI, к сожалению.
141 3291238
>>291227
Обычно ты просто заворачиваешь свой хэндл в мидлвейр:
"/pizda": WithAuth(Liznul)

Ну или если тебе больше нравится метапрограммирование, то через декоратор, или как оно там в питоне называется.

Я поэтому и рекомендую сделать велосипед, чтобы понять что тебе нравится больше.
142 3291247
>>291238

>Обычно ты просто заворачиваешь свой хэндл в мидлвейр:


Понятно, что можно это обернуть в функцию высшего порядка, но это не самое простое решение проблемы. К тому же, все эти мидделвейры, как правило, приводят к пробрасыванию данных через какой-нибудь "контекст" или "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?
143 3291364
>>291043
как-то грязновато, имхо

По классике через треды если делать, надо нормальным образом стартовать тред, сделать Event и передать его в тред
evt = threading.Event()
thread = threading.Thread(target=f, args=[evt,], daemon=True)
thread.start()
а треде при этом проверяешь, что Event не присвоен, а в основном соответственно выставляешь
144 3291365
Судя по всему питон бьет по рукам за использование лямбд.
Другое дело если я сделаю ебучий функтор.

Я питон не знаю особо, но вот, настрогал:
https://ideone.com/YWgfpE
145 3291407
>>291182

>Завит от определения get_db. Если оно возвращает коннешен пул, то правильно. Если оно возвращает соединение из пула, то это неправильно, потому что ты будешь держать соединение дольше чем нужно, уменьшая пропускную способность.


Оно возвращает сессию алхимии, которая, если я правильно понимаю, сама берет на себя управление пулом через engine. Как-то так:
https://ideone.com/y7geaX
Когда делал без алхимии через чистые SQL-запросы - без пула просто в каждом обработчике маршрута создавал соединение и закрывал его. Это наверное точно хуевый вариант.

>>291185
Спасибо за годный совет. Начинал что-то подобное делать, когда читал Конкурентное программирование Фаулера, но не хватило скилла.
146 3291551
Объясните как ребенку разницу между asyncio и threading в контексте типичного веб-сервера с БД и мемкэшом/редиской. Вот мое понимание:
Преимущества asyncio:
- можно отменять IO;
- меньше ебли с синхронизацией;
- легко запустить что-то вместе с веб-сервером в том же процессе, например, очередь и обработчиков бэкграунд тасок.
Недостатки asyncio:
- новый синтаксис async/await, заражающий программу;
- сырое говно или просто ничего вместо библиотек.
147 3291615
>>284682 (OP)

>Питон встаёт на путь избавления от GIL


Только встает, а будет когда?
Это типа лозунг? Даешь свободу от гил в пять версий!
148 3291651
>>291615
Поднимется (уже поднялся) вой макак, мейнтейнящих популярные библиотеки. Дескать, пользователи будут ныть и спрашивать, а не non-gil ли библиотека, а если нет, то когда будет???
Очень много мультипоточного и нетворкинг кода написано с неопределенным поведением CPython и GIL. Для нас, рядовых пользователей, gil-free библиотеки будут доступны лет через 5-10 в лучшем случае.
149 3291703
>>291651
Ооо питонисты опять себе придумали болезненную миграцию как с 2 в 3 версии.
150 3291754
>>291703
Это хуже. Теперь необходимо поддерживать 4 версии модуля - все комбинации (sync, async) x (gif, non-gil).
При этом отключение GIL остается опциональным, как подсказки типов и их статический анализ.
Язык раздут никому не нужной хуитой до неузнаваемости, почти как C++. Уход Гвидо можно понять - он не способен защищать решения PSF.
151 3291773
>>291651
>>291754
Понятно, спасибо за подводные.
152 3291892
>>291551
корутины легче тредов
153 3292146
>>291551

> сырое говно


async/await вообще уже старая технология
в версии 3.5 появилась, а сейчас уже 3.13 выкатили

там главный плюс в работе с сетью, другой механизм используется, select/epoll, который позволяет переключаться на ту задачу, куда пришли данные. Это намного эффективнее, чем у тредов, когда у тебя сетевых соединений много
1728326630939.jpg236 Кб, 1200x1052
154 3292157
На пистоне ждуну сейчас вообще реально найти работу? Учил пару лет назад, обосрался с пары отказов и убежал в слезах. А вообще другую работу нашел в саппорте.
Стикер319 Кб, 512x512
155 3292162
>>285781

>SOLID - свод принципов


>можно заюзать DI - контейнер, в который ты просто


Бля, а можно просто наговнякать синглтон класс, назвать его КОНФИГ и дергать где нужно.
156 3292166
>>292162

>можно просто наговнякать синглтон класс


Это для Java. В Python можно просто наговнякать имена на уровне модуля, отдельный класс не нужен.
А еще лучше написать всю программу в одном классе, в self класть все "глобальное". Зачем? Чтобы не писать всюду "global" стейтменты.
157 3292239
>>292162

>Бля, а можно просто наговнякать синглтон класс, назвать его КОНФИГ и дергать где нужно.


А минусы какие?
158 3292366
>>284682 (OP)

> Питон встаёт на путь избавления от GIL. Подключают JIT технологии.


Опыт Mojo говорит, что нихуя не получится. Динамикодриснёвость ограничивает максимальный перформанс.
159 3292372
>>292239
Макаки смузихлебы скажут что ты пишешь плохо.
160 3292716
Блок if...elif...else - это анти-паттерн? Паттерн Стратегию в питоне применяют?
Когда в блоке try...except больше одного except, это анти-паттерн? Правильнее ли ловить Exception или BaseException, и обрабатывать по Паттерну Стратегии?
Как произвести инъекцию зависимости-стратегии в блок try...except?
1728397711.png36 Кб, 657x248
161 3292742
Вот как мне этот текст получить в интерактивном питоне в виде переменной, чтобы дальше там хуйню делать? Везде пишут, что питон охуеть удобный интерактивный шелл, но это блять невозможно, как не пробовал 'grep .. | python', 'grep .. | python -ic' все равно питон пытается прочитать этот текст как скрипт и очевидно обсирается. я просто хочу сделать sys.stdin.read()
162 3292773
>>292742
with os.popen("ls") as stream: q = stream.read().split("\n")
163 3292874
>>292773
ты не выкупаешь, как мне отправить этот текст в stdin интерактивного питухана, чтобы он не обосрался?
2024-10-08-1850021123x270scrot.png24 Кб, 1123x270
164 3292892
>>292874
Не выкупаю что тебе нужно.
Вот я в интерактивном питухане запустил шел команду и получил ее выхлоп в переменную.

Если это не то, что тебе нужно, попробуй объяснить еще раз.
165 3293153
>>292892

>я в интерактивном питухане запустил шел команду


а я хочу в шелле запустить команду и пайпануть её в интерактивный питон. но видимо так не получится. твой вариант нормальный и работает.
166 3293790
Понадобилось накидать простой скрипт на питоне. Я слышал, что у вас есть глобальный лок и всегда работает только 1 поток. Значит ли это, что я не могу запуситть 10 тредов которые считывают огромный поток данных с файлов (или сокетов), потому что эти треды будут ждать друг друга?
167 3293883
>>293790
Можешь запустить без проблем.
Насколько это будет медленее, чем на другом языке - нужно тестировать.

Так же, в последней версии Питона теперь можно отключить это потоковое ограничение.
168 3293971
Че навернуть? Кроме говна. Сделал одну книжку от корки до корки, нихуя не понял, кроме того что хироку в рф недоступен и пришлось это всё на питонэнивере делать. Есть мб что-то структурированное, уровня как какать(писать), мб курс какой, я хуй знает. Если что прочитал Eric Matthes - Python Crash Course. Хочу ещё не знаю чего.
169 3293997
>>293971
Сделай уже что нибудь
170 3294031
>>293971
Научись писать программы на C и забудь про питон и затем интероп питон-C.
171 3294242
>>293971
Какая цель то?
172 3294443
>>293997
Че сделать? Легендарный калькулатор надеюсь. Я просто без шуток не понимаю, как можно что то своё высрать, потому что все эти проекты по книжке какой то кринж, ну сделал и сделал - хуйня какая то.
>>294242
Не знаю, работу найти наверное, пока просто щупаю материал, не понимаю надо оно мне или нет, вроде сидеть чет пердеть не западло, просто общее не понимание как и в любой другой области когда вкатываешься. Поэтому и прошу какой нибудь ещё материал навернуть.
173 3294813
>>294443
Какую работу? Веб-макакой?
174 3295483
>>294443

>Че сделать? Легендарный калькулатор


Платина и вечный вопрос барист-вкатунов, жертв курсов и прочих ванаби 300кк в наносекунду. Если тебе ничего не хочется погромировать, писать всякую хуйню для себя в стол, нет каких-то повседневных задачь, которые ты бы хотел решить с помощью своих новых скиллов, или если тебе не хочется просто погружаться в науку, в дебри байтоебства, то может это и не для тебя, ты ведь получается изначально сюда полез потому что на пикабу прочитал, что в айти можно миллиард за месяц заработать.
175 3295539
>>290042
Ну я разделил проект на дюжину модулей. Каждый из которых начинается портянкой импорта толпы функций из друг друга. Так и не понял чем это лучше одного main.py
176 3295545
>>295539
Только если у тебя в каждом модуле есть приватные штуки которые не экспортируются никуда. Так общая площадь все таки чуть меньше.
177 3295564
Накидал скрипт который должен был запускаться периодически и измерять скорость. https://pastebin.com/mDd1C8Lz
Но он почему то во время измерения тупо грузит на фул проц и не пишет ничего в файл по итогу. Почему?
178 3295633
>>295564
У питонистов не принята практика использования дебаггера?
179 3295698
>>295633
программа не останавливается под дебагером почему то.
180 3295737
>>295698
Попробуй перезагрузить компьютер.
181 3295750
>>295483

>нет каких-то повседневных задач


Тут кстати виндусятники соснулей. Потому что под линухом можно делать себе консольные утилиты, даже если работаешь не напрямую прогером, а просто под свои рабочие задачи или если возможности гуя не нравятся. А вот смд пососная хуета вместо консольки.
182 3295762
>>295750
Ну так есть tk на котором можно КНОПКУ сделать.
183 3295767
>>295762
сделал кнопку
@
всю логику разместил в обработчике онклик
184 3295768
>>295767
Збс же. Чем не скрипт.
185 3295769
>>294443
Сделай то чем будешь пользоваться, то что автоматизирует какие то вещи. Может веб хуйню, парсер там новостей или рейтинга в доте, календарь, не ебу.
Screenshot20241011-224459Drive.jpg78 Кб, 720x960
186 3295818
Помогите дегенерату, а то меня отчислят нахуй
187 3295853
>>295818
чатгпт попроси
188 3295894
>>295818
Вот на, держи. Программа спрашивает какую фигуру надо и какого размера:
```
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 прав, нейросетки такое на изи пишут.
188 3295894
>>295818
Вот на, держи. Программа спрашивает какую фигуру надо и какого размера:
```
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 прав, нейросетки такое на изи пишут.
image.png30 Кб, 495x447
189 3295895
>>295818
>>295894
0 - опечатка и отступы сделай как тут
190 3296032
>>295633
>>295698
Ты точки остановки то поставил?
191 3296054
>>284682 (OP)
Чёт посмотрел на typing, блядь, какой же питон - ссанина убогая.
192 3296056
>>296054
Че с ним не так? И что это вообще.
193 3296058
>>296056
Аннотации типов, сделано пиздец сложно и убого.
194 3296059
>>296058
По сравнению с чем?
195 3296062
>>296059
По сравнению с хуем твоей мамки.
196 3296072
>>296062
Обрати внимания на эту боль. Она вызвана тем, что у тебя есть ощущение "сложно и убого", но рационально объяснить чем оно вызвано ты не можешь. Часто, это показатель того что ты не понимаешь о чем говоришь.
197 3296075
>>296072
Скорее ты не понимаешь, потому что сразу высираешь про "сравнение с чем". Говно оно говно, не потому что говно относительно чего-то.

>уиии боль


Детектор дегенерата.
198 3296089
>>296075
Не волнуйся, ты повзрослеешь и успокоишься.
199 3296290
Посоветуйте плиз топ ресурс для обучения питону и программированию с нуля.
200 3296306
>>296290
Если хочешь топ - то НЕ начинай обучение программирования с питона. Почитай K&R ANSI C, забудь про книги/туториалы/ресурсы, и сделай что-нибудь интересное.
изображение.png1,1 Мб, 748x934
201 3296406
Что представляет собой класс и его методы на на уровне памяти? Как питон организует вызовы функций в классе?
202 3296449
203 3296596
>>296032
ставил, ставил. На надо думать, что я тупой. Сам попробуй понять где программа виснет
204 3296757
>>296596

>ставил, ставил. На надо думать, что я тупой. Сам попробуй понять где программа виснет


Кнопки Step Over / Step Into или аналог в дебаггере пробовал нажимать?
205 3296852
Суп, прогроммисты. Сам ни разу не из ваших, но понадобилось сделать кое-что на питоне.
Есть простая табличка в файле .html https://pastebin.com/XmHtgnB3
Есть файл .py, в котором происходит некая магия, в конце которой получается несколько списков, в которых хранятся названия товаров, их цена.

Собсна, как мне сформировать итоговую табличку, которая будет выводить товар и его цену?
Другими словами - как мне переменные из файла .py запихнуть в ьабличку файла .html?
206 3296856
>>296852
Немного уточню.
Есть два списка:
tovar = ['moloko', 'hleb', 'yaitsa']
cena = ['100', '50', '150']
Как циклом запихнуть каждое значение в таблицу хтмл, чтобы получилась таблица вида https://pastebin.com/v7CxiqmG
208 3297284
>>296944
Спасибо, но немного не то. Твой код формирует хтмл код, а у меня он уже готовый. Мне надо было именно в код вставить переменные.

Может кому пригодится:
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}}
209 3298466
Есть какие-то книги или курсы, где хорошо разобраны эксепшены?
То есть не банальный синтаксис и механика, с этим всё понятно, а именно применение на практике в прикладном коде.
210 3298534
>>298466

>а именно применение на практике в прикладном коде.


На практике есть два подхода. Первый - оборачиваешь сколько угодно большие блоки кода в трай-кетч, делаешь что хочешь и как хочешь, скрывая баги. Второй - обрабатываешь исключения практически у каждой строки кода, оборачивая локальные исключения в более уместные типы, например.
Когда поймешь, что только второй подход приводит к корректным программам, то выяснишь, что эксепшены - это хуйня, придуманная конченным идиотом, которую распространили в огромном количестве ЯП просто потому что это модно. Даже в языках со статическим анализом типов мы получаем функции вида (X -> Y | Error), где Error - это ебаный интерфейс за которым может быть все что угодно на хуй. Статический анализ идет в сраку. Это особенно актуально в программах, построенных на нескольких сторонних библиотеках. При обновлении библиотеки компилятор тебе не скажет о том что появился или изменился тип ошибки на строке 666 - узнаешь ты об этом только в рантайме.
211 3298700
>>298534

>На практике есть два подхода. Первый - оборачиваешь сколько угодно большие блоки кода в трай-кетч, делаешь что хочешь и как хочешь, скрывая баги. Второй - обрабатываешь исключения практически у каждой строки кода, оборачивая локальные исключения в более уместные типы, например.



Зачем оборачивать "сколько угодно большие блоки кода" или "каждую строку кода"?
Видимо, ты это делаешь чтобы ловить НЕПРЕДВИДЕННЫЕ исключения т.е. баги грубо говоря. Держу в курсе, что для этого тебе не нужно оборачивать весь код или тем более каждую строку пиздец с кем водном треде сижу. Ты можешь добавить обработчик исключений с логикой на уровне всего модуля например. Это закрывает непредвиденные исключения и для этого в питоне есть все инструменты.
Каждую же строку покрывать нужно разве что только фимозным тестерам, но это отдельная задача и отдельная работа.

Второй момент. Исключения в питоне это разумеется часть логики, они используются именно в этом контексте. Тут их смысл в том, чтобы заменить собой, например, кучу строк с условиями или вернуть и обработать какую-то универсальную логику, которую ты не можешь предусмотреть.

>трай-кетч


>Когда поймешь


Поражает как баристы-вкатуны кукарекают с умным видом о вещах в которых не разбираются, ещё и учат кого-то.
212 3298713
>>298700
В высокоуровневомм коде буквально каждый вызов функции ассоциирован с множеством ЛОГИЧЕСКИХ ошибок. Вместо блока switch, как в нормальных языках, нужно писать трай эксепт. Ловить логические ошибки в общем обработки исключений нельзя - теряется контекст.
Проблема в том, что ЛОГИЧЕСКИЕ ошибки - это на самом деле часть интерфейса функции, и они должны быть выражены в ее сигнатуре. Вместо этого они пишутся в докстринге. Статический анализ НЕ РАБОТАЕТ с документацией.
Это ПЛОХОЙ ДИЗАЙН языка программирования.
213 3298715
>>298713
Ты пытаешься изобрести throws из жабы или крестов?
Или ты обнюхался раста и хочешь один из 100500 крейтов для заворачивания ошибок?
214 3298718
>>298713
А это ты типизированный нытик, извини не узнал. Зачем продолжаешь мучиться и давить питона? Катись в НОРМАЛЬНЫЕ ЯЗЫКИ, а то вон всё страдаешь.

Алсоу, относись к питухонической конструкции try-except как к условному оператору и попроще будет.
215 3298745
>>298718

>А это ты типизированный нытик, извини не узнал. Зачем продолжаешь мучиться и давить питона? Катись в НОРМАЛЬНЫЕ ЯЗЫКИ, а то вон всё страдаешь.


Ты в курсе, что PSF уже который год подряд пытается засунуть "опциональную" статическую типизацию а-ля тайпскрипт в питона? Проснись, дядя. ВЕСЬ МИР динамически типизированных языков уже давно ПРИНЯЛ ПОРАЖЕНИЕ. Статический анализ типов - это исключительно ХОРОШАЯ ИДЕЯ. Ни одна контора на планете не пишет говноскрипты на питоне в старом стиле без анально-строгого конфига mypy.
>>298715

>Ты пытаешься изобрести throws из жабы или крестов?


>Или ты обнюхался раста и хочешь один из 100500 крейтов для заворачивания ошибок?


throws no throws - это тоже хуйня от дебилов. Плохая идея. Хорошая идея - это когда все функции могут вернуть ОГРАНИЧЕННОЕ и ЯВНОЕ множество типов. Посмотри на программы написанные на Standard ML или Haskell, например.
Почему? Практическая причина номер 1 - обновление зависимостей. С исключениями компилятор / статический анализатор НЕ МОЖЕТ сказать тебе, что программа сломана, потому что одна из транзитивных зависимостей случайно поменяла свой интерфейс, добавив новый тип исключения.
Хорошее программное обеспечение НЕВОЗМОЖНО написать на таком языке программирования, потому что его НЕВОЗМОЖНО формально верифицировать. Программа работает только на твоей слепой вере.
216 3298751
>>298745

> Standard ML или Haskell,


Как только софт которым я пользуюсь будет хотя бы на 10% состоять из программ написанных на вышеуказанном, я может быть подумаю.

Реальность такова что почти весь реальный софт который стоит у тебя на компе это с/с++ для самых важных программ, от ОС до браузера. Игровые движки, кады и прочее почти всегда написаны на сишечке или крестах.

Да даже софта который использует питон, пхп или раби без типов, ты юзаешь гораздо чаще, когда скролишь очередной говносайт.

В общем все эти студенческие фантазии о хаскеле и иже с ними для нищих.
Стикер255 Кб, 512x512
217 3298753
>>298713

>В высокоуровневомм коде буквально каждый вызов функции ассоциирован с множеством ЛОГИЧЕСКИХ ошибок.



Какие же питонисты всё-таки гигочеды. Вирджены перекатуны из НОРМАЛЬНЫХ ЯЗЫКОВ оказывается не способны и 100 строк написать не серя то в штаны то мимо, не делая логических ошибок и если им типизация сопельки не вытирает.
Гигочеты питонисты же могут держать в уме весь контекст приложения, подсказок в виде аннотации более чем достаточно, и пишут так чисто, по всем заветам ООП, что ни одной логической ошибки в рантайме.
218 3298757
>>298751

>Реальность такова что почти весь реальный софт который стоит у тебя на компе это с/с++ для самых важных программ, от ОС до браузера. Игровые движки, кады и прочее почти всегда написаны на сишечке или крестах.


Конечно же, весь реальный серьезный софт, разработанный с корректностью [1] и производительностью [2] в уме, написан на системных ЯП типа C и C++. В C и C++ нет исключений (в C++ их отключают на хуй на этапе компиляции, потому что они не нужны по перечисленным мной выше причинам, а также из-за несовместимости кода с исключениями с интеропом - если твоя динамическая библиотека будет кидать исключения, тебя сразу уволят к хуям).
Haskell и SML - это примеры для гладкомозгных питонистов-баристов, которые не способны написанию программ с ручным управлением памятью. Питонисту не понять, что память - это такой же ресурс как файл или сокет, и код нужно писать УЧИТЫВАЯ выделение и освобождение памяти. Именно поэтому все серьезные критические программы не выделяют память динамически, за исключением инициализации программы. Это еще одна точка падения. В программах, написанных на петоне, КАЖДАЯ СТРОКА может поднять MemoryError. Это игрушечный язык программирования.
219 3298762
>>298757
Справедливости ради 99% софта написанного на си не обрабатывает ошибки аллокации на уровне логики приложения.
В лучшем случае malloc завернут в ассерт.
И кроме некоторых игр и ядра, мало кто не устраивает пиздец с аллокациями налево и направо. Что с++ что раст хуячат аллокации без остановки, потому что все динамические контейнеры делают это по дефолту.
220 3298763
>>298757
Юношеский максимализм в суждениях, ух весь настоящий софт на ассемблере написан, остальные языки - синтаксический сахар и не нужны, будем как диды писать.

Это пройдет. Потому что есть задача и есть инструмент.
221 3298776
>>298763
Вопрос в том что важнее, чтобы криворукие неучи могли лабать код, который так или иначе решает чьи-то задачи, или что-бы общее качество софта было лучше.

Рыночек однозначно порешал в пользу первого. Поэтому мы имеем огромное количество софта, качество которого оставляет желать лучшего. Хочется верить что с течением времени все устаканется и в каждой нише будет не-уебищное решение.
Впрочем, смотря на винду и прочие visual studio с офисом, пока что кажется что качество софта в среднем по больнице ебнулось ниже плинтуса.
222 3298793
>>298776
Рыночек так порешал, что через N лет будет полу-сильный ии, который мычание любой тёти сраки из офиса сможет конвертировать в логику с ммммммаксимальной эффективностью алгоритмов. Как сказал глава НВИДИА языком погромирования станет человеческий язык. Тётя срака скажет ну я хочу чтобы конопочка, чтобы картиночка, а потом смета высиралась, ИИ всё сделает. И на всю галлеру будет один васян, который раз в месяц будет спорные моменты за ИИ подтирать. Вот как всё будет через N лет, но при нашей жизни. Там ОпенАИ уже высрали новую версию ГПТ с рефлексией, который сам себя анализирует и смотрит где не прав, а ещё может в прямом эфире материал изучать.
Так что байтоебы с аллокацией памяти. вы зря свои жопы напрягаете. Человек должен знать только то что ему нужно для работы, увы разум человека не резиновый и всю хуйню на свете вместить не может - для этого есть носители информации. куда человек обратится в случае если нужно какое-то знание. Теперь этот носитель информации - ИИ.
223 3298843
>>298793

> который мычание любой тёти сраки из офиса сможет конвертировать в логику


Хуита которой нас кормят уже лет 30. Еще DreamWeaver обещал это.

> Там ОпенАИ уже высрали новую версию ГПТ с рефлексией


Не смеши мою жопу. Я этот чатгпт каждый день юзаю чтобы заглушки генерить, и оно конечно впечатляет, но только на заглушки и годится.
224 3298848
>>298843

>Хуита которой нас кормят уже лет 30.


Ты ещё вспомни что концепцию математической модели нейросети аж в 40-х годах прошлого века придумали. Бум нейронок начался ТОЛЬКО в 2021 году, буквально только три года прошло, и за этот крошечный срок технология развилась феноменально, а "ии" уже в затылок некоторым профессиям дышит и просит подвинуться.

Наивно и даже глупо думать, что развитие технологии ВНЕЗАПНО остановится на той точке на которой оно есть сейчас, спустя всего три года активного роста. Я не экстраполирую линейно, но докрутить генеративную языковую модель до полного или частичного порешания байтоебов - это не фантастика, а обозримая и осязаемая перспектива.
225 3298861
>>298848
Перед каждой ии зимой такие разговоры были.

Пока что оно подходит только для того чтобы генерить пасту из тренировочного сета.

Тетя срака не будет ебаться с тем чтобы заставлять сети делать то что ей нужно, она наймет промто ждуна, точно так же как она нанимает вордпресс макаку сегодня.
226 3298879
>>298848
Я буду рад, если кто-то сделает генератор качественного ПО, потому что сегодня все "профессиональное" ПО ужасно, будто сделано отрядом JS-макак.
НО я в это не верю. Почему? Да потому что качественных данных почти нет. Если модель будет накормлена той хуитой, которую высирали макаки каждый день на протяжение последних 20-30 лет, то ничего хорошего из этой модели не выйдет. Говно на входе, моча на выходе.
227 3298893
>>298861
Какой ещё "каждой"? Генеративные нейронки первый раз три года назад выстрелили, до этого были только теории и нелепые попытки без какого-либо более-менее осязаемого результата. Ты не объективен в этом вопросе и общую картину замазываешь так как тебе хочется видеть.

>>298879

>Говно на входе, моча на выходе.


Не всё так однозначно. Последние высеры ОпенАИ свидетельствуют о том, что модель может демонстрировать универсальную "логику" которой её не учили. Возможно, когда у тебя непомерно большая база обучения атомарные данные этой базы в сочетании с большим контекстом формируют "новую логику", точно так же как и человеческий мозг в принципе. Человек же тоже ничего сам не придумывает он синтезирует "новое" из песчинок перемешанных и странным образом измененных у него в голове. Алсоу, наука не знает как, почему и из чего возникает сознание. Может оно и так возникает из сингулярности хаотичной информации. в таком случае если скормить нейронки непомерное количество говна, она в итоге будет способна синтезировать шедевр.

Ладно это уже нерилейтед лирика, которая не имеет отношения к тем нейронкам которые у нас есть в открытом доступе всё равно.
image.png262 Кб, 538x360
228 3298905
229 3298984
>>298745

>без анально-строгого конфига mypy


До 12 версии питона там пиздец как говёно всё сделано.
>>298751

>студенческие фантазии о хаскеле и иже с ними для нищих.


У касперского в ос часть инфраструктуры написана на хаскеле (который в си конпелируется). Где твой Б-г теперь?
230 3299010
>>298984
Эта та хуйня которая верещит как свинья и жрет ресы ос почем зря?

Понятно что есть наркоманы которые будут юзать любую эзотерическую хуйню, просто потому что могут.
Они с таким же успехом могли бы написать все на постксрипте, чеб нет.
231 3299028
>>299010
Свинью с озвучки убрали лет 10 назад примерно. На моем калькуляторе с виндус 7 последний каспер занимает ровно ноль процессорного времени и 1мб оперативы.
Алсоу каспер в любых хитпарадах лучших антивирусов всегда и по сей день стабильно в тройке лидеров и то только из за черного пиара, якобы там зонд кремля вшит (смешно такое читать особенно вспоминая скандал с эксплойтом этернал блю на винде, и я напоминаю, что этот эксплойт на всех виндусах начиная с 95 был встроен и давал бэкдор, который мог буквально полный доступ к системе давать удаленно)
232 3299029
>>299028
Если зонда там нет, то вдвойне обидно.
Энивейз, каким раком хаскель со своим гц и ленивостью и антивирь который должен жрать минимум ресурсов оказались в одном предложении, понять сложно.
233 3299467
>>298776
Ты уже сделал свой охуевший быстрый и безопасный проект на расте, которым все пользуются?

А сколько хуевых ты сделал бы на ебучем питоне?

А если ты не сделал нихуя, то как будто ты просто сидишь и серишь в лужу.
234 3299532
Какие библиотеки сегодня принято использовать у продвинутых веб-барист?
uvloop или стандартный asyncio loop?
aiohttp.web или uvicorn+starlette?
aiohttp или httpx?
psycopg(3) или asyncpg?
redis-py или aioredis?
aiomcache?
Есть ли что-то для MQTT?
aiobotocore или botocore+loop.run_in_executor?
235 3299754
>>299532
Бери то что предлагает твой фреймворк. Если это фастапи, то он тебе сразу старлетт и uvicorn даст.

А дальше как хочешь. Если делаешь скрипт чисто для себя - нахуй в него тащить aiohttp, можно просто request. Если тебе сервер нужен и поддержка тысяч rps, то бери только проверенные асинхронные библиотеки. Либо оборачивай в to_thread.
Сам решай, ты же не довен.
236 3299763
>>299029

>Энивейз, каким раком хаскель со своим гц и ленивостью и антивирь который должен жрать минимум ресурсов оказались в одном предложении, понять сложно.


Там хаскель - это вроде слоновая башня, можешь даже для линупс кернела писать на этой ебанине.
>>298905
А реально вообще с mypy и типииками жить? История: есть программулина, которая юзает ткинтер и хранит данные в sqlite базке, задача была сделать просто и быстро, теперь же планируется расширение проги, в том числе с веб говёным апи и с сурьёзной базой в виде пгсуки - подумываю свалить на говно в связи с этим, реально ли что-то среднего размера написать на петухоне с типами и вот этим всем, или похуй сразу на что-то статическое валить?
237 3299803
>>299754

> Бери то что предлагает твой фреймворк.


> бери только проверенные асинхронные библиотеки


С этого нужно было начинать. Что у пацанов на грани прогресса считается проверенным? Есть какой-нибудь общепринятый "стэк"? Предпочтений нет, можно и без фреймворка.
238 3299810
>>299763
Если есть возможность писать на настоящем языке программирования, то рекомендую сделать это. Если нет возможности или желания, то и с 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 не защитят тебя от ложных аннотаций в сторонних модулях.
239 3299814
>>299810
Спасибо, перекатываюсь на говно, ибо оче сложно выходит.
240 3299830
>>299810
Пользователи настоящих языков (с) поясните по хардкору в чем сакральный смысл этих ваших святых типов, что вы без них не можете ничего писать?
Предполагается что программист это мычащее пускающее слюни животное, которое и говорит с трудом и уж тем более не понимает куда какие аргументы в его коде должны втыкаться без строкой типизации?
241 3299834
>>299830
Если ты все время свой один пет пилишь, то можно обойтись динамикодрисней. Если слету заскакивешь на кабаний проект, то очень надо. Навигация по коду, автоматический рефакторинг, подсказки методов, подсказки документации типов, самодокументируемость кода выше.
242 3299837
>>299834

>Навигация по коду, автоматический рефакторинг, подсказки методов, подсказки документации типов, самодокументируемость кода выше.


Но это всё делает пайчарм на основе аннотации типов. Из за этого что ли весь баттхерт?
243 3299838
>>299834
Это всё хуйня, по сравнению с тем, что есть минимальные ГАРАНТИИ КОРРЕКТНОСТИ программы.
>>299837

>нахуя вам типы


>да всё заебок есть костыль на основе аннотации типов


Пиздец, блядь.
244 3299849
>>299838

>да всё заебок есть костыль на основе аннотации типов


Дружище, я же нормально спросил. Мне ответили, что святая типизация это такая вот подсказка для макаки, чтобы проще было в чужом коде разобраться. Ну и если это так, если это просто подсказка для макаки, то в питоне же и без строгой типизации это всё есть так или иначе.

>ГАРАНТИИ КОРРЕКТНОСТИ


Приведи пример. Вот этот код с ГАРАНТИЯМИ КОРРЕКТНОСТИ заебись и такой код на питухоне не напишешь. Но мне почему-то кажется что суть явления которое ты прячешь за ФОРМУЛИРОВКАМИ сведется к тому что строгая типизация просто помогает макаке не обосраться. Т.е. всё сведется к тому что мне ответили выше - строгая типизация это просто QoL фича.
245 3299861
>>299849
Типизация - это и есть твои анотации, неправильно, аннотации типов - это попытка в типизацию, дружище.

>Приведи пример. Вот этот код с ГАРАНТИЯМИ КОРРЕКТНОСТИ заебись и такой код на питухоне не напишешь. Но мне почему-то кажется что суть явления которое ты прячешь за ФОРМУЛИРОВКАМИ сведется к тому что строгая типизация просто помогает макаке не обосраться. Т.е. всё сведется к тому что мне ответили выше - строгая типизация это просто QoL фича.


Для продолжения беседы нужен пруф, что ты не толстишь.
246 3299864
>>299861
Ну вот так всегда, визгов про типизацию выше гор, а когда спрашиваешь по сути - начинается виляние жопой. Сектанты вы. которые привыкли к некоему интерфейсу перешли в другой - там всё иначе и вы этим окружающих заебываете.
247 3299868
>>299864
Почему не смог в чтение?

>Для продолжения беседы нужен пруф, что ты не толстишь.

248 3300020
>>299830

>в чем сакральный смысл этих ваших святых типов, что вы без них не можете ничего писать?


Если бы ты когда-нибудь писал программы на статически типизированном компилируемом языке, то ты бы знал, что компилятор не скомпилирует программу, если не сможет доказать корректность на уровне типов (если ты его явно не обманул небезопасным кастом).
Если бы ты когда-нибудь занимался рефакторингом, то ты бы ценил ошибки компилятора. Хочешь изменить атрибут структуры или аргумент функции? Поменяй, и компилятор покажет тебе все места в коде, где этот атрибут или аргумент теперь неправильно используется. Исправь все ошибки, и ты уже на шаг ближе к цели. Рефакторинг проекта условно среднего размера в настоящих языках программирования занимает пару вечеров, и ты заканчиваешь рефакторинг с уверенностью в корректности программы.
Как это выглядит в питоне? Хуячим грепом и надеемся, что где-то не пропустили. Рефакторинг любого проекта на питоне заканчивается только тогда, когда ты навернул 100% покрытия юнит тестами, и не дай бог ты забыл проверить типы аргументов и возвращаемых значений каждой функции. Если не покрыл тестами - твоя программа на самом деле не корректна.
Mypy, pyright, pytype, и прочие программы ЗНАЧИТЕЛЬНО увеличивают продуктивность при разработке нетривиальных программ. Не с нихуя такие гиганты как google (python), dropbox (python), stripe (ruby), microsoft (javascript), и другие вложили огромные ресурсы в утилиты для статического анализа.
Питону не хватает хорошего интерпретатора, отключения GIL, и опционального строгого режима анализа типов на уровне интерпретатора.
Думайте.
249 3300056
>>300020
Ну т.е. настоящий (серьезный, взрослый, не детский, не пет) проект это спагетти говнокод, где один аргумент насквозь проходит через всю программу, а пускающие слюни макаки не в состоянии его изменить не сломав всё остальное. Типизация же помогает дегенератам настоящим программистам в этом нелегком деле рефакторинга.

Ну собственно я всегда так и знал, просто не мог поверить и хотел уточнить, почему все так визжат закатив глаза и требуют святую типизацию в питухоне.
250 3300114
>>300056

>словно хуй дроченый в жопу пидора вошел аргумент в функцию

251 3300116
>>299830
>>299837
>>299849
>>299864
>>300056
Последний оплот динамической типизации - Жирнич, из Двача.
252 3300126
>>300116
Но ведь сама типизация тут не при чем, как мы выяснили из ответов выше, весь баттхерт из за того, что настоящим программистам нужен помощник, который таким вот образом чекает их говнокод. Так-то все эти инструменты давно есть, но они продолжают визжать и ныть, надо чтобы всё было встроено.
253 3300162
>>299803
Если тебе сервак то у тебя два стула. Либо джанго и там все уже будет. Либо если ты любишь сам подбирать стек - фаст апи. К фаст апи либо sqlmodel, либо sqlalchemy. У фаст апи прям жирнющая дока в которой очень opininoned все написано. Можешь с нее начать, будешь самый модный на районе. И uv вместо pip и poetry возьми.
254 3300166
>>300020
GIL почти отключили. В 13 эксперементально выключается. Только нахуй оно тебе надо, если математика в numpy и так выключена, IO bound не подвержен gil, а для всего есть асинки?
Че ты там считать такое в тредах собрался, что тебе нужно отключение гила?
255 3300179
>>300166

>Только нахуй оно тебе надо, если математика в numpy и так выключена, IO bound не подвержен gil, а для всего есть асинки?


>Че ты там считать такое в тредах собрался, что тебе нужно отключение гила?


Чтобы не запускать 128 процессов на сервере с 128-поточным процессором, конечно же. Даже если сделать load then fork вместо классического питонячего fork then load, вся CoW память процесса будет скопирована из-за референс каунтинга вообще всего, даже модулей и объектов кода.
256 3300184
>>300179
Ты можешь пример из жизни привести? Че ты там собрался в процессах считать?
257 3300209
Аноны, а что есть почитать по питону для уже знакомых с разработкой в целом и с питоном в частности? Что-нибудь более углубленное для уровня миддла и желательно современное.
Сейчас в основном работаю с фастапи, интересуют принципы работы интерпретатора, асинхронность, такие вот вещи.
258 3300227
>>300162

>У фаст апи прям жирнющая дока в которой очень opininoned все написано.


Все так восхищаются докой фастапи, а по-моему у джанги документация на порядок пизже.
259 3300228
>>300184

>Че ты там собрался в процессах считать?


Протеины.
image.png84 Кб, 242x348
260 3300229
>>300209

> для уже знакомых с разработкой


См. >>284908

>асинхронность


Пик
261 3300598

>ряяя нахуя вам си, чё макака не осилила на асме под хуй86


Я всё правильно, понял о доводах дебила, который против типов?
262 3300923
>>284682 (OP)
как запостить видео в свой телеграм канал через бота
сообщения отправляются а вот с видео беда
263 3300925
>>299532
>>299754
>>299803
>>300162
>>300227
Вот честно объясните, для чего вам asyncio? Почему не создать 100-1000-5000 тредов в тредпуле, или загнать gevent на худой конец? У asyncio нет проверенных библиотек. Вы понимаете насколько сложно писать сетевой код? Сколько крайних случаев может быть у сетевых протоколов? Это полировали десятки лет в обычном не-асинк питоне. У asyncio библиотек ишуе-трекеры на гитхабе завалены багами и уязвимостями.
Это честный и серьезный вопрос, не троллинг.
264 3300948
>>300925

>У asyncio нет проверенных библиотек


Что ты имеешь в виду?
266 3300988
>>300925

>Почему не создать 100-1000-5000 тредов в тредпуле


Так создай 5000 тредов и 5000 корутин с реквестами к хттпбин и проверь.
267 3300997
>>300925
Я может в институте плохо учился, потому что пиво много пил, но насколько я помню, асинхронность от тредов в питухоне отличается только тем, что в асинхроности ты сам решаешь где горлышко бутылки и когда уступать выполнение, а в питонячем трединге из за ГИЛа всё равно нет этого самого трединга, одна видимость, и там то же самое уступание, только когда утупать выбирает управляющая система. Т.е. если ты насрешь 5к тредов у тебя всё время будет тратится на бесполезное переключение между тредами. Но это не точно.
268 3301164
>>300997
Различай вытесняющую многозадачность - когда коды переключает система по таймеру и кооперативную - когда твой код уступает место во время ожидания. В питоне возможна асинхронность на основе кооперативной многозадачности. Все дело в том, что GIL разблокируется во время выполнения операций ввода-вывода и и когда вычисления произволятся не в питонячем коде, а в сишной коде модуля типа numpy. Например ты в треде делаешь реквест с помощью либы requests, и тред засыпает пока не придет ответ от сервера, в этот момент GIL разблокируется, и управление передается следующему треду из пула. В новом треде начинает выполнятся питон, и GIL блокирует другие треды. Потом выполнение доходит до кода с запросом requests, и тред засыпает и разблокирует GIL. И так далее.
269 3301234
>>300925

>Почему не создать 100-1000-5000 тредов в тредпуле


А в петухоне треды - это прямо треды, как в pthread, или какая-то лайт хуитка как корутины в говне?
270 3301667
Питоняши, какова сейчас нестыдная зарплата для обычного мидла-мидла+, без лидских задач (но есть менторство), на удаленке? Сам получаю 260к и временами парюсь что мог бы зарабатывать больше, если бы менял компании, получал больше опыта на различных проектах.
image.png28 Кб, 753x382
271 3301843
Посоветуйте хорошую практику чтобы такие конфиги генерить.

Главное чтобы людям было удобно потом с этими конфигами работать и добавлять новые.
Какие-то свойства постоянные и захардкоженные, а какие-то надо параметризировать.

Думал шаблонизатор на jinja2 сделать, но мне сказали что оверкилл.
272 3301857
>>301843
Я в таких случаях решил использовать класс с паттерном синглтон, наследуемый от словаря. Он в таком виде получается просто как контейнер с полями.
274 3301968
>>301843
Я не скажу что это прям хорошая практика, но мы вообще подымали игрушечную постгрю с графическим интерфейсом поверх (Directus) и простой схемой, и ее кверяли в рантайме. Полет нормальный если к дизайну не допускать DWH шиза который налепит двадцать пятую нормальную форму.
ГигаIDE - ГООООЛ? 275 3303970
Поясните за ГигаIDE, я скачал и это intelli + pycharm в одном. Ну в принципе эти ide это open source. То есть сбер взял эти ide которые open source, объеденил в одно и добавил своё расширение гигакод, и сказал это ГООООЛ? Так что ли?

https://gitverse.ru/features/gigaide

Затестите и скажите ваше мнение.
image83 Кб, 1183x377
276 3304000
>>303970

>я скачал и это intelli + pycharm в одном


Поражаюсь твоей проницательности.
277 3304026
>>301857
@dataclass что ли?
278 3304405
>>303970

>Затестите и скажите ваше мнение.


Ты только что познал суть российского импортозамещения и аналоговнетных продуктов.
279 3304432
>>299830
В больших проектах динамика это ад, особенно если начинаешь работать над той частью, которую писал другой человек.
Дело даже не в корретности, а в отсутствии необходимости постоянно чекать что у тебя во входных данных придет когда ты собственно что-то переписываешь, вот есть какая-нибудь бизнес хуйня типа куска заказа, а что это какой-то класс, словарь или вообще другое непонятно.
280 3304682
>>284682 (OP)
Чем вы Питухон интерактивно дебажите? ВСКоде?
281 3304742
>>303970
Охереть наговнили, в win11 нельзя увидить эту программу в apps, собственно, по простому удалить.
282 3304879
>>304682
Просто print в консольку линуха.
283 3304908
>>304879
А если сложную структуру посмотреть?
284 3304912
>>304908
loguru.
17142847338780.jpg143 Кб, 800x400
285 3304922
>>304908
Тогда 2 принта!
286 3304928
>>304922
>>304912
Принты это конечно хорошо, но хотелось в окошечках, попробую
https://visualstudio.microsoft.com/vs/features/python/
Студия есть
287 3304937
>>304908
for ... print в нужном месте. А еще у меня обычно пользовательские исключения и маленький самописный логер на одну функцию с цветами сообщений что сам подобрал себе по вкусу, аргументы и вывод которого меняю под проект.
Но я камплюктер начинал еще с MS-DOS, мне норм я привык, также как и люблю копролиты в один крупный py файл (но не всегда).
288 3304943
>>304937

>for ... print в нужном месте


Ну перестань, это же говноедство если ты на локальной машине работаешь, да же во времена ДОС было IDE как помню, BORLAND и Microsoft всякие.
289 3304950
>>304943
Борланд это паскаль, это уже в технаре было.
Сосницкими в бывшем доме пионеров мы в кружке на турбовасике писали. Файлы открывали, а нортон командере, а сам редактор не помню уже названия.

>это же говноедство


А мне норм.
290 3304956
>>304950

>Борланд это паскаль, это уже в технаре было.


Да, но у них и С++ был Turbo Vision назывался, можно было нормально отлаживать и окошки для ДОС клепать, Визуал что то там от Майкрософт на ихнем фоне выглядело как говно, еще Ватком был.

>А мне норм.


Ну я сам такое активно пользую, но если есть возможность предпочитаю интерактивный дебагинг и возюкинг мышкой.
291 3304961
>>304956
Мы в технаре на паскале прогали, но я не помню какая винда там была, наверно 98. Для ее делали простые проги. Ну те самые где вся логика в обработчике нажатия. А вообще скучаю немного за нортоном, такой ламповый был, сейчас миднайткомандер юзаю вместо него.
292 3304971
>>304961

>наверно 98


Так это не тру, я еще накатывал 3.1 на ДОС, а вот двупанельные менеджеры это да, был еще Волков Командер, Дос Навигатор, конечно они на хуй не нужны как и Тотал Командер, поскольку если ты под Виндой ебешься так с файлами, значит у тебя проблемы с организацией.

>Ну те самые где вся логика в обработчике нажатия.


Может Делфи имеешь в виду? Там можно было под Винду писать.
293 3304973
>>304971

>Может Делфи имеешь в виду? Там можно было под Винду писать.


Он же технически паскаль насколько я помню, точнее обжект паскаль. А среда борланд дельфи.
294 3304976
>>304973
На сколько помню Паскаль, Турбопаскаль, это под ДОС и псевдографику и консольки типа Тотал Командера под ДОС, а Делфи это апнутый Паскаль и уже под Видну, в чем различая я хз. Паскаль никогда мне не нравился из за богомерзкого символа присваивания := и begin/end
295 3304977
>>304976
Я тоже не знаю различий, или может кто-то говорил из преподов когда-то, но я забыл уже давно. Я коммерческого не писал на паскале, только учебные, а потом после техникума забил на него.
296 3304979
>>304977
А какими судьбами в Питухон попал? Не основной твой язык?
297 3304980
>>304979
Перекатился с пхп как-то.
298 3304984
>>304980
Норм, Пыха же чисто под веб, хз как она взлетела в свое время, тогда и Перл был и еще что то.
299 3304987
>>304984

>хз как она взлетела в свое время


Думаю из-за Денвер под винду где все искаропки, плюс на него много материалов на русике было, также всякие вордпресы, джумлы, друпалы и т.д. плюс фреймворки.
Перл я когда-то пробовал, из комп журналов, там для веба надо было мутить cgi-bin, и вообще он мне заумным показался, не для меня.
300 3304988
>>304987

>Перл я когда-то пробовал


Перл топчик обожаю его, Питухон кстати чуть младше его на пару ле. Эра Перла прошла к сожалению, но он на всегда в наших сердцах, а у Питухона экосистема хороша и это то же не плохо.
Обновить тред
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее