Этого треда уже нет.
Это копия, сохраненная 6 февраля 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Питон тред №151 /python/ 2527453 В конец треда | Веб
Тред, посвящённый языку программирования Питон, #151

Предыдущий: >>2509442 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq

Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
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, но разницы почти нет)

— Какие книги считаются лучшими?
На слуху чаще всего Лутц, но там очень много воды. Ещё на слуху Марк Саммерфильд, Эл Свейгарт "Автоматизация рутинных задач с помощью python". Эти книги рекомендуют чаще всего, но книги довольно старые, а питон развивается.

— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0

— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать даже для версий 1.x, т.к. принципы остаются теми же. Но лучше хотя бы с версии 2.0, слишком много мелких изменений в базе.

— Какие веб-фреймворки стоит учить в начале двадцатых?
Что бы не говорили, Джанго живее всех живых и умирать не собирается (и Django REST Framework), очень перспективный асинхронный FastAPI, асинхронный AioHTTP. Flask ещё где-то используется, но уже legacy. Прочие фреймворки или у нас экзотика, или это вымирающее легаси как Торнадо.

— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но частично переработанная под язык Python: http://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.

— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.

старая версия шапки, треды 90-148 и ранее: https://dumpz.org/bASGKD8cCFDf
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущий исходник: https://goonlinetools.com/snapshot/code/#8gd2g1snu3l8i26k0bc6k9
2 2527620
Я очень люблю отвечать на вопросы ньюфагов по коду.
Это и самому позволяет лучше разобраться, иногда затрагивает сторонние для меня темы, или там могут быть вопросы, которые логичны, но которые я сам себе не задавал почему-то.
3 2527622
Но только когда это вопросы по коду, а не "зачем нужны классы?".

Функции это инструмент, классы инструмент и питон — тоже инструмент. Инструменты бывают производительнее, понятнее, безопаснее или удобнее, и всё, никакого высшего смысла использовать одно вместо другого. Используешь по своим нуждам. И придётся ориентироваться на инструменты которые используют другие, если хочешь вместе с кем-то код писать и не быть белой вороной, да, что опять же вопрос нужд. А смысл — это человеческая абстракция мышления, артефакт работы мышления. Его нет ни в классах, ни в жизни.
4 2527629
>>27453 (OP)

что несёт дебил блять. если питон 4 не будет вводить ничего в сам язык, нахуя ему версию менять? остатки питона второго додавили, скучно стало?
5 2527639
>>27620
Ответишь на мои?
6 2527640
>>27639
Постараюсь. Если напишешь вопросы тут или напишешь мне на дискорд. Я правда не знаю как запостить, так как меня банили за айдишник тут.
7 2527673
>>27620
Если вычесть джуновы вакансии датасаенса и мл, сколько останется бэкенд вакансий? Будет ли тогда в питон вкатиться все еще легче, чем в джаву? А за пределами рф?
8 2527693
>>27673
Когда ты вкатываешься в бэкенд, ты вкатываешься именно в бэкенд, а не питон. Основной объём знаний соответствующий

Вкатиться сложно, бэкенд вакансий мало, вне джанго-стека. Особенно джун-вакансий.
9 2527718
>>27453 (OP)
Если не будет ничего нового, то зачем тогда выпускать 4,0? А? А? А?
10 2527776
год опыта в резюме рисовать при том что без опыта на коммерческих норм тема? 100+ откликов, ниразу даже тестовое не выслали не говоря о собесах
11 2527815
>>27776
Это тред про устройство на работу? Ты отклики тоже на должности химиков и юристов кидаешь?
12 2527817
>>27776
Рисовать можешь любой. На техсобесе синьор-помидор, если не на отъебись набирает народ, чтоб закрыть просто ваклуху, наводящими вопросами это прочухает.
13 2528017
>>27776
Пздц, а мне тестовое раза 3-4 присылали, но я каждый раз сливался
14 2528038
Есть простой вопрос
Нужно сделать эндпоинт только для одной цели - принимать здоровенный, в несколько гб пост с джейсоном и писать его на диск, и создавать событие по окончанию записи
Соответственно это говно должно быть асинхронным и а дальнейшем расширяемым до авторизации и тд.
Стоит ли смотреть на фласк или накорячить на http.server? или может aiohttp?
15 2528138
Почему Гвидо не завезет JIT с пистон? Без JIT-а мы же сосем писю по хардкору. PyPy имеет JIT, но новые фичи туда не скоро залетают а какие-то либы не совместимы
16 2528308
Яндексоиды предлагают реализовать алгоритм бинарного поиска от 0 до 1000 и в качестве примера дают следующее:

500
Меньше
250
Меньше
125
Меньше
63
Больше
94
Больше
109
Больше
117
Больше
121
Больше
123
Угадал!
11111.jpg33 Кб, 881x302
17 2528311
>>28308
Ебал в рот тупой спам-лист
изображение.png17 Кб, 580x234
18 2528344
>>28308
И даже правило про округление до чётного не применить.
Может быть на глаз кто-то написал. Да и что меняется то, суть то та же? Или хочешь прям такие же значения получить? Ну держи, вот, это всегда пожалуйста. Применяя правила округления к (n1+n2)/2 или к (n2-n1)/2 можно получить желаемое.
19 2528356
Аноны, а сохранилась ли у кого нибудь шапка из старых питон тредов? Годная же инфа была.. В ссылке на старую версию лежит тот текст, который в шапке сейчас
20 2528366
>>28344
Спс, попробую. Интересно, они специально так сделали для повышения сложности или им просто пофиг было?

Хотя у них в задании на циклы одним из последним идет какая-то задача на хэш-функции. Может и специально так хитро встраивают неочевидные моменты в простые на первый взгляд задачки.
Стикер512x512
21 2528388
>>27622
Вот есть молоток это инструмент. Молоток нужен чтобы забивать гвозди в поверхность, вот есть микроскоп, это инструмент, микроскоп нужен чтобы рассматривать мелкие детали.

Разница между назначением этих инструментов понятна и даже очевидна. И ты не будешь забивать гвозди микроскопом, хотя в принципе мог бы.

#---------

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

Вопрос от Жака Фреско. А нахуя нужно два одинаковых инструмента?
22 2528407
>>28388
Не так. Функция - это организация кода. Функция сортировки, например.
А класс - организация данных. На вопрос что такое класс сортировки - я смогу только гипотезы примерные выдвинуть, так как не очень ясно что это.

И то же самое в обратную сторону, что такое класс ползунка (который элемент интерфейса) - понятно. А вот что такое функция ползунка я не могу ответить. Будет интересно если ответить сможешь ты.
23 2528437
>>28407
Т.е. между классом и функцией можно поставить знак равенства. Суть у них одна и так же только название разное - чтобы человеческие мешки с костями не путались (ООП)
24 2528462
>>28437
Ты можешь в классе объявить функцию?
А в функции объявить класс?
мимонепитунист
25 2528463
>>28437

> чтобы человеческие мешки с костями не путались


Для нечеловеческих мешков с чипами не существует ни функций ни классов, а только инструкции, которые всё идут-идут и никак не заканчиваются.
26 2528480
>>28462
Да.
27 2528490
>>28437
Ладно, возвращаюсь к своей политике отвечать только по коду.
Приходи когда будет код и не понятно как он работает или работает не совсем правильно, или когда будет не совсем ясно как сделать фича-нейм.
28 2528493
>>28490
Я с самого начала пытался понять есть ли в "инструменте класс" какие-то фактические отличия от "инструмента функция", но почему-то УЧИТЕЛЯ не могут прямо ответить на этот вопрос: мол так и так, нихуя различий нет, классы нужны только чтобы челики не путались, это функция которая просто называется другим словом.
Вместо этого УЧИТЕЛЯ начинают какую-то ментальную гимнастику, вилять тазом, обтекаемо рассказывать про машину с дверями и прочую хуйню-малафью.

Вот человек хочет понять СУТЬ явления, а она такова что это функция под другим словом. ООП? Очень хорошо. очень важно. Но почему просто так и не ответить. Ладно, Бог с вами.
29 2528495
>>28493

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


Я почитал ваши диалоги. Тебе пытались объяснить абстракцию, через её назначение, через её составные части, и через другие абстракции. К сожалению, я не знаю других способов объяснить абстракцию. Ты знаешь другие способы? Типа, чем лес отличается от рощи?
30 2528499
Сап. Можно где-то почитать про отличия между 2 и 3 версией пайтона? Мне нужно только на уровне синтаксиса, ибо работаю с несколькими примерами кода, которые написаны на разных версиях. И постоянно ловлю синтакс ероры когда пытаюсь перенести код.
32 2528530
>>28493
Уже 10 раз объяснили чем отличается функция от класса и ты продолжаешь срать про СУТЬ.
СУТЬ в том, что функция берёт ЧТО-ТО, делает что-то (а может и не делать) с этим ЧТО-ТО и возвращает ЧТО-ТО (а может не возвращать), а класс КОНКРЕТИЗИРУЕТ ЭТО ЧТО-ТО, придаёт ему больше смысла ДЛЯ ЧЕЛОВЕКА и даёт ЧЕЛОВЕКУ возможность с этим ЧТО-ТО оперировать не как с ЧТО-ТО, а как с чем-то КОНКРЕТНЫМ.
33 2528535
>>28530
Как же ты меня вывел, хуесосная пидарасина.

У тебя есть код, в котором есть ФУНКЦИЯ "РЕЗАТЬ", ты этой ФУНКЦИЕЙ можешь резать СТЕЙКИ, БУМАГУ, ВЕБМКИ, СВОЮ МАТУХУ или УЗДЕЧКУ.

А так же у тебя есть другой код, в котором есть абстрактный КЛАСС "РЕЗАЕМОЕ", от которого на КОНКРЕТНОМ уровне наследования ты можешь создать классы "СТЕЙК", "БУМАГА", "ВЕБМКА" и т.д., и у КАЖДОГО ИЗ НИХ будет СВОЙ метод "РЕЗАТЬ".

И вот теперь представь, когда у тебя по диагонали кода гуляют РАЗНОТИПНЫЕ данные.
В первом случае ты на эти данные натравливаешь ФУНКЦИИ и ожидаешь какое-то ПОВЕДЕНИЕ. Тебе надо ВНУТРИ ФУНКЦИИ описывать ПОВЕДЕНИЕ для КАЖДОГО ТИПА.
В втором случае ты ОБОРАЧИВАЕШЬ эти данные КЛАССАМИ, придаёшь им КОНКРЕТНЫЙ ТИП и соответствующее ему ПОВЕДЕНИЕ через методы.
34 2528536
Это >>28535 было сюда >>28493 , но я просто уже немного пьян.
35 2528542
>>28493

>это функция которая просто называется другим словом


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

В итоге мы получаем, что ни функции ни классы нахуй не нужны, ты можешь сплошняком объявлять по всему коду переменные и делать с ними что хочешь через базовые операторы. Вот только за такой код пизды дают.
изображение.png14 Кб, 214x316
36 2528543
>>28493
Если ты все задачи будешь решать только функциями без использования классов, то в 80% задач (если на в 98%) на питоне ты будешь микроскопом забивать гвозди. Решать задачи только классами без функций ты не можешь в принципе, так как методы класса - тоже функции.

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

ООП, это не только абстракция для человека. Если ты посмотришь не на интерпретируемый питон, а на с++ тот же, прочитаешь как работает таблица виртуальных методов и (бесполезный) динамический полиморфизм, то лучше поймёшь разницу (как ты вообще, мать его, можешь её не видеть?)

Развитие шло примерно как:
1. Голый линейный код, его ещё вбивали вручную на эвм, для самых рутинных задач.
2. Условные переходы на строчки и метки, это уже ассемблер.
3. Функции и структуры (класс без методов, просто несколько именованных параметров), это уровень си. Вот тут очень хорошо видно расслоение, что структуры - это просто синтаксический сахар для куска данных, ты можешь обращаться к координатам вектора p1, как к p1.x и p1.y, а не как к данным по адресам [p1+0] и [p1+8]. А функции - это код. Ты не можешь писать код в структурах, или размешать данные в функциях.
4. Классы, наследование и прочий ооп-мусор, это уже с++, питон и прочее. Ещё здесь обобщённое программирование появляется. В классах уже можно размещать код, но имхо будет правильнее сказать, что класс, это набор полей (данных) и список методов (что с данными можно сделать), а вот сами методы, это уже функции. Метод это же и есть функция, которой передаётся объект первым аргументом.

Вот давай с конца пример и приведу. Обобщённое программирование. Ты пишешь код, который работает для разных типов данных. Функция, которая работает и со строками произвольной длины, и с векторами, и с множествами, и с простыми числами. Ты можешь написать обобщённую функцию сортировки, которая будет сортировать любые объекты для которых определён оператор <.
Что это даёт? Тебе не нужно копипастить свой код для нового типа, который ты используешь только в своей программе. Быстрее разработка, меньше возможности ошибиться, так как тебе только оператор сравнения больше-меньше нужно сделать.
Дальше. Классы. Пример с sfml, смотрел же код? У тебя есть класс квадратного перемещаемого объекта. Все кнопки, надписи, текстуры, и другие объекты обладающие прямоугольным размером и позицией просто наследуются от сущности квадратности. Я вот когда такое делал, я просто копировал, хули там, пару строчек для координат. Но потом я добавил ещё тип обладающий прямоугольностью, и ошибся, так как в виндоус у тебя координаты от левого верхнего, а в opengl от левого нижнего. Угу, я вынес это в отдельный класс, весь код для координат вместо трёх копий оказался в одном месте, и при добавлении функции проверки вписан ли один прямоугольник во второй мне достаточно добавить только в одном месте нужный код. А ещё это в миллион раз проще тестировать, чем монолитный код. Что это даёт? Да всё то же, быстрее разработка, намного устойчивее к человеческим ошибкам, намного проще читать чужой код. Функции и структуры. Пример с [p1+0] и [p1+8] я уже привёл. А представь, что у тебя есть юнит в коде игры, у него характеристики брони и атаки, координат и поведения, и вдруг ты решил добавить ему ману. И тебе везде в коде нужно p1+32 заменять на p1+40. А на бумажке у тебя отдельно должно быть выписано описание всех таких типов, и это нужно быть нечеловечески внимательным, чтобы с нормальной скоростью разрабатывать код.

Если что, ранний с++ компилировался в си. Разворачивая код из классов в функции. А шаблоны даже сейчас разворачиваются в обычный код для обычных типов, просто прозрачным для человека образом. Вообще весь код сейчас сводиться к машинным инструкциям тем же, часто через промежуточное представление в виде ассемблера, или даже через несколько промежуточных представлений. Можешь прочитать про clang, там прям всё это описано какие стадии.

Ещё раз, что в итоге.
Ты можешь использовать все средства выразительности, и чтобы сделать калькулятор как пикрелейтед тебе нужно:
30 минут на питоне. Нагуглить как кнопки ставить и поле ввода, на этом твоя работа закончится. Код будет строк на 100-200, коротких и легко просматриваемых.
40-60 минут на с++ (если всё настроено). Там менее дружелюбная инфраструктура языка, скорее всего будет знак квадратного корня не выводится или ещё что-то такое. Медленнее, так как в питоне ide получше, и ты только управляющий код пишешь, который часто можно чуть ли не угадать. По коду скорее всего то же самое или немного больше.
60-120 минут на си. Тебе придётся память от строки ввода вручную удалить. И если забудешь, будет утечка памяти. А вместо функции у каждой кнопки - тебе придётся каллбек регестрировать скорее всего, так как интерфейс (в плане кода) либ или winapi не особо дружелюбный. И строк кода будет 500+.
≈300 минут на ассемблере, так как даже просто вызвать функцию создания окна с нужными параметрами - это то ещё приключение.

Это при том, что у тебя нет никаких массивов данных, строк или других сложных объектов в калькуляторе.
Если ты пишешь компьютерную игру, не дай бог стратегию или ещё что-то с кучей разнообразных объектов, то (отказываясь от очередной абстракции) количество кода будет отличаться в 5 раз, количество мест где можно ошибиться в 30 раз, ты просто первую версию будешь писать в разы дольше, а потом год будешь исправлять ошибки и баги, так как ты не робот, а новый коллега приходящий в твой проект хоть что-то полезное сможет сделать через месяц изучения уже имеющегося кода.
Классы дают тебе и некоторую модульность, так что сущность прямоугольности (как в sfml) находится в одном месте, там же отлаживается и проверяется, и возможность одновременно работать даже с достаточно тесно взаимосвязанными объектами без накладных расходов по времени разработки (и часто без накладных расходов по производительности). В случае квадратности или любого другого тривиального примера ты можешь и копипастить код, да, но в любой сложной задаче это заметно увеличивает время разработки и количество потенциальных ошибок.

Ты хочешь ответ в чём качественная разница если можно код без классов писать? Ну, её какбы и нет. Ты можешь любой код без классов писать. Но и говорить что нет разницы между 1 и 100 неверно.
Классы настолько существенно могут улучшить надёжность, читаемость, понятность, портируемость (при переносе на новую версию или другую платформу с другой либой) и кучу других характеристик, что разница примерно на уровне "это программа средней сложности для одного программиста" и "это невозможно написать с достаточным качеством без команды опытных программистов и года разработки и тестирования". Человеческий фактор настолько влияет, что из-за громоздкости кода программа с классами может быть даже производительнее.

Можно ещё без циклов кстати писать любой код, используя только рекурсивные функции. Можно вместо переменных использовать один массив на 12312312 элементов, и всё размещать в нём.
изображение.png14 Кб, 214x316
36 2528543
>>28493
Если ты все задачи будешь решать только функциями без использования классов, то в 80% задач (если на в 98%) на питоне ты будешь микроскопом забивать гвозди. Решать задачи только классами без функций ты не можешь в принципе, так как методы класса - тоже функции.

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

ООП, это не только абстракция для человека. Если ты посмотришь не на интерпретируемый питон, а на с++ тот же, прочитаешь как работает таблица виртуальных методов и (бесполезный) динамический полиморфизм, то лучше поймёшь разницу (как ты вообще, мать его, можешь её не видеть?)

Развитие шло примерно как:
1. Голый линейный код, его ещё вбивали вручную на эвм, для самых рутинных задач.
2. Условные переходы на строчки и метки, это уже ассемблер.
3. Функции и структуры (класс без методов, просто несколько именованных параметров), это уровень си. Вот тут очень хорошо видно расслоение, что структуры - это просто синтаксический сахар для куска данных, ты можешь обращаться к координатам вектора p1, как к p1.x и p1.y, а не как к данным по адресам [p1+0] и [p1+8]. А функции - это код. Ты не можешь писать код в структурах, или размешать данные в функциях.
4. Классы, наследование и прочий ооп-мусор, это уже с++, питон и прочее. Ещё здесь обобщённое программирование появляется. В классах уже можно размещать код, но имхо будет правильнее сказать, что класс, это набор полей (данных) и список методов (что с данными можно сделать), а вот сами методы, это уже функции. Метод это же и есть функция, которой передаётся объект первым аргументом.

Вот давай с конца пример и приведу. Обобщённое программирование. Ты пишешь код, который работает для разных типов данных. Функция, которая работает и со строками произвольной длины, и с векторами, и с множествами, и с простыми числами. Ты можешь написать обобщённую функцию сортировки, которая будет сортировать любые объекты для которых определён оператор <.
Что это даёт? Тебе не нужно копипастить свой код для нового типа, который ты используешь только в своей программе. Быстрее разработка, меньше возможности ошибиться, так как тебе только оператор сравнения больше-меньше нужно сделать.
Дальше. Классы. Пример с sfml, смотрел же код? У тебя есть класс квадратного перемещаемого объекта. Все кнопки, надписи, текстуры, и другие объекты обладающие прямоугольным размером и позицией просто наследуются от сущности квадратности. Я вот когда такое делал, я просто копировал, хули там, пару строчек для координат. Но потом я добавил ещё тип обладающий прямоугольностью, и ошибся, так как в виндоус у тебя координаты от левого верхнего, а в opengl от левого нижнего. Угу, я вынес это в отдельный класс, весь код для координат вместо трёх копий оказался в одном месте, и при добавлении функции проверки вписан ли один прямоугольник во второй мне достаточно добавить только в одном месте нужный код. А ещё это в миллион раз проще тестировать, чем монолитный код. Что это даёт? Да всё то же, быстрее разработка, намного устойчивее к человеческим ошибкам, намного проще читать чужой код. Функции и структуры. Пример с [p1+0] и [p1+8] я уже привёл. А представь, что у тебя есть юнит в коде игры, у него характеристики брони и атаки, координат и поведения, и вдруг ты решил добавить ему ману. И тебе везде в коде нужно p1+32 заменять на p1+40. А на бумажке у тебя отдельно должно быть выписано описание всех таких типов, и это нужно быть нечеловечески внимательным, чтобы с нормальной скоростью разрабатывать код.

Если что, ранний с++ компилировался в си. Разворачивая код из классов в функции. А шаблоны даже сейчас разворачиваются в обычный код для обычных типов, просто прозрачным для человека образом. Вообще весь код сейчас сводиться к машинным инструкциям тем же, часто через промежуточное представление в виде ассемблера, или даже через несколько промежуточных представлений. Можешь прочитать про clang, там прям всё это описано какие стадии.

Ещё раз, что в итоге.
Ты можешь использовать все средства выразительности, и чтобы сделать калькулятор как пикрелейтед тебе нужно:
30 минут на питоне. Нагуглить как кнопки ставить и поле ввода, на этом твоя работа закончится. Код будет строк на 100-200, коротких и легко просматриваемых.
40-60 минут на с++ (если всё настроено). Там менее дружелюбная инфраструктура языка, скорее всего будет знак квадратного корня не выводится или ещё что-то такое. Медленнее, так как в питоне ide получше, и ты только управляющий код пишешь, который часто можно чуть ли не угадать. По коду скорее всего то же самое или немного больше.
60-120 минут на си. Тебе придётся память от строки ввода вручную удалить. И если забудешь, будет утечка памяти. А вместо функции у каждой кнопки - тебе придётся каллбек регестрировать скорее всего, так как интерфейс (в плане кода) либ или winapi не особо дружелюбный. И строк кода будет 500+.
≈300 минут на ассемблере, так как даже просто вызвать функцию создания окна с нужными параметрами - это то ещё приключение.

Это при том, что у тебя нет никаких массивов данных, строк или других сложных объектов в калькуляторе.
Если ты пишешь компьютерную игру, не дай бог стратегию или ещё что-то с кучей разнообразных объектов, то (отказываясь от очередной абстракции) количество кода будет отличаться в 5 раз, количество мест где можно ошибиться в 30 раз, ты просто первую версию будешь писать в разы дольше, а потом год будешь исправлять ошибки и баги, так как ты не робот, а новый коллега приходящий в твой проект хоть что-то полезное сможет сделать через месяц изучения уже имеющегося кода.
Классы дают тебе и некоторую модульность, так что сущность прямоугольности (как в sfml) находится в одном месте, там же отлаживается и проверяется, и возможность одновременно работать даже с достаточно тесно взаимосвязанными объектами без накладных расходов по времени разработки (и часто без накладных расходов по производительности). В случае квадратности или любого другого тривиального примера ты можешь и копипастить код, да, но в любой сложной задаче это заметно увеличивает время разработки и количество потенциальных ошибок.

Ты хочешь ответ в чём качественная разница если можно код без классов писать? Ну, её какбы и нет. Ты можешь любой код без классов писать. Но и говорить что нет разницы между 1 и 100 неверно.
Классы настолько существенно могут улучшить надёжность, читаемость, понятность, портируемость (при переносе на новую версию или другую платформу с другой либой) и кучу других характеристик, что разница примерно на уровне "это программа средней сложности для одного программиста" и "это невозможно написать с достаточным качеством без команды опытных программистов и года разработки и тестирования". Человеческий фактор настолько влияет, что из-за громоздкости кода программа с классами может быть даже производительнее.

Можно ещё без циклов кстати писать любой код, используя только рекурсивные функции. Можно вместо переменных использовать один массив на 12312312 элементов, и всё размещать в нём.
9140861955df76d5-2245-41c1-8031-07a4da3f313f.jpg54 Кб, 976x850
sage 37 2528562
>>28543

> чтобы сделать калькулятор как пикрелейтед тебе нужно: 30 минут на питоне.


мимовкатун второй час не могущий осилить глава 10 "Введение в инструкции языка Python"
38 2528601
>>27693
Нет. Если я вкатываюсь в бэкенд на пайтон, то я учу джангу/дрф, если в джаву, то учу спринг.

Зачем искать вакансии вне джанго-стека?
39 2528605
>>28562
ну тебе год потребовался, чтобы научиться ходить. но не значит что газануть за пивасиком для олдов треда сейчас займёт у тебя больше 5 минут
40 2528607
хз полчаса будут только енв разворачивать и импорты прописывать
джун
41 2528610
Да я примерно же, пытаясь пояснить что это не фигня.
Могу попробовать засечь и со стримом сделать интереса ради вариант на питоне и голом си, думаю близкие числа получатся.
42 2528660
>>28493
бляядь, да сколько можно одно и то же пережевывать?

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

ООП - ради денег кабанчика, а не ради тебя.

Исходи из этой предпосылки и все в ООП станет на свои места.
43 2528667
>>28493
в принципе понятно чего ты ждешь:
хочешь чтобы тебе кратеньно выразили СУТЬ как будто внутри этих концепций какая-то великая математическая штука все объясняющая.

Но ее нет!

В математике и физике такое встречается, но мы имеем дело с кое-как сложившимися на практике, созданными разными людьми и не очень-то давно, штуками. Здесь не как в школе.

Но ты можешь пока для понимания использовать концепцию "ООП - это ради чужих денег".
44 2528741
Теперь каждый тред будет содержать в себе споры с людьми, которым классы "ненужны", я правильно понимаю?
45 2528744
>>28741
Нет, только с одним шизиком, который срёт из треда в тред.
46 2528808
>>28542
>>28543

Ну в общем-то мое понимание СУТИ после ваших ответов значительно возросло. Кроме того, я не мог оставить без внимания такую километровую стену текста - спасибо за неё, анон. Всё, больше я не буду эту тему поднимать.
DZvMDiZZPk.jpg847 Кб, 1500x1830
47 2528891
Я пишу вот так вот:

from selenium import webdriver
browser = webdriver.Chrome()


с пустым значением вот здесь Chrome() не указывая в скобках путь к вебдрайверу и всё вроде работает.
Ну и нафиг этот путь нужен, если и без него пашет? Или так в новых версиях, а в старых не работало?
48 2528892
Ребята, появился следующий вопрос:
есть python модуль расчета некоторых параметров (токи короткого замыкания) по введенным исходным данным. Ввод/вывод ведется через консоль. Есть идеи прикрутить к этому всему графический интерфейс для повышения удобства. Вопрос: какую GUI библиотеку лучше использовать?
Код: https://github.com/aspirmk/mrtkz
мой уровень знания питона: 0
49 2528899
>>28891
Если он рядом со скриптом или по path, то можно без него, если где-то в жопе, то надо указывать, очевидно же.
50 2528901
>>28892
pyguizero

а зачем ты в каждом репозитарии пишешь "модуль расчета хуитки" ? Никто эти модули импортировать никогда в свои программы не будет
51 2528903
>>28901
Разработчик: Сычев В.С.
user input.png8 Кб, 300x300
52 2528992
Петян, есть несколько опций, из которых пользователь должен в консоли выбрать одну или несколько. Подскажи какой TUI либой обмазаться, чтоб за часик реализовать такой функционал.
53 2528997
>>28388
ну и чем ты будешь забивать очень маленькие гвозди, умник?
ООП.mp41,2 Мб, mp4,
640x360, 0:30
54 2529030
download.png6 Кб, 242x208
55 2529032
>>28997
Твоим хуем.
56 2529067
>>29032
с чего ты взял, что у меня есть лишний хуй для тебя?
57 2529104
>>28992
сам спросил, сам нашёл:
https://github.com/sebageek/clintermission

всем спасибо.
image.png278 Кб, 555x417
58 2529291
https://youtu.be/4D5RN2yKlG4

Блять, вот был бы такой же урок, но на нормальном английском, просто невыносимо слушать этот индийский бубнеж
59 2529298
Здравствуйте, у меня проблема. Не могу изменить размер текста. Как это исправить(библиотека pillow)?
@dp.message_handler(content_types = types.ContentType.TEXT)
async def send_welcome(message: types.Message):
img = Image.open("C:/Users/MY MSI/Desktop/gaduka/nazi_nigger.jpg")
draw = ImageDraw.Draw(img)
draw.text((450, 450), str(message.text), (255, 255, 255))
img.save('nazi_nigger1.jpg')
photo = open('C:/Users/MY MSI/Desktop/gaduka/nazi_nigger1.jpg', 'rb')
await bot.send_photo(message.chat.id, photo)
60 2529307
>>29298
Ты прикалываешься, да?
Ты мог бы три слова написать в поисковик (или в документацию Pillow, даже просто мышку на функцию навести), и найти решение.
https://stackoverflow.com/questions/2726171/how-to-change-font-size-using-the-python-imagedraw-library
61 2529308
>>29307
я новичок(
62 2529310
>>29298

>img.save('nazi_nigger1.jpg')



дац ма бой
63 2529311
>>29307
>>29310
Я поменял код но мне выдает ошибку positional argument follows keyword argument.
@dp.message_handler(content_types = types.ContentType.TEXT)
async def send_welcome(message: types.Message):
font = ImageFont.truetype('arial.ttf',15)
img = Image.open("C:/Users/MY MSI/Desktop/gaduka/nazi_nigger.jpg")
draw = ImageDraw.Draw(img)
draw.text((450, 750), str(message.text),font = font, (255, 255, 255))
img.save('nazi_nigger1.jpg')
photo = open('C:/Users/MY MSI/Desktop/gaduka/nazi_nigger1.jpg', 'rb')
await bot.send_photo(message.chat.id, photo)
64 2529324
>>29311

>draw.text((450, 750), str(message.text),font = font, (255, 255, 255))


Ты не можешь сначала указать параметр со знаком равенства, а потом указать без равенства. Именованные параметры неупорядочнены, оно не понимает какой параметр равен твоим (255, 255, 255). И это тоже должно гуглиться в первом ответе, если скопируешь туда ошибку.
65 2529350
>>27640
Тут банят за это?
Можешь, пожалуйста, тогда добавить меня? industrial#0468
66 2529382
>>28493
Один из отцов основателей ООП, создатель языка Smalltalk, Alan Kay писал, что в ООП главное не объекты, а сообщения.

Ты спрашиваешь "нахуя классы, когда есть функции", это как "нахуя книги, когда есть слова". Конечно, есть сообщения, которые можно передать одним словом на заборе, но более сложные сообщения-идеи передаются книгой состоящей из слов. Так и в программировании есть задачи, решаемые отдельной функцией. Но более сложные задачи состоят из множества функций, организованных в класс.
67 2529461
Привет, анон
Дрочу сейчас сортировку списков, а именно selection. Пытаюсь изобрести велосипед и написать его вручную.
https://pastebin.com/dqr0B1sx
Почему он сортирует только первые несколько значений? Я уже блять и готовый код этой сортировки нагуглил. Но мне принципиально интересно почему мой вариант не работает.
68 2529485
>>29461
Посмотри пошаговый ход выполнения своего кода в Thonny, в Пайчарме вроде такое было. Или тут

https://pythontutor.com/visualize.html#mode=edit
69 2529487
>>29382
Я мимо шел, но ты подменяешь понятия. Организация нескольких функций в единое нечто не эквивалентно классу в ООП смысле, это скорее обычный модуль. Класс от модуля отличается тем, что модуль - всегда синглтон, а класс, как правило, нужно инстанциировать
70 2529563
>>29461
в списке есть повторяющиеся числа
a.index(minim) возвращает индекс первого minim
а тебе надо того который сидит на i+j+1
71 2529616
>>29485
Проверял пошагово. В конце кода числа просто не меняются местами
72 2529617
>>29563
Хм.. не думал в эту сторону. Спасибо, буду пробовать переделывать
ясмог.png511 Кб, 458x612
73 2529627
74 2529642
>>28562
А предыдущие 9 глав это что??
75 2529852
>>29642
Введение и типы наверное.
76 2529921
>>29627
Молодец котенька!
77 2529970
python педрильское дерьмо, ни на что не годное, к тому же- платформо-зависимое.
Нормальных либ нет, только прокидывания к C,C++ либам, в основном- старым как говно мамонта, естественно, с кучей дыр и уязвимостей. Только конченные кретины юзают ёбаный петухон в проде.
Годится только как школьный язык для обучения, да и то, в спецшколе для даунов.
78 2530064
>>29970
Ясно.
79 2530148
>>28892
для такого лучше всего tkinter использовать
80 2530168
>>28903
Разработчик: Ерохин Чедислав

5к звёзд, во всех awesome-raschyoti листах, на первых позициях подборок на гитхабе, все импортируют его модули даже когда они не нужны в проекте, из гугла и амазона звонят благодарят за отличный модуль
81 2530172
>>29642

>А предыдущие 9 глав это что??



0. ПРЕДИСЛОВИЕ ОТ АВТОРА
1. КРАТКАЯ ИСТОРИЯ ЧЕЛОВЕЧЕСТВА
2. ЧТО ТАКОЕ КОМПЬЮТЕР
3. ЧТО ТАКОЕ ПРОГРАММИРОВАНИЕ
4. ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ
5. ЯЗЫКИ ПРОГРАММИРОВАНИЯ: КАКИЕ ОНИ БЫВАЮТ
6. ТИПИЗАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
7. ДИНАМИЧЕСКИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
8. ИСТОРИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON
9. УСТАНОВКА ИНТЕРПРЕТАТОРА PYTHON В ОС WINDOWS VISTA
sage 82 2530202
>>29642

>На слуху чаще всего Лутц, но там очень много воды



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

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

>>28605
да что там пиво, я бы отсосал олдфагам треда, если бы от этого непотребства хоть как-то процесс ускорился. но увы.. поэтому пролетел ты с пивком.
83 2530203
>>30202
Лутц устаревший. Уперся дид и не хочет апдейт выпускать.
Может не смог уже в асинк, лол.
sage 84 2530204
>>30203
ну основы-то не изменились, наверное. а мне пока фундамент надо заливать качественный. нюансы потом можно добить отдельно, если нужны будут.
85 2530418
>>27453 (OP)
Всем привет, нужна помощь по джанге, если вам не сложно.

Пытаюсь сделать fail2ban в LoginUser
Переопределил методы form_valid и form_invalid для подсчета правильных / неправильных попыток, заполнения статистики и блокировки конкретного ip-адреса (это все через запись в БД)

Осталось только запретить втечение определенного времени пользователю логиниться на сайт (ну, редиректить его со страницы логина на страницу блокировки)
Получилось сделать это через переопределение метода dispatch, оно работает, однако он ругается на то, что этот метод возвращает
return super(LoginUser, self).dispatch(request, args, *kwargs)
это его не устраивает
Находил в документации вариант, там тоже не получалось, ошибка.
Как быть, что делать?

Можно ли заблокировать использование логина без переопределения dispatch?
Пробовал через переопределение initial. в лог пишет, однако редиректа не происходит.
86 2530423
>>30172
Госпаде, и ведь кто-то же такое читает...
87 2530434
>>28344
Нихуя ты f завернул в f, затейник.
88 2530443
>>30418
Почитал документацию, добавил

if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, args, *kwargs)

Заработало.

Но все же: является ли переопределение метода dispatch лучшим вариантом перенаправления, если айпишник превысил количество неправильных вводов? Есть какие-то "бестпрактис"?
89 2530449
>>29970
Питон лучший
90 2530456
>>30449
нет, питон даже не язык, а интерпретатор строк.
Без либ- он ничего не может.
А либы к питону пишут на Си.
91 2530465
>>30456
А Си типа в вакууме висит или как?
92 2530476
>>30465
Си- полноценный язык, к нему в каждой ОС есть abi, который позволяет писать программы настоящие, то есть бинарники под системы. 99% полезных программ написаны на Си.
Даже без всяких либ, из Си можно дергать системные api.
93 2530485
>>30476
Так что ты в треде забыл, байтоёб? Написал уже свой велосипед компилятор? Нет? Ну тогда бегом писать. Думаешь всем не похуй, что питухон обёртка над СИ? Если мне надо будет какую-то числодробилку добавить, я возьму с so напишу библу на C/C++ и вызову из питона, либо сделаю на pypy. Но лучше после питона пойду гошечку попинаю, а после неё раст, а твоя учесть за границы массива не вылезать.
94 2530517
>>30476
Веб, нейронки, визуализацию данных для ученых тоже на Си предлагаешь писать?

Тебе сколько лет, малыш? Тебя не учили в детстве, что разные инструменты - для разных целей?
95 2530865
>>30517
Возможно этот чел не знает си. Обычно сикрикуны ничего на нем не написали, а просто вычитали что на нем можно делоть низкоуровневые брутальные вещи и что си это как скальпель хирурга для тонких и элегантных решений. Обычный сикрикун
96 2530881
>>30865
Типичная пидораха. На словах знает всё лучше всех, но на деле взял отпуск и уволился 2 недели назад.
97 2531115
Почему вы не напишите простенький скрипт на TensorFlow и не начнете рубить бабло пассивным доходом? Да, 40 рублей за 1000 капч не так много, но если таких сервисов до жопы, бот может разгадывать хоть миллион капчей в сутки.
98 2531221
>>31115
Там есть штрафы за снижение точности распознавания? Антифрод на сайте, не позволяющий так просто подключить бота? Покажи реальные примеры капчей, которые дают разгадывать. Может они намного сложнее, чем показывают в примерах.
99 2531259
>>31115
>>31221
Как я помню про такие сервисы, "работнику" может прилететь любая капча любой сложности хоть цифры их хуев, хоть мегасложная капча с форчонга.
Так что надо натаскать нейронку на все возможные капчи а иначе она будет проебывать постоянно. Натаскать на все капчи в сети - задачка трудная.
100 2531270
>>31259
Что если спереди фильтром поставить еще одну нейронку, которая кластеризирует типы капчей, а потом отправляет ее той нейронке, которая с таким типом хорошо справляется?
101 2531307
>>31270
Ну для этого, для начала, нужны нейронки кторые все капчи умеют разгадывать т.е. как минимум тренированы на них и тестировались.

Короче владельцы этого сайта могут реализовать такой подход, и для них это бы имело смысл, все популярные капчи отправлять к нн, а новые или спорные варианты капчи отсылать макакам, но Васяну с двача это сделать - собрать все возможные варианты капч, потом нейронки подготовить. Слишком сложно.
102 2531489
А с протонмейла реально отправить\получить письмо? Ругается что не может приконнектится как я понял:

Traceback (most recent call last):
File "/home/ali/Temp/mal.py", line 12, in <module>
server = smtplib.SMTP('smtp.proton.me:1025')
File "/usr/lib/python3.10/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.10/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.10/smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.10/socket.py", line 824, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.10/socket.py", line 955, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known


import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
fromaddr = "x.^,xxANUSprotow%onPUNCTUMm4mie"
toaddr = "xzNwxx1ANUSprotokKQnPUNCTUMmw~:e"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Test Subject"
body = "Write your message here"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.proton.me:1025')
server.starttls()
server.login(fromaddr, "пароль")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
102 2531489
А с протонмейла реально отправить\получить письмо? Ругается что не может приконнектится как я понял:

Traceback (most recent call last):
File "/home/ali/Temp/mal.py", line 12, in <module>
server = smtplib.SMTP('smtp.proton.me:1025')
File "/usr/lib/python3.10/smtplib.py", line 255, in __init__
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.10/smtplib.py", line 341, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "/usr/lib/python3.10/smtplib.py", line 312, in _get_socket
return socket.create_connection((host, port), timeout,
File "/usr/lib/python3.10/socket.py", line 824, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.10/socket.py", line 955, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known


import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
fromaddr = "x.^,xxANUSprotow%onPUNCTUMm4mie"
toaddr = "xzNwxx1ANUSprotokKQnPUNCTUMmw~:e"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Test Subject"
body = "Write your message here"
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.proton.me:1025')
server.starttls()
server.login(fromaddr, "пароль")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
103 2531538
>>28493

>Я с самого начала пытался понять есть ли в "инструменте класс" какие-то фактические отличия от "инструмента функция"


Ты на самом деле задал очень правильный вопрос, анон.

>но почему-то УЧИТЕЛЯ не могут прямо ответить на этот вопрос


Ну, это база, кто не умеет делать - тот учит на двачах.

В java-подобном ООП объект - это скоуп (структура данных, представляющая self) с навешанными на него методами. Инстанцироваться объекты могут на основе классов (пхп, джава, питон, руби) или из прототипов (жабаскрипт) или быть инстанцированными сразу при инициализации рантайма (классы в руби - это объекты-синглтоны).

Тут писали, что объекты - это способ структуризации кода. Это и да и нет. Как мы знаем, monkey.eat(banana) может быть заменено на eat(&mut monkey, banana) без потери смысла. Аноны утверждают якобы, что ООП нужно чтобы защитить дурачков от ошибки вида eat(&mut dog, banana). В нормальных языках можно добавить в структуру monkey мета-поле и чекать его компилятором до вызова функции eat. Поэтому нет, ООП не служит структуризации кода. Для чего же оно на самом деле нужно?

Ответ лежит здесь https://blog.cleancoder.com/uncle-bob/2018/04/13/FPvsOO.html . Если кратко, ООП - оно про полиморфизм через подмену исполнителя. Ну например у тебя есть абстрактный класс Animal с абстрактным методом eat, от Animal унаследованы Dog и Worm, у каждого из них своя реализация eat. Где-то в коде у тебя происходит myanimal.eat(meat). Но перед этим кодом ты можешь задать myanimal = Dog.new() или myanimal = Worm.new(), и myanimal.eat(meat) будет по-разному действовать.

Это и есть вся суть ООП - полиморфизм через подмену исполнителя.
104 2531549
Стоит записываться на skillfactory или подобные какие-то курсы? База у меня уже есть, не знаю просто, что учить дальше. Бабки не жалко, если что.
105 2531555
>>29382

>Alan Kay писал, что в ООП главное не объекты, а сообщения


Это ООП по Алану Кею, исходное, расово верное и правильное. Три кита ООП - это инкапсуляция + отправка сообщений + динамическая диспетчеризация получателем. Последнее означает, что получатель и только получатель решает что делать с сообщением - что отвечать, отвечать ли вообще, и при этом может сменить логику обработки в любой момент как ему будет угодно, то есть это не должно быть детерменировано на этапе компиляции. С этой точки зрения Erlang того же Алана Кея - тру-ООП-язык, общего между ними то, что они не столько языки, сколько среды выполнения по принципу actor-model.

А потом в индустрию пришли джавапидоры и стали называть объектно-ориентированным-программированием кадавра на принципах инкапсуляция + наследование + полиморфизм через подмену исполнителя. А повторяющие это ньюфаги не могут догнать, что наследование противоречит инкапсуляции, и потому должно быть выкинуто нахуй, а полиморфизм бывает ещё и других видов, ну и короче джава-ООП лучше выкинуть на свалку истории и забыть нахуй.
106 2531558
>>31549

>что учить дальше


Делай что-нибудь по гайдам с ютуба на джанге или другом фреймворке, хоть на голом пистоне. Твоя цель - научиться делать что-то по плану из головы.
107 2531561
>>31555

>лучше выкинуть


Как хорошо что петухов с двача, вместе с Аланом Кеем спросить забыли, что лучше и кого выкидывать. А вещи эволюционируют своим путем и естественным образом принимают более удобную для всех форму.
108 2531572
>>31558
Я джанго основы выучил (на уровне сделать несколько страничек с ссылками друг на друга). А вот как углубиться не знаю, как практиковаться, не могу себе сам задачу придумать, поэтому думаю курс какой-нибудь попробовать, пусть за меня цели ставят.
109 2531581
>>31561
Мань, ты чего так надорвался? На собесе по губам поводили?
110 2531583
>>31572
Имиджборду напиши
111 2531609
>>31489

>socket.gaierror: [Errno -2] Name or service not known


>host smtp.proton.me


>Host smtp.proton.me not found: 3(NXDOMAIN)


мы, блядь, должны за тебя переводить с английского что ли?
112 2531621
>>31489

>Name or service not known


у тебя днс резолвер не может зарезолвить smtp.proton.me
png-clipart-emoji-sticker-thought-computer-icons-emoji-smiley-sticker.png18 Кб, 225x218
113 2531875
лол, пайдата в ереване проходит
https://www.youtube.com/watch?v=IRr3gx71rnk
Кто ж знал в начале года, что Армения теперь один из центров IT
114 2532115
>>31538

>Как мы знаем, monkey.eat(banana) может быть заменено на eat(&mut monkey, banana) без потери смысла.


Смысл не теряется, но наступает конфликт имён, например
monkey.eat(banana)
insect.eat(banana)

То есть ты не можешь использовать простые названия для функций, иначе будут конфликты. Из-за этого приходится делать замысловатые названия, как это в си принято
115 2532163
>>31875
это временно.
116 2532338
>>32115

>наступает конфликт имён


Раскидай по неймспейсам.
Или назови по-разному. Никто не заставляет тебя называть их одинаково. Ты же не называешь все функции в коде foo чтобы потом ебаться с этой проблемой. В ООП методы родственных объектов называются одинаково для задач полиморфизма. Но вне ООП этого требования нет, там полиморфизм делается по-другому.
117 2532361
>>30865

>можно делоть


всё можно делать, а питухон не нужен вообще, это дерьмо для дибилов которым сложна писать программы больше 1к строк. Ничего годного на питухоне нет и не было, только лишь скриптовая обвязка для других либ на других языках, и питон даже не скриптовый язык, а интерпретатор строк, глубоко ущербный с самого начала, там даже типизации нет нормальной.
118 2532365
>>31555
хотя и трипл, ну и зелень просто. Самая годная реализация сообщений между объектами это интерфейсы в Java, недооцененная и мощная парадигма, сколько ни читал статей смузипидаров, про это вообще не очень любят бухтеть, больше гавно какое то обсуждают типа mvc с внедрением зависимостей.
Раньше говорили всё есть обьект, а нужно- всё есть интерфейс. Интерфейс между обьектами. Круче этого ничего невозможно придумать, на интерфейсах можно сколько угодно сложную систему построить, нужно лишь спеки правильно писать по интерфейсам, а остальная архитектура- становится прозрачной.
ебать.png193 Кб, 413x390
119 2532420
>>32361
причина бабаха?
120 2532524
>>32365

>Самая годная реализация сообщений между объектами это интерфейсы в Java


кинь пример, заценим
121 2532931
>>32848 (Del)
Саблайм лох
122 2533027
Пытаюсь сделать DFS в питоне, проблема в том что у меня слишком много vertices в графе от того если использовать классическую рекурсивную реализацию DFS, функция крашится с RecursionError: maximum recursion depth exceeded. Пробовал изменить лимит рекурсии, тогда уже сам питон крашится. Можно ли как-то это пофиксить? Слышал есть какой-то вариант через объект итератор и стаки это сделать?
123 2533045
>>33027
Динамическое программирование.
124 2533108
>>33027
Храни вершины в стеке и делай цикл: пока стек не пуст, взял вершину, добавил в стек её соседей.
125 2533191
Сап питонач. В вебе не силён, нужен стратегический совет. Перепиливаю мелкосервис на джанге, в котором 1,5 пользователя будут вбивать/изменять данные клиентов. Как лучше избегать race condition, учитывая, что там параметров у каждого клиента дохуища? В документации рекомендуется пердолить F(), но учитывая наличие 1,5 юзера не легче сделать возможной только 1 активную сессию записи в БД?
126 2533303
>>33191
самое базовое: при отправке данных отправлять также и дату последнего изменения объекта, если дата изменения объекта и дата изменения в отправленных данных не совпадают - бросай ошибку. на фронте можешь реализовать любую логику от простой ошибки, до получения актуальной копии, патча изменениями и т.д. главное помни - явное лучше неявного
127 2533390
>>33191
select for update
128 2533441
>>33027
stack = [root]
while stack:
node = stack.pop()
print(node)
stack.extend(reversed(node.children))
sage 129 2533603
>>33390

> select_for_update


> Returns a queryset that will lock rows until the end of the transaction


и как это помогает?
130 2533656
>>33303
Спасибо. Так и сделаю.
131 2533726
>>33191
Тебе тут в целом неплохой вриант советуют. Но правильней всего отслеживать не по дате, а по хешу. Т.е. каждую запись (строку?) ты хешируешь hash() и полученное значение передаешь в html форму как hidden поле.

Когда пользователь изменяет запись и сабмитит форму, то вместе с его изменениями сабмититься хеш старой записи. На сервере при обработке запроса ты сравниваешь хеш сабмитнутый с хешем записи в БД. Если совпали - можно апдейтить данные. Если отличаются, нужно показать пользователю ошибку "данные были изменены до вас".
sage 132 2533736
>>33726
тогда уж просто рандомный uuid4 хранить и обновлять его при записи. точность tz.now до микросекунд, так что шанс выстрела гонки емеется только в теории
133 2533759
>>33736
Нет ничего лучше хеша данных. И вот почему. Допустим Алиса открыла запись чтобы редактировать, но пошла посрать. За это время пользователь Боб тоже быстренько откроет данную запись у себя, изменит и сохранит. Потом передумает и изменит назад на предыдущие данные. А затем из сортира придет Алиса и может продолжить

Пока ТП срала, запись изменилась 2 раза, но данные у неё остаются актуальными, совпадающими с БД. Сравнение по хешу это учтёт, она сохранит свою правку без ошибки. А в случае с uuid или отслеживанием времени, Алиса получит ошибку и справедливо возмутиться: "какого хуя? Нихуя не изменилось, красноглазики тупые нахуевертили."
134 2533870
135 2534048
>>33603
Не совсем правильно понял проблему, перечитал еше раз, зачем вам нужна метка времени или хеш? Можно просто поле version завести
136 2534051
>>33759
Тут уже надо контрольную сумму полей считать
137 2534510
Суп, земноводные. Как в питоне реализовать подобную хуйню? Понимаю, что задача простейшая, но я в программировании практически полный ноль (30 лет назад пытался программировать на бейсике для спектрума лол)

>>>a.foo(10)


10

>>>b.foo(15)


15

>>>a.foo(4)


14

>>>b.foo(3)


18

>>>a.foo(1, reset=True)


1
139 2534517
>>34510
class C:
__num=0

__def foo(self, n, reset=False):
____if reset:
______num=n
____else:
______num+=n

____return num

a = C()
b = C()
140 2534520
>>34517
То же самое, что и у анона выше, но раз уж начал печатать.
sage 141 2534526
>>33191
решений тебе накидали. хочу лишь упомянуть 2 принципа, которые почтивсегда нужно держать в голове: YAGNI и KISS

удачи в борьбе со сложностью анон!
image.png56 Кб, 1081x430
142 2534587
Вторая функция будет работать быстрее или то же самое?
Screenshot20221208-011727.png271 Кб, 1440x2880
143 2534628
>>34587
немного быстрее

> %timeit a(10000000)


3.7 µs ± 48.5 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)

> %timeit b(10000000)


3.2 µs ± 70.9 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
144 2534638
>>34628
Спасибо!
image.png86 Кб, 1552x487
145 2534676
Пикрыл работает только если элемент множества 1 в 1 совпадает с элементом другого множества, а мне надо если substring, т.е. оператор "in" а не "==". Короче надо чтоб пикрыл выдал 2, а не 0.
Есть варианты, кроме итерирования по каждому отдельному слову?
146 2534677
>>34676

>чтоб пикрыл выдал 2, а не 0


Точнее 1, а не 2.
147 2534680
>>34676

>Есть варианты, кроме итерирования по каждому отдельному слову?


Только ещё более сложные.
148 2534684
>>34676
.issubset
или
<=
149 2534686
>>34684
Не, это мне никак не поможет.
>>34680
Понял, спасибо.
15861909375820.jpg197 Кб, 1280x1021
опрос 150 2534689
для чего ВЫ используете async и await?
151 2534744
>>27453 (OP)
Анон, коплю деньги чтобы войтивайти купив онлайн-курсы по питону, а как мне вообще понять нормальные это курсы или нет? Заметил что сейчас везде рекламы курсов тестеров, С++, питона, но чуется мне что это хуита и развод на деньги.
Так вот, как определить что курс покупаешь нормальный?
152 2534745
>>34744
Я хуею, как инфоцыганье всё же успешно косит бабло.
Каждый второй долбоёб покупает какое-то говно. Всё есть в открытом доступе, есть спижженное платное, ничем не лучше бесплатного, но нет, надо копить блять и нести им.
Или ты думаешь, что если въебешь деньги ни за что, то будет мотивация дополнительная? Нет, не будет.
153 2534750
>>34745
мне кажется это тролль
154 2534753
>>34750
Просто пошли совсем нулёвые из лесу, раньше вкатуны хоть что-то соображали изначально, а теперь вот куча рекламы и вот он здесь.
155 2534761
>>34745
Ну то есть по сути ответа на мой вопрос здесь не будет, будет кукареку от местной ебанашки с переизбытком времени. Понял.
156 2534765
>>34761
Да, уебывай копить дальше, где только время берешь на вопросы.
157 2534766
>>34765
Там же где и ты визжать и хлопать крыльями в рабочее время, лел.
158 2534770
>>34745

>то будет мотивация дополнительная?


Неиронично да. Помню абонемент в зал подарили и меня бы жаба задушила, если б я все 15 раз не отходил.
159 2534773
>>34766
Ну посмотришь сам, хули спорить с тобой.
>>34770
Обычно всякие абонементы и прочие велотренажеры купленные с такой целью так и валяются. Наверное, у тебя повышенная жадность, лол.
image.png95 Кб, 850x560
160 2534783
я спарсил ветку комментов и теперь хочу ими управлять в интерактивном окне, в котором они были бы изображены в виде дерева. чтоб можно было взять и например удалить какую-нибудь ветку диалога.
что посоветуете? какой GUI Framework выбрать?
161 2534821
Почему все погромисты говорят, что в питоне уебищное ООП?
Пытаюсь сейчас разобраться с ООП на примере питона - это хорошая идея или лучше сначала изучить его в языке, где оно реализовано нормально (джава например)?

>>28535
То есть мы для каждого такого класса описываем подробную инструкцию, как его резать, а потом просто даем команду снаружи всей этой классовой структуры РЕЗАТЬ Х и он будет резать в зависимости от того к какому классу относится Х? Я правильно понял идею?
162 2534855
У меня глупый вопрос. Кароч хочу запилить бота для себя чтобы чекать инфу через апи и прочее. Кароч, но чет подгоняюсь. Вот я создал бота, он будет паблик или майселф бот онли? Потому что инфа конфидициальная может быт типо проверки счетов и тд. Можно бота как т вынести из паблика, у него же адрес есть будет, нет?
163 2534892
>>34821

>говорят, что в питоне уебищное ООП


ООП в принципе уёбищное
Аноним 164 2534932
Посоветуйте норм книги по алгоритмизации , в списке чет найти не могу
165 2534941
>>34783

>что посоветуете? какой GUI Framework выбрать?


tkinker

>>34855
Проверяй в боте, что это именно ты пишешь. По id, емейлу или что там есть, где ты собрался этого бота крутить.
sage 166 2535024
>>27453 (OP)
Не стал изучать этот язык чтсто потому что у них хохлятский флаг в логотипе.

Сажа, скрыл.
167 2535034
Как сделать словарь который бы как ключи принимал лист или сет? Ну то есть я понимаю что словарь не сделаешь скорее всего, но как такой объект хранить вообще чтобы был легкий индексинг ключей а не через for-loop?
168 2535038
>>34932
На амазоне вроде эти две самые популярные :
[Elements of Programming Interviews] Adnan Aziz, Tsung-Hsien Lee, Amit Prakash - Elements of Programming Interviews in Python_ The Insiders’ Guide

Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser - Data Structures and Algorithms in Python-Wiley (2013)
169 2535041
>>35034

>лист


никак

>или сет


frozenset

>но как такой объект хранить вообще чтобы был легкий индексинг ключей а не через for-loop?


че
конец опроса 170 2535050
>>34689
я так и думал
171 2535080
>>35041
вот такой объект
dct={{1,6}:3,{7,8}:2}

dct[{1,6}] должен давать аутпут 3
172 2535087
>>35041
Короче спасибо фрозен сет то что нужно
173 2535098
>>34892
Есть такое, но без него сейчас не обойтись же...
image.png7 Кб, 396x138
174 2535101
>>35080
Фрозен сет, да. Можно тьюплом ещё, если тебя краткость интересует.
175 2535121
Джава или питон? Вот только давайте без этих ваших кок пок от задач зависит это быстрее то медленнее. Мне, например, для души надо, приложуху какую нибудь набыдлокодить, сайтик, вот это всё

Интересует многозадачность и ваше субъективное мнение.
не вкатывальщик
176 2535122
>>35121

>приложуху какую нибудь набыдлокодить, сайтик, вот это всё


Очевидный js.
177 2535136
>>35122
Не хочу жс

>Джава или питон

178 2535138
>>35136
Тогда питон. Там шаблонизатор для сайтов лучше.
179 2535311
>>35138
Окей, а как питон чувствует себя в простых десктопных приложениях?
180 2535312
>>35311
Как минимум лучше чем джава
181 2535314
>>35312
Типа, давно такая мулька ходит, мол, питон это язык для набросочек, а потом уже перепиливают под нормальный язык.

То есть можно дрочить питон и наслаждаться жизнью?
182 2535316
>>35312
АТО мне кажется, что ява поглубже и побазированней. Хочется простой базы. Вот эта вот вся типизация, многопоточность етц.
Года 4 назад уже читал книги по питону, и на каком то моменте начал ощущать свою не полноценность (пошел в интернет литать холивары)
183 2535317
>>35316

>литать


листать*
184 2535318
>>35314
А зачем тебе перепиливать что-то под джаву?
185 2535320
>>35318
Типа, она быстрей и легаси хуегаси. Яж не разбираюсь - в погромировании остановился на пол пути к осилению джанги и всё.
186 2535321
>>35316
Хочешь базы и хардкора - учи С++
Джава для твоих задач нахуй не нужна.
187 2535322
>>35320
Для твоих целей это всё равно что микроскопом гвозди забивать.
188 2535323
>>35321
Но ява легче плюсов и базированней питона (чуть ближе к байтоёбам).
189 2535325
>>35322
Я щупал плюсы и яву уже чуть чуть. Плюсы для моих задач действительно не нужны, а вот ява как то получше выглядит, полегче, и опять же база какая никакая.

Просто боюсь, если я потрачу нное время на освоение пистрона, то все равно придется придрачивать к нему какой нибудь жс, базы хуязы, теория алгоритмы байтоёбство.
Не лучше ли сразу с явы начать? Или питон сможет удовлетворить мои маняхотелки?
190 2535326
>>35325
Хочешь жаву, бери жаву, зачем ты споришь-то? Мы ж тебя не заставляем.
191 2535332
>>35326
Я пока еще не спорил - просто высираю сомнения на основе своих наблюдений. Оче сложно определиться, особенно когда на все твои вопросы отвечают одним предложением про задачи и микроскоп

>Интересует многозадачность и ваше субъективное мнение

192 2535335
>>35325

>все равно придется придрачивать к нему какой нибудь жс


К любому языку придётся, потому что это единственный язык браузеров, тебе же сразу сказали.
193 2535341
>>35335
Попробую по другому.
Саму суть я понял, ООП освоил, никаких фреймворков не знаю. Хочу двигаться дальше. Пока не знаю куда хочу, типа, десктоп? Веб? Да похуй, просто хочу.
Пистрон очень легкий - я его с нуля без навыков погромирования освоил за 3 недели попутно задев немножечко джанги. Но, поначитавшись разного понял, что питон это просто максимум не база, приуныл, дропнул. Пошел читать яву - перегорел, и, теперь спустя 4 года захотелось поразмять свой стухший мозг, ну и показать всем как я могу, если получится.

Так вот теперь и не пойму, развивать свой питон, или почитать немного какой никакой базы?
194 2535350
>>35341
Питон для веба и для десктопа нахуй не нужон. Его можно использовать, но есть более подходящие инструменты.
Он подходит, если у тебя уже есть конкретные задачи и надо их решать. А учить под некую перспективную задачу это хуйня на палке.
195 2535358
>>35350
А как же джанго и среднемаленькие проекты? Не все же в сервисы с 2кк посещений в день перерастают? десктопчик тоже разный бывает.
Мне хочется отностельно простой базы. Питон сможет её дать?

Не нужно про задачи снова пояснять. Я хочу понять, где можно и про байтоёбство узнать (после питона, когда трогал скуль мне было немножечко сложно - базы баз (байтоёбство) я не знаю и не умею), и про человеческий кодинг с алгоритмами, многопоточностью, и вот это вот всё.

Хочется объять ВСЁ, и чтоб не было сложно в освоении. Много раз читая книжки по пистрону (ДЛЯ НАЧИНАЮЩИХ) видел типа, вот тут к памяти обращаемся, оно его тут подчистит само а тут мы немного помжем, не спрашивайте как это вам пока знать не нужно. В яве же, в книжках обучающих все поясняется и рассказывается сразу, но сложновато для меня.
196 2535367
>>35358

>Мне хочется отностельно простой базы.


C
197 2535368
>>35358

> А как же джанго и среднемаленькие проекты? Не все же в сервисы с 2кк посещений в день перерастают?


На нем пишутся прототипы, что быстрее. Если они выстреливают, то дальше переписываются на чистовике чем-то другом или обрастают костылями для ускорения. (то же происходит и с пхп, руби и прочей скриптотой.)
Для базовой алгоритмизации там всё есть, без анальных корчей на каждое нетривиальное действие, хотя многие эти корчи воспринимают как какой-то плюс. Типа вот я в детстве бегал по недостроям и подвалам и вырос человеком, не то что вы, разнеженные зумерки.
Базы нужны, конечно. И нужен юникс, рекомендую тебе как можно скорее лезть в юникс, зная даже его основы ты поймешь, как и почему сделано многое в той же скриптоте, включая питон.
198 2535369
>>35367
Вы, программисты реально с годами черствеете в плане резвития, Или сразу такими не гибкими в сферу вкатываетесь? Или я не достаточно четко поясняю про свои хотелки?
199 2535371
>>35369

>двач, как мне есть суп, ножом или палочками?


>ложкой


>Вы, программисты реально с годами черствеете в плане резвития, Или сразу такими не гибкими в сферу вкатываетесь? Или я не достаточно четко поясняю про свои хотелки?

200 2535379
>>35368
Короче, если выбирать из двух языков по моим хотелкам, то ява. Спасибо анон.

А в юникс я лазил, да. Больше подгонял единственный и не повторимый дебиан под себя трогая всякую фреймовую чушь чтоб как у погромистов. Да, какой то шарм в этом есть, и даже не скучно
201 2535381
>>35371
Паттерны свои с микроскопами и прочими НУ ВСЕМ ЖЕ ПОНЯТНО ОДИН ТЫ ВКЛЮЧИТЬ И ВЫКЛЮЧИТЬ НЕ МОЖЕШЬ убери, и поясни нормально.
Я не требую, просто хочется чуточки понимания и немножечко пространных размышлений от анонов о яве и питоне, субъектитвно, без оскорблений.
202 2535402
>>34821
Обычное там ООП. Как во всех скриптовых языках. Ну есть некоторое количество довольно странного легаси, например len() это встроенная глобальная функция, а не свойство объекта. Всякие слоты ещё на сишном уровне, которые работают в обход основного механизма ООП, у Армина можешь почитать. А так самое обычное скриптовое ООП из слоёных хэш-таблиц.
203 2535734
>>35402
>>34821
Там в принципе другое ООП, чем в C++/Java. Потому что языки сильно разные
204 2535741
>>35358
Питон для веба вполне себе норм

Питон в этом плане это язык бэкенда. Реально в бэкенде у тебя основную нагрузку несут сервисы вроде баз данных и очередей, а язык лишь логику. Для логики питон удобен.
205 2535842
>>34821
ААП у Пятоне рэалізована дастаткова дасканальна для вывучэньня. Усе асноўныя ўзоры праектаваньня магчыма рэалізаваць. https://refactoring.guru/design-patterns/abstract-factory/python/example
206 2535860
>>35842
Ху со рта вынь, читать сложно
207 2535862
>>35734
А ещё 2 + 2 будет 4.
208 2535885
>>34821
Учитывай что почти все книги про ООП написаны про джаву. Оно там не то чтобы нормально реализовано, скорее там ограничения языка преодолеваются плясками с ООП. Многое оттуда совершенно неактуально в питонах, банально потому что питоны гибче и проще во множестве аспектов.

Понять что такое класс и объект, узнать про базовые фичи ООП, ты сможешь и в питоне. Если хочется стать мастером дрочки паттернов ООП и базвордов, то лучше жава.
209 2535888
>>35885
И то же самое в с++ (как в питоне) к слову.
В джаве у тебя всё класс, ты не можешь код вне класса написать толком, и привнесение ооп просто вообще везде часто превносит проблем больше, чем пользы, по сравнению с кодом, где ооп - просто синтаксический сахар для структур, без кучи последовательных наследований и кучи тормозных виртуальных методов.
210 2536084
>>35842
фууу. прекращай свиноязык использовать. либо дуй в /ukr с этим.
211 2536125
>>36084
имхо это белорусскый. Так что давай, отвечай. Во имя славянской дружбы.
212 2536133
>>35888
В питоне тоже всё объект, как в жаве. И тоже всё делается тормозными наслоениями. Питон экономит время разработки, а не время выполнения.
213 2536163
АААААААААААА Я час сука искал баг, всматривался в каждую строчку, не понимая, где проебался, а оказывается эта тварь какого-то хуя меняет значение переменной, КОТОРУЯ Я ВООБЩЕ НЕ ТРОГАЮ БЛЯТЬ. Я записываю b, а эта сука меняет a. Я СПЕЦИАЛЬНО СДЕЛАЛ КОПИЮ a, ЧТОБЫ ОРИГИНАЛЬНАЯ ПЕРЕМЕННАЯ ОСТАЛАСЬ НЕИЗМЕННА, ПИДОРАСИНА. Что за ебаный пиздец? Какой сын шлюзи это придумал? И это говно именно со словарями, с другим типом данных такой хуйни не происходит, меняется только копия.
214 2536173
>>36163
b = a не копирует объект, а даёт ему новое имя.
Можешь считать что это vars['b'] = vars['a']
Ну или напечатать id(a), id(b), a is b чтобы увидеть что это тот же объект.
Тебе нужно b = a.copy(), и быть в курсе что есть ещё deepcopy, который клонирует и внутренности.
215 2536175
>>36163

> оказываетсо эта твагх какава-то хуя меняет знаценне пеґеменной


Мусіш прачытаць пра mutable/immutable.
216 2536176
>>36173
Почему тогда здесь принтит тру, а не фолс, почему принтит 1, а не 2? Схуя словари такие особенные?
217 2536180
>>36176
Потому что в третьей строке ты имени b присваиваешь новый объект. Объект и переменная это разные вещи. Один и тот же объект может находиться в множестве переменных. К примеру, так происходит передача аргументов в функцию.

b['a'] = ... — это вызов метода объекта b. Сам объект остаётся на месте.
218 2536183
>>36176

>Схуя словаґы такке особенные?


Таму што слоўнік - mutable, а 1 ці 2 - immutable.
219 2536184
>>36174 (Del)
Проверил. Работает .copy()
Зачем дип?
220 2536188
>>36183
Да не нужно там никакого иммутабле гуглить. Это сработает даже с мутабельными объектами.

a = []
b = a
b = []
assert a is not b
221 2536257
>>35369

>Или я не достаточно четко поясняю про свои хотелки?


Ты хочешь ВСЁ СРАЗУ
Этому годами учатся
k0p0b3gj.png320 Кб, 735x643
222 2536263
with open('text.csv') as f:
mytext = f.read().splitlines()


Почему в ВижиалСтудио это вызывает ошибку:
FileNotFoundError: [Errno 2] No such file or directory: 'text.csv'
А в АЙДЛ или напрямую запуская .py файл всё работает. В ВС работает только если указать прямой путь к файлу, вроде: 'c:/text.csv'
Что за дичь блин, можно как-то пофиксить?
223 2536286
>>36263
А был бы на линуксе, сразу бы понял.
'text.csv' — это относительный адрес. От считается от текщего "взгляда" программы. Айдл смотрит на папку, где лежит text.csv, соответственно по адресу ТЕКУЩАЯ_ПАПКА\text.csv, он её видит. Вижуал студио смотрит куда-то в другое место, например, свою собственную, и никакого C:\Program Files\Visual Studio\text.csv не видит, поэтому No such file
224 2536288
>>27453 (OP)
Джангобляди, вот скажите, что с вами не так?
Почему продолжаете использовать этот кусок кала, по недоразумению названный фреймворком?!
Сука, работал над джангопроектом, который до меня накатил такой же чушок как вы. Познакомился с еще одной ахуенной способностью джанги - оказываются опции auto_now и auto_now_add на DateTime колонках в модели действуют только внутри Джанги! То есть блять есди я инсерчу данные через plain sql, то все упадет нахуй из-за null! Потому что все это решает только на уровне самой Джанги
Але, дебилы! Application layer в помине не должен заниматься таким, это задача database layer! Ссать над окаждому на пятак кто продвигает Джангу в 2022+
225 2536311
>>36286

>А был бы на линуксе, сразу бы понял.


>'text.csv' — это относительный адрес. От считается от текщего "взгляда" программы. Айдл смотрит на папку, где лежит text.csv, соответственно по адресу ТЕКУЩАЯ_ПАПКА\text.csv, он её видит. Вижуал студио смотрит куда-то в другое место, например, свою собственную, и никакого C:\Program Files\Visual Studio\text.csv не видит, поэтому No such file


Эт ясно, а фиксить-то как это в Вижуал Студио, ну это же тупо костыль указывать полный путь к файлу, а потом если что удалять. Бред какой-то.
Должна быть в конфиге какая-то рабочая директория или что-то такое наверное.
226 2536320
>>36288
Даже в алхимии есть 2 разные опции:
default и server_default, server_default колнтролирует поведение на уровне базы. Но для джангобляди подобный концепт просто непостижим
227 2536423
>>36311
ну принтани __file__ перед тем как with open делаешь, узнаешь хоть какой там путь

паслибом можно достать из него родительскую папку и добавить тест.ксв

> pathlib.Path(__file__).parent / 'test.csv'

228 2536471
>>36423
--file-- не то, надо os.getcwd()
229 2536947
>>36288
И зачем тебе понадобилось инсертить в чистом sql? В чём проблема дописать now() в values инсерта? Почему это проблема фреймворка?

> Application layer в помине не должен заниматься таким, это задача database layer



Ты скозал? Может ещё в хранимки всё приложение перепишешь?
230 2536953
>>36471
ты как раз про рабочий каталог написал. надо __file__ использлвать. можно константу PROJECT_DIR вынести в какой-нить модуль по типу shared.settings
231 2537133
>>36947
Потому что помимо джанго-говна у меня есть вызовы:

pandas.dataframe.to_sql
и
коннекты через sqlalchemy

Если джанго-параша обязывает меня использовать строго ее при операциях с БЖ, то это параша ебаная. Давай дефолтные значения тоже через app будем задавать, а хуле нет? Будем в save методе проверять if value is None и ставить дефолт. Или ЭТА ДРУГОЕ?
16672005835090.png932 Кб, 704x1152
232 2537164
>>36163
годный подрыв, поздравляю
233 2537178
>>37133
Не обязывает конечно же, но лучше действительно через ORM это делать.
https://docs.djangoproject.com/en/4.1/ref/models/querysets/#bulk-create

Это как бугуртить почему я не могу в block device натолкать данных в обход файлсистемы.
234 2537275
>>27620
>>27453 (OP)
Мне нужно создать что-то dict, который при доступе по ключу возвращает не точно его, а похожее (если есть) с некоторым допуском.

Допустим, если я создаю словарь
d = SomeDict()
потом что-то туда помещаю
d['молоко'] = "100p"
потом пытаюсь получить значение, но с не совсем верным ключом
print(d['малако'])
То он должен мне вернуть "100p"

Я гуглил, но не нашел, есть ли в питоне такой модуль. И если нет, то как мне его написать самому.
235 2537284
>>37275
Наследуешься от словаря и добавляешь метод yobaget, можно прям __getitem__ переопределить, чтобы как у тебя, но это перебор.
Ну а там какого-то левенштейна захуярить, ну или гугли "нечеткий поиск", способов много.
236 2537301
Парни, что умеет pycharm чего не умеет vs code?
блять Аноним 237 2537324
Смотрю плейлист по алгоритмизации от МФТИ (закреп), и сука уже 3 лекцию он пиздит про ебаные системы исчесления , алгебру логики, синтаксис и т д. Где алгоритмы нахой?!?! ОП пофикси тред , убери ссылку на эт хуйню
238 2537328
>>37284
Проблема в том, что если каждый раз искомый ключ сравнивать с каждым уже имеющимся ключом, используя левенштейна, то это очень медленно. Совсем медленно.
239 2537332
>>37328
Если у тебя там не что мильйонов ключей, то без синтетических тестов и не заметишь, небось.
240 2537339
>>37332
К сожалению, заметно без тестов. У меня около 20К ключей, но я даже не могу дождаться завершения работы программы.
241 2537342
>>37339
А левенштейн на питоне или конпеляный? Думаю, где-то в модулях должен быть.
242 2537347
>>37342
Левенштейн на питоне, но там заметно, что замедление происходит от того, что каждый ключ сравнивается с искомым. По сути при таком алгоритме смысла в словаре нет, это как list получается.
Тут нужно хеш-функцию словаря патчить, чтобы хеши были триграфами какими-нибудь, например.
394C8D04-CCD6-479E-ACBD-E4632F59B1FF.jpeg216 Кб, 828x651
243 2537390
244 2537430
>>37178

>Это как бугуртить почему я не могу в block device натолкать данных в обход файлсистемы.


Но ведь можешь...
Стикер127 Кб, 500x499
тест на ньюфагов 245 2537470
словари упорядочены или нет?
246 2537488
>>37390

>print без скобок


двойко дурачек ты?
247 2537500
>>37470
С какой-то версии по факту да, объявили это фичей в следующей.
248 2537522
>>37470

>упорядочены


sorted или ordered?
249 2537531
А можно сделать какой-то общий обработчик ошибок для функции.
Например в теле много всего обращаются к сайту, запрашивают разные параметры, какой-то элемент может не загрузится и код просто вываливается с фатал эрор.
Можно не дрочиться всем трай прописывать или WebDriverWait, а просто чтоб функция вернула состояние ошибки и код продолжил работать дальше?

Как-то реально это сделать не прописывая каждой строке отдельный обработчик ошибки?
250 2537553
>>37470
Сохраняют порядок добавления. Вроде бы начиная с 3.6.
251 2537561
>>37531
Обработчик ошибки означает что ты обрабатываешь ошибку. Когда ты ошибку возвращаешь как значение, значит ты тоже собираешься её потом обработать. Какой-то вопрос без вопроса.

Если тебе надо чтобы твой говнопарсер пореже падал, то contextlib.suppress.
252 2537569
>>37561

>Если тебе надо чтобы твой говнопарсер пореже падал


Именно это.

>contextlib.suppress.


Пасиб.
253 2537608
>>37328
Словарь использует хеш, изменяешь хотя бы бит - и он совсем другой.
А тебе нужно не хеш, а "миниатюру". То есть представь что ты фотографию сжимаешь до 32х24, округляешь все значения яркостей с шагом в 0.1 (в диапазоне от 0 до 1), и уже после этого считаешь хеш.
При смени пары пикселей миниатюра будет такая же. Но если выберешь неправильно функцию получающую миниатюры, то часть ключей сольются. Но в любом случае это будет уже не полный перебор, а перебор только части ключей.

Это алгоритм не для питона, это для компилируемого языка.
254 2537644
>>37608

>При смени пары пикселей миниатюра будет такая же


не обязательно, всегда будут пары изображений, где в результате изменения одного бита миниатюры в итоге будут разными

Впрочем к исходному вопросу это отношения не имеет
255 2537649
>>37324

>ОП пофикси тред , убери ссылку на эт хуйню


Да его сложнее чем Лутца выпилить. Вроде все понимают, что "не то", но он уже настолько расхайпован, что сложно чего-то ещё предложить взамен
256 2537740
>>37275
Ёсьць зусім іншае рашэньне адпаведнае твайму прыкладу: soundex ці metaphone. Стварае індэкс для словаў па гучаньню.

https://pypi.org/project/ru-soundex/
https://pypi.org/project/fonetika/
257 2537758
>>37740

> ньн


Эту хуйню же большевики ещё отменили? Змагар-реконструктор, пиздос.
258 2537773
>>36125
тебя никто не понял что ты там написал.
259 2537785
Возможно ли распараллелить запись в один файл так, чтобы не случилось недетерминистичного говна когда два процесса "перебивают" друг друга и получается каша из байтов? Не бейте за тупой вопрос, я впервые занимаюсь параллелизацией, посадили перекатывать скрипт который обрабатывал, условно, миллион документов в сутки чтобы он обрабатывал двадцать.
(на практике я почти точно раздам потокам по своему файлу и потом сведу в один, но мне любопытно)
260 2537786
У меня есть огромная пачка скриптов, написанная людьми которым скорость написания и "работает же" была сильно важней хороших практик (читай - датааналитиками). Начальство просит свести это всё в нормальную репу.
Как мне быстрее всего слепить requirements.txt из этого? Пока что самое умное что я придумал - поставить голый венв, автоматически установить всё что там есть, и сгенерить рекваерментс ИДЕшкой).
261 2537800
>>37785
Калі файл адкрыеш для запісу, сістэма блякуе ягонае адкрыццё ў іншай плыні. Гэта выключае канфлікт кшталту мешанкі байтаў.

Аптымальна будзе выкарыстаць шматплынёвасьць каб чытаць і апрацоўваць файлы, але запісваць іх пасьлядоўна па-за плынямі. Бо шматплынёвасць шкодзіць хуткасьці файлавых апэрацый. Чакай пакет multidisking.

>>37758
Бальшавікам далі па пысе імбрыкам і адмянілі іх.
262 2537826
Поцаны где тут ошибка не могу понять , пытаюсь в тестирование на пайтон, но не должно быть ошибки делаю всё как на видосиках.????

import requests

class TestfirstAPI:
def test_hello_call(self):
url = "https://playground.learnqa.ru/api/hello"
name = 'Vitalii'
data = {'name':name}

response = requests.get(url, params=data)

assert response.status.code == 200 , "Wrong response code"

response_dict = response.json()
assert "answer" in response_dict, "There is not field 'answer' in response "

expected_response_text = f"Hello {name}"
actual_response_text = response.dict ["answer"]

assert actual_response_text == expected_response_text , "Actual text in response is not incorect"
263 2537833
>>37826
Почему в одном месте response_dict а в другом response.dict ?
264 2537835
>>37785
Мне кажется что возможно, если ты сначала создаешь файл из нулей, например 8 гигабайт размером, и потом каждый процессс пишет строго в свой гигабайт. Но результат будет зависеть от того какая ОС и какая файловая система.
265 2537848
>>37785
Скорее нет, чем да. Скажем так, чтобы была одновременная запись сделать можно, но чтобы всё гарантированно работало - я не уверен.

Сделай один процесс с открытым файлом, которому другие процессы передают куски на запись и делают запросы на чтение. Файл всё-равно в скорость работы накопителя упирается, и записывая из двух процессов ты ничего кроме потенциальной ненадёжности кода не получаешь. А с одним процессом, который будет держать в себе очередь правок и запросов на чтение точно будет работать в любой нормальной ос и не вызовет никаких ошибок.
266 2537870
>>37470
разумеется, словари упорядочены. все тру олды треда знают, что это так
267 2537871
>>37488
вероятно, этот косяк венды был описан в 2002 году, и до сих пор актуален
268 2537946
>>36163
жесть подрыв джуна
269 2537947
>>37833
потому что код накопипастил
Аноним 270 2538260
Привет аноны , вопрос к опытным веберам, подскажите план (ну или хотя бы список того что нужно знать) для вката в бэкенд на джуна?
271 2538299
>>38260
SQL, HTTP, framework.
Аноним 272 2538301
>>38299

>framework


какие
273 2538311
>>38301
Django, либо Flask+SQLAlchemy, либо Aiohttp или что там модно молодежно
hg2dcbj3lvu2jbjjtdd4.png22 Кб, 880x591
274 2538314
275 2538336
>>38260
язык(питон), git, linux, django, sql(postgres), алгоритмы и структуры данных, ооп, паттерны проектирования, юнит-тесты, html+css, rabbitmq, docker, работа с api, асинхронное программирование, аниме
276 2538342
сижу значит учу джангу а там про какое то орм говорят которое работает с бд напрямую, возникает вопрос я что зря эскьюэль учил до этого....
Аноним 277 2538343
>>38336
пизда ...
кста а нах линукс?
278 2538349
>>38342
а нафига ты таблицу умножения учил, если есть калькуляторы.
279 2538358
>>38343
сервера вроде как на линуксах стоят. но я зарофлил на самом деле, не переживай, по сути надо ориентироваться немного в гите, в вёрстке разобраться за пару вечеров сможешь, язык и бд ты уже знаешь, осталось написать на джанге пару интернет-магазинов и уже будешь иметь представление о том что ждёт на работе и о чём говорить на собесах, всё получится.
280 2538359
>>38343
Это нужно что бы резюме солиднее выглядело. Каждую мелочь отдельно выписать.
281 2538662
>>38314
Aiohttp умер окончательно?
282 2538682
Сервера работают на линухе, если ты занимаешься вебом нужно уметь знать основы типа запустить свое дерьмо на удаленном сервере, настроить запуск сервисов итп.
283 2538750
Ананасы, я правильно понимаю, что в кондишине типа:
if ('key' in dict.keys() and dict['key'] == 1)

Второе условие даже не будет проверяться, если первое False и значит ошибки не будет?
изображение.png9 Кб, 285x279
284 2538752
>>38750
У тебя есть очень удобный автоответчик на такие вопросы, начинается на "к", заканчивается на "ь".

Я рекомендую вариант с get - не знаю что там внутри питона, но get один раз просматривает ключи, и если находит возвращает значение, а твой вариант один раз просматривает все ключи для первой проверки, а потом ещё раз ищет когда ты уже значение получаешь.
285 2538755
>>38752

>У тебя есть очень удобный автоответчик на такие вопросы, начинается на "к", заканчивается на "ь".


kChatGPTь
286 2538756
>>38752
Он вычисляет хеш ключа, а не смотрит все ключи, это быстрая операция.
287 2538758
>>38756
Да всё-равно любая логика написанная в самом питоне на низком языке это быстрее двух условий в питоне в любом случае.

Точно?
Первая операция, нужно проверить есть ли ключ. Перебирать все ключи медленно - потому ты считаешь хеш, и смотришь уже 1 (или 2-3 ключа, если там коллизия).
Вторая операция, нужно получить значение. Ты считаешь хеш и выдаёшь значение, или кидаешь исключение если ключа нет.

Во втором случае с get он на стадии получение значения вместо исключения кидает значение по умолчанию. Там такой же if стоит, но вместо throw идёт return default
288 2538759
>>38758
Это называется преждевременная оптимизация.
Гет полезен для других целей.
289 2538760
>>38759
Уж прости. Я из крестотреда сбежал.

Да даже без оптимизации просто код яснее. В отличие от злоупотребления sorted где не нужно — гет точно не скажется на производительности, потому в этом случае код сокращать можно без оглядок на что-то.
290 2538761
А как правильно сделать ожидание пока переменная появится?
Такой костыль работает, но это явно неправильно:
while lol == 0: sleep(3)
291 2538762
>>38761
Как это она появится, если ты её не поставишь?
Разве что в асинке, но там работают с ивентами, а не с такими блокирующими циклами.
А так или while True и брекаешься когда надо, или while var и манипулируешь этим самым варом.
292 2538811
>>38761
a = None
while a is None:
print('Инициализируйте переменную')
a = input('>')
293 2539178
>>38811
Это подобный костыль, её надо объявлять как None а это не is not defined.
Вот кусок из JS: if(typeof someVariable == "undefined"){
Мне собственно интересно что в пайтоне нет такой же проверки? С if то ясно как сделать, просто "if переменная:", если переменная есть то всё поедет, ну или else.
То есть есть ли что-то такое while lol is Not Defined: ?

>>38762

>Как это она появится, если ты её не поставишь?


В лисенере "def listener(message):" и переменная внутри функции не определена пока не появится, её вообще приходится объявлять как глобал что тоже костыль.
294 2539184
>>39178

>костыль


Скорее typeof костыль. Он возвращает строку, но какие были причины так сделать? В строках не проверяется синтакс, у тебя программист напишет "unefined" и ищи потом эту хуйню. Опять же, каким-то инструментам, анализирующим код (например IDE) будет сложнее с кодом, в котором нет переменной, а потом она вдруг появляется, потому что неизвестно, какое у нее имя. Именно что a = None выглядит намного более гладко.
295 2539214
>>38750
Пиздец, чел.

Во-первых, нахер ты создаёшь итератор по ключам чтобы проверить долбаную хэшмапу, которая сука специально создавалась для таких проверок с O(1)? 'key' in dict, всё. Без .keys()

Во-вторых, это можно сократить, if dict.get('key') == 1.

В-третьих, да, and/or выполняются лениво.
296 2539218
>>38761
asyncio.Event, threading.Event и аналогичное. Вместо твоего цикла будет одна строка event.wait(), и не будет лишних 0-3 секунд ожидания.
297 2539225
>>39214
Все эти keys,values,items возвращают специальные объекты.
Именно keys выдает что-то вроде сета, потому что все ключи хешабельны. Скорее всего в итоге оно работает примерно одинаково под капотом. Но без keys красивее в такой проверке.
image.png20 Кб, 825x299
298 2539232
изображение.png7 Кб, 301x201
299 2539234
>>39232
Ну, ты чего анон? Что-то вроде сета.
Это как range. Вроде бы раньше он список выдавал в версиях второго питона, а теперь это свой объект range.
300 2539235
>>39234
Я к тому, что это не итератор, он не будет смотреть все ключи.
301 2539238
>>39235
Также, как ты можешь сделать x=range(9999999) и делать 1000 in x и ничего там не будет итерироваться.
Screenshot from 2022-12-12 19-13-02.png21 Кб, 655x113
302 2539255
>>39225
Ну не сет он выдаёт, а итератор, указатель на оригинальную хэшмапу и указатель на текущий элемент. Видимо они там подсуетились и реализовали прокси-метод in, который вызывает оригинал, разница во времени небольшая и не зависит от размера.

https://github.com/python/cpython/blob/main/Objects/dictobject.c#L4665-L4671
303 2539260
>>39255
разница в 50% так-то.
304 2539263
>>39255
Ну так у тебя оверхед во первых на поиск метода, во вторых на создание объекта. Вынеси dd = d.keys() в глобалс и смотри тогда.
Screenshot from 2022-12-12 19-31-28.png23 Кб, 861x110
305 2539270
>>39263
Кек. Неужели в dict contains что-то большее чем dictkeys contains?
307 2539290
>>39279
Так и почему быстрее? Кейс таки должен чуть помедленнее быть из-за оберток этих, но на копейки.
Screenshot from 2022-12-12 21-36-10.png22 Кб, 710x180
308 2539359
>>39290
Там повторён код, а не обёртка. Видимо вся котовасия из-за сломанного ООП/системы слотов/магических методов.
309 2539363
>>38761
Можно отслеживать globals() на появление новых переменных
310 2539364
>>39359
У него есть привязка к оригинальному словарю, поэтому так, наверное.
Вообще, надо покопаться во всех этих реализациях, интересно. Но надо подучить си и найти какой-то материал с разбором. Видел цикл лекций на ютубе, но по двойке.
311 2539384
>>39270
Мяу. А можно этому timeit передать функцию или лямбду и список+словарь аргументов, а не строку в виде текста?
312 2539385
>>39384
Можешь имя функции передавать.
def hui:

timeit(hui)
313 2539392
>>39385
А аргументы как?
Я хочу проверить для разных параметров время выполнения функции.
314 2539394
>>39392
Можно через лямбду, можно через замыкания.
315 2539403
>>39394
Не знаю что такое замыкание. Всегда считал что так лямбды в js называют просто...
А как передать то? Написать пустую лямбду по типу labmda: fun(t1,t2)?
316 2539406
>>39403
С лямбдами да.
Замыкание примерно так. https://ideone.com/TnTGLf
К функции прилипают переменные из окружающего скоупа.
317 2539407
>>39406
Угу, понял. Так бы и сказал, что просто когда функция возвращает функцию, примерно как декоратор.

Идеоне заблочен по какой-то причине, кстати, причём "сильно" - рутрекер открывается условный с использованием тех же лёгких средств обхода блокировок. А тут только прокси.
318 2539462
Ладно, а подскажите другое, где можно захостить дискорд-бота на питоне или другой небольшой сервер со своим протоколом на 5 человек?
319 2539467
>>39462
https://lowendstock.com/
С бисплатна идешь нахуй сразу.
320 2539473
>>39467
Да не вопрос, только я не знаю как сервер не в России оплатить, а местный не хочу.

И там какие-то веб-платформы, я во всём этом не разбираюсь, хочется код запустить, просто чтобы у него айпишник свой был и к нему можно через сокеты по порту подключится, без докеров-хуёкеров или что там используется. Такое везде будет?
321 2539475
>>39473
Да. У них обычно нат, там один айпи на всех, тебе выделяют диапазон портов под твою впску на которых можно развернуть какие-то сервисы.
Как оплатить уж сам разбирайся.
322 2539496
Какой xml-парсер вам больше нравится?
использую xml2dict, мейнтейнер мудак, зависимость есть
323 2539497
>>39496

>xml2dict


xmltodict? Или это разные? Что за история с майнтейнером?
324 2539498
>>39496
Сто лет уже не было задач с использованием xml, где ты такое нашел?
Разве что использую lxml как парсер для супа или напрямую для парсинга хтмл, если нужна скорость, т.к. суп пиздецки тормозной и гигабайты на нем молотить можно от старости умереть.
325 2539507
>>39496
Стандартный xml etree. Нахуй что-то ещё?
16704795445870.jpg1,7 Мб, 2149x1517
326 2539528
327 2539536
>>38752
гет лучше только тем что ключ два раза не писать
328 2539542
>>39178
в питоне подбная проверка выглядит вот так

try: print(lol)
except NameError: pass
Screenshot148.jpg42 Кб, 797x446
329 2539659
Посоветуйте что почитать по всяких ОХУЕННЫМ фичам языка?
Я имею ввиду лямбды, functools, collections. Желательно с упражнениями.

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

Реально, книжек как будто нет. Кое-где упоминаются, но вскользь.
330 2539747
Потратил день чтобы написать херню которая преобразовывает входящий список. Кажись программировать не мое.
331 2539925
>>39747
пости херню в тред
если решу за 5 минут - выкатываешься из ойти нахуй
332 2539993
>>39659
Остановлюсь пока на этом:
https://github.com/fbaptiste/python-deepdive ( тут только отдельные уроки про функциональщину)

Тут вроде серия заданий для яваскриптеров
https://www.codewars.com/kata/582746fa14b3892727000c4f

Мне понравилос.
333 2540076
>>39496
Стандартный модуль xml сейчас более, чем хороший. lxml из каких-то древних времён, штатный xml всё умеет, что нужно
334 2540081
>>38662
Его за пределами Украины-РФ почти не знают. Не любят там славян, не любят
image.png198 Кб, 354x500
335 2540105
Случилось чудо, первым спиздили переводной python distilled, а не оригинал.
Клятый аддисон-весли.
336 2540106
>>38662
Сами авторы говорят, что его нужно юзать только как базу низкоуровневых вещей типа ебли с протоколами. Фастапи же предоставляет кучу батареек из коробки для полноценной вебморды. Отсюда и перекос. К слову, практически уверен, что многие юзают aiohttp как клиент.
337 2540154
>>40106
aiohttp очень удобен как асинхронная веб морда для сетевого инструментария, тебе не нужны все эти asgi.

Но именно для api веб-сервисов скорее всего FastAPI лучше будет.

Там правда в чарте хватает какой-то левой мути, а вот aiohttp места не нашлось.
338 2540155
ппц ну я тупарез тупарезный
в общем занимался по книжке для нюфагов питон тони гэдис фроде с фруктами на обложке. Читал в целом все было понятно и задачки были посильными и темы понимались нормально. Вот прошел я. уровень еще низкий для решения задач из сети, думаю ну надо расширить знания начал читать лутца, так у него главы настолько большие что я пока одну тему читал уже стал забывать другие потому что не делал задания, а заданий там не то чтобы нету, но надо много прочитать прежде чем что-то понять. объемы очень большие. теперь вот хз вроде пока читаю а закреплять на практике более подробные знания с этими вариациями использования того или иного цикла или метода или способа я не успеваю тупо. учебный процесс можно сказать нарушился. может есть способ чтобы и углубляться и закрепляться и не так быстро забывать одно переставая видеть за деревьями леса
339 2540156
>>39542
>>39178
Я проверяю есть ли переменная в окружении, просто проверка имени переменной в dir или global по имени. Это питонический путь или ещё нет?
Ну как по мне это вообще ситуация не обычная, если ты не знаешь какие у тебя переменные есть, мне такое нужно было только для работы в колабе, там была каша из окружения - один фрагметн кода запускается что-то делает, потом ты его останавливаешь, погромируешь-погромируешь и следующую ячейку с кодом запускаешь.
340 2540161
>>40154

>для сетевого инструментария


Ну так сетевые инструментарии гораздо более редкая вещь относительно обычных веб сервисов.
341 2540195
>>40154
Думаю все просто укатились на go. И быстрее, и проще деплоить, и скейлится по ядрам хорошо, и выучить язык нормальному питонисту две недели.
342 2540200
>>40155
Книга нужна чтобы за ручку тебя вести, чтобы ты задал себе правильные вопросы и нашёл ответы. Если книга снотворная — лучше дропай. Делай сразу юзабельные программы, напиши сначала угадай число, калькулятор, какую-нибудь тривию, 5 букв, попробуй веб поделать на каком-нибудь фласке, игры на arcade, в майнкрафте попрограммируй черепашек. Постепенно всю нюансы языка нагуглишь хорошо сформулированными вопросами/экспериментами в REPL.
343 2540218
>>40105
А где?
Сейчас помоек развелось, я не успеваю.
Да еще побанили в одной, когда я их обозвал очередной пиратской помойкой...странные
344 2540225
>>40218
Есть как минимум на либгене и руторе.
345 2540469
Нужна книга по пистону без воды. Лутца не советовать, там какой-то ад: на 410-й странице только начинают разбирать for/while. Желательно с задачами. Писал на питоне только небольшие скрипты, сейчас есть необходимость поработать над большим приложением.
346 2540483
>>40105
Ну и что это такое?
Книга претендует на то чтобы заменить Лутца по исчерпывающести?
347 2540491
>>40469
ну как же без воды? а как же создание нейронных связей?

Посмотри Хиллард Д. - Секреты Python Pro (Для профессионалов) - 2021.pdf
348 2540572
>>40483
Идиотский нейминг от пиривоччиков, хоть не "питонья братва".
Интермедиейт книга от Девида Бизли, очень толковый чувак. На фоне засилья однотипных начальных для вкатунов это заебись.
oYAwzuHmQ4Q.jpg392 Кб, 1200x1600
349 2540905
Сделал вот такую проверку появился ли инет при переподключении заодно возвращает айпи, так правильно делать, или можно как-то изящней всё реализовать?

flagWait = True
while (flagWait):
try:
#time.sleep(1)
print(html.fromstring(requests.get('https://myip.ru/index_small.php').content).xpath('//tr[2]/td/text()'))
flagWait = False
except Exception as ex:
print(f"Error: {ex}")
flagWait = True
350 2540916
>>40905
Ну как минимум while True, лишняя переменная нахуй не нужна. Сайт у тебя какой-то васянский, завтра исчезнет. Делай хед на тот же Гугл.ком.
351 2540950
>>40905
while True:
try:
html.fromstring('хуйня малафья')
break
except:
time.sleep(1488)
352 2540973
>>37470
Если поместить словари в список и затем отсортировать, то словари будут упорядочены.

Я прошел тест?
353 2541260
>>40916

>Сайт у тебя какой-то васянский, завтра исчезнет.


Там пара строк и одна из них мой айпишник, его и получаю.
Посмотрел сейчас есть сайты с api где можно айпишник в джисон формате получить, но там ограничения на 10 обращений, у какого норм ресурса это без лимита?

>>40950

>while True:


>try:


>html.fromstring('хуйня малафья')


>break


>except:


>time.sleep(1488)


Заебись, спасибо.
354 2541261
>>41260
Dyndns изобретаешь?
355 2541294
>>27453 (OP)
Сап питонач, вкатываюсь в питон, читаю Fluent Python. Страница 68, "Deques and Other Queues". Написан пикрил 1:

>The append and popleft operations are atomic, so deque is safe to use as a FIFO queue in multithreaded applications without the need for locks.



Реально atomic они? Wait-free? Или нет? На страничке deque в доках ничего такого не написано, thread-safe и все. Но на страничке про queue (https://docs.python.org/3/library/queue.html) тоже написано, что atomic.

Так какие они в итоге: wait-free, lock-free или там банальный мьютекс под капотом?
356 2541314
>>41294
Там GIL под капотом, тупой мьютекс не всё пространство памяти и планировщик выполнения. До уровня опкода виртуалки/встроенного метода на си всё атомик и тред сейф.
357 2541335
Подскажите, книга Доусона "Программируем на Python" кал или нет? Бесит, что все примеры даются как игры, а хотелось бы больше реальных/математических задач, как в хендбуке Яндекса.
358 2541343
>>41314
GIL не гарантирует атамарность. Я могу написать такую билиотеку на си, которая будет не атамарной. Например она содержит 3 функции send, flush и f. Функци send препроцессит отправляет данные в буффер, а flush коммит эти данные переселые из буффера куда надо. Функция f принимает аргумент n и делает n раз вызов сначала send, а потом flush. В итоге если передать из питона f большое число, а во время работы убить процесс, то сообщение будет отправлено не n раз. А свойство атомарности говорит, что либо n раз нужно отправить когда всё работает или 0 если ошибка. Атомарность значит или полностью применить изменение или вообще не применять. GIL не знает что там под капотом на си и не гарантирует атамарность. Только код на си может себе атамарность гарантировать
359 2541350
>>41314
Нит, пистон выполняет не код, а команды байт кода, которые ты можешь посмотреть через dis. Если во время работы с тредами планировщик скажет сменить тред, а потом ты вернёшься к функции, где есть, например, присвоение глобальной переменной, операция которой выполнена на половину (то есть во фрейме уже сгенерирована новая переменная, но она не пушнута в глобал стейт), то можешь получить очень неприятный сюрприз.
Стикер191 Кб, 321x430
360 2541355
>>40973
нет ньюфажена, гугли изменения по версиям
361 2541358
>>41343
Хуета с дивана от байтоёба.

>>41350
Ну ёпт, я именно это и написал. Жопой читаешь? Опкоды/сишные коллы выполняются как цельная операция под гилом. То что ты там в несколько опкодов написал уже может прерваться.
362 2541359
>>41358

>Хуета с дивана от байтоёба.


Пруфы? Дай определение атамарности и сам расскажи как мой код работать будет. И если с моим описанием не сойдётся, то я сам тебе напишу эту библиотеку
363 2541360
>>41359
Атомарность это неделимость, как у древнегреческих философов. Она не обязательно с ролбэком. Ты просто можешь заблочить гил, и неделимо выполнить ряд операций.
364 2541364
>>41343

> GIL не знает что там под капотом на си и не гарантирует атамарность


Ну то есть, блядь, само собой, GIL за тебя код не напишет. Но конвенция сишного кода для питонов подразумевает что по умолчанию только один тред активен, поэтому большая часть операций безопасна. Там изредка экстеншены его отпускают, если 100% уверены в том что делают, всякие numpy, когда отправляются дробить числа.

При этом разломать list/dict/deque несинхронизированным доступом из нескольких тредов ты не можешь. Любой встроенный метод, какой-нибудь list.append, выполняется атомарно. GIL не отпускается пока не выполнится.
365 2541390
>>41355
Ну ты и душнила унылая.
366 2541419
>>41314
>>41364
Точно, я совсем забыл про GIL, мне до него еще читать и читать. Но ведь GIL подразумевает, что все thread-safe (тред же только один, верно?) по умолчанию, зачем тогда отдельно писать, что deque.append - thread-safe? Чтобы успокоить байтоебов?
Глянул в исходники deque, там точно нет Py_BEGIN_ALLOW_THREADS https://github.com/python/cpython/blob/main/Modules/_collectionsmodule.c#L274 (а например в time.sleep есть - https://github.com/python/cpython/blob/main/Modules/timemodule.c#L2169 )
367 2541571
>>41419

>Но ведь GIL подразумевает, что все thread-safe (тред же только один, верно?)


Сегфолтов ты не получишь, но данные закораптить запросто
368 2541609
GIL гарантирует вам только то что пистон не крашнется, на вашу логику вашего приложения ему похую.
369 2541640
>>41571
>>41609
Так, падажжи, ебана. Ну да, тред один, но имеется в виду, что он выполняется только один, но может в любой момент быть переключен, верно? Этот момент я упустил.

Получается, каждый отдельный питоний опкод выполняется под GIL (ну точнее не прямо каждый, а типа N-ое количество, иначе, думаю, совсем со скоростью пиздец бы был, но идея в целом такая)? И при вызове нативного кода GIL лочится автоматически, пока весь нативный код не будет выполнен (ну или пока нативный код сам не снимет блокировку)? Тред не переключается, пока активен GIL?

То есть deque.append thread-safe просто потому, что при его вызове неявно ставится обычный лок (GIL), а не потому, что там хитрые lock/wait-free структуры данных под капотом (сишная имплементация вообще дубовая, но я думал, что что-то упускаю)? И если бы deque.append был написан на питоне, то там нужно было бы threading.Lock втыкать?

Ну тогда вроде все понятно более-менее, спасибо, аноны.
370 2541911
Анончики, объясните дебилу в питоне, как из этого сделать, чтобы ввод строки был с клавиатуры, а не задан в программе?
Код должен выводить из строки все символы, которые написаны по одному разу и сортировать по порядку ASCII, хотя мне бы и без сортировки...

def task(s):
r=[0 for i in range(256)]
for a in s:
k=ord(a)
r[k]+=1
for z in range(256):
if r[z]==1:
print(str(chr(z)),end=' ')

task("qwertrtty")
371 2541923
>>41911
r=[0 for i in range(256)]
нифига се ты хардкорщик.

def task(s):
a = []
for i in s:
if i in a:
continue
else:
a.append(i)
print(i)
return a
print(sorted(task("qwertrtty")))
Screenshot19.jpg44 Кб, 514x554
372 2541927
>>41911

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


ну или так
373 2541929
>>41911
или просто через множество, но наверное, ты до этого ещё не дошёл
374 2541931
>>41911
А, хотя я неправильно твоё задание понял, но там пару строк подправить и всё
375 2541945
>>41931
>>41929
>>41927
>>41923
спасибо! разобрался
376 2541948
>>41923
print(sorted(set(s), key=ord))
377 2541949
>>41948
Разве эта функция не по дефолту сортирует по ord
378 2541959
>>41948
В принципе да. Видимо, суть задачки - навелосипедить вручную
379 2541968
>>41959
Да это суть задач. Дать тебе отработать на практике материал.

А то тут сразу же вспоминаешь всё это нытьё с рекурсивными функциями и задачками по них, да, крайне переусложнённые и которые без них порой намного проще и быстрее решить. Но у тебя задача не проще и быстрее решить, а именно рекурсией
380 2541976
>>41968
Рекурсия это говно. Суть питухона же максимально упростить код и разработку, нахуя же эта рекурсия нужна, чтобы макаки тратили часы на вход, потом в ней ошибались и переделывали. Есть ли вообще такая задача которую не решить без рекурсивного мозгоебства или это просто выебоны?

неосилятор
381 2541987
>>41976
Есть рекурсивные задачи, которые хорошо в нее укладываются, но можно решить и без неё.
Например, поиск файлов в вложенных каталогах или обход всех страниц сайта, который кравлинг.
382 2542018
>>41976
У тебя есть пакеты и монетки. В любой из пакетов ты можешь класть монетки, а так же другие пакеты (в том числе с монетками и пакетами монеток). Задача — посчитать сколько всего монеток внутри произвольного пакета.

Можешь заменить пакеты на папки, а монетки на файлы.
Можешь заменить пакеты на html теги, а монетки на текст внутри тегов.

Рекурсивно это решается в 10 строк. Нерекурсивно порядка 100.
383 2542021
>>41987
У ностарча недавно вышла книга про рекурсию с примерами на жс и питоне, кстати. Я пока не читал, но это хороший издатель без откровенного говна.
384 2542032
>>41976
Рекурсия просто заставляют поднапрячь мозг чуть больше, чем просто +-*/ и if else while.
Вот и всё, сложного там ничего нет. А мозг поднапрячь полезно лишний раз
385 2542052
>>42018

>Нерекурсивно порядка 100.


monetka = 0
for i in poket:
monetka += 1
386 2542059
>>27453 (OP)
Пацаны, джанго бэк создает некий excel-файл, нужно сохранять его так чтобы создавший его юзер потом мог посмотреть его через админку и скачать если нужно. Как это реализовать? Понятно что я могу создавать рандомное имя для файла и сохранять его по известному пути, но как сделать так чтобы его можно было смотреть из админки?
387 2542061
>>42052
не.
for i in poket:
if i(type) == list or i(type) == tuple и так далее
for j in i:
if j(type) == list or j(type) == tuple и так далее

и по пути у тебя всё сто раз сломается и придётся ещё 50 строк костылей писать
388 2542063
>>42052
Считай, монетка.
[1, 1, [1], [[1, 1, [1, 1]]], [1,[1, 1], 1]]
c6de000fa1c1.jpg55 Кб, 1146x643
389 2542064
390 2542066
>>42061
да и эти костыли будут считать только с определёнными данными, если они изменятся, то и весь код полететь может и тебе снова надо будет ещё 50 строк года добавлять, когда рекурсией это буквально пару строк и норм производительность для таких задач.
391 2542070
>>42063
А, ну вот хороший и единственный пример где нужна рекурсия. Тут согласен.
392 2542074
>>42064
Откуда у тебя моя фотка в момент программирования на Пайтон, когда я наиболее уязвим?
393 2542076
>>42059
Через сторадж сохрани файл и запиши его имя в FileField какой-нибудь модели. Будет так как будто файл загрузили через форму, но на деле ты его создал прямо на бэке. https://docs.djangoproject.com/en/4.1/topics/files/
394 2542119
Всем привет , кто может помочь пожалуйста с кодом на питоне , возникли некоторые трудности в создании одного проекта . Используемые основные библиотеки : pynput, telebot
395 2542150
Не врубаюсь, почему мое решение не подходит?
https://pastebin.com/fZyA5Zhf
Я знаю что это тупо, но я пытаюсь полностью закрепить владение itertools и тд
https://www.codewars.com/kata/58291fea7ff3f640980000f9/python

Уже переделал, но надо разобраться что не так с этим способом
396 2542156
>>42150
Пиздос как сложно у тебя.
{x['continent'] for x in lst}.issuperset(set(all_cont))
397 2542160
>>42156
Я понимаю, я забрутфорсил это решение просто через set:

all_set={'Africa','Americas','Asia','Europe','Oceania'}
def all_continents(lst):
checkset = set(map(lambda x: x['continent'],lst))
return checkset == all_set

но почему не проходит это сложное?
398 2542172
>>42160
Проходит.
С сетом вариант тоже хуйня, через сет компрехеншен намного лучше.
Screenshot from 2022-12-15 20-07-56.png23 Кб, 974x195
399 2542177
>>42160
Точно забрутфорсил? Так-то разницы между твоими решениями, судя по всему нет. Возможно дело в superset.
400 2542193
>>42177
Ебал я этот сайтец :(
На следующих задачах из серии тоже какая-то хуйня.

https://www.codewars.com/kata/coding-meetup-number-9-higher-order-functions-series-is-the-meetup-age-diverse

Ну что здесь не так может быть?
https://pastebin.com/UqV6Uazr

Похоже просто макакены друг друга обучают и плюсики ставят.
Придется на leeetcode идти, но там какие-то задачи всегда сложные.
401 2542195
>>42172
Мне просто не нравится set comprehantion.
Ката - это когда ты тренируешь конкретные элементы, а не ищешь лучший.
Вот я решил потренировать itertools и друзей.

Но получается какая-то поебень (
402 2542202
>>42195
Да причём тут сеты и итертулз, там задача отметить галочки что есть разработы из всех требуемых регионов. У тебя сама задача не решается. Достаточно появиться кому-нибудь из Антарктиды чтобы твоя прога перестала говорить что из Африки и Европы люди есть.
403 2542206
>>42195

> Ката - это когда ты тренируешь конкретные элементы, а не ищешь лучший.


Нет, это как раз писькомерство как бы изъебнуться поменьше.
Конкретно эти твои это какие-то тематические на higher-order functions.
404 2542209
>>42202
Но никто из таких не заявится на кодерское пати. Ни у кого нет паспорта из Антарктиды.
405 2542212
>>42206
Мне кажется так проще оценивать программу на правильность.
Не с отладчиком прыгать по ебучим вложенным циклами, тестик для функции ебануть.
Ну я что буду тут пересказывать стандартную документацию?

Тем временем, почитал комментарии и понял из этой задачи >>42193
что детей учить программированию нельзя
406 2542216
>>42209
Окей, плавает кто-нибудь на яхте уже 5 лет, и указал локацию Ocean. Сути не меняет.
изображение.png34 Кб, 563x799
407 2542233
>>42216
Ну вот сходи там на сайте в каментах подушни
408 2542256
Придумал упражнение на reduce но сам не могу ни нагуглить ни решить:

Как посчитать среднее чисел больше 0 в один проход с помощью reduce?

То есть, я хочу научиться делать reduce, но так чтобы reduce работал не со скаляром,
а с двумя скалярами - суммой и числом удовлетворяющих условию элементов.

Я же не могу lenght где-то хранить вне лямбды. Как такое решается?
409 2542270
>>42256
Ну так используй кортежи (сумма, количество).
lambda t: t[0] + value, t[1] + 1
410 2542272
>>42270
В скобки забыл обернуть. lambda t: (..., ...)
411 2542281
>>42272
reduce(ANUS, [1,2,3])
Какую лямбду засунуть в ANUS чтобы возвращало среднее арифметическое?
412 2542286
>>42281
reduce(lambda acc, x: (acc[0] + x, acc[1] + 1), [1,2,3], (0, 0))
413 2542288
>>42286
Возвращает (6,3), а среднее арифметическое 2
изображение.png27 Кб, 962x217
414 2542295
>>42270
А вот это https://pastebin.com/LSpQvgEK можно в одну строчку запихнуть?
Что-то я путаюсь.
415 2542297
НА САМОМ ДЕЛЕ я вспомнил как в одном очень серьезном опенсорсе, любители лябмд проебались и неправильно посчитали среднее. Без учета None (дело было в Typescript)

Теперь вот пытаюсь понять как им следовало бы это написать.
416 2542298
>>42288>>42281
Я думаю никак нельзя с лямбдой, тебе нужно два значения хранить на каждой итерации, и в конце только поделить.

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

Лучше бы ты написал sum(lst)/len(lst), чем то что у тебя.
417 2542299
>>42286
>>42298

Бля как же всё это круто и интересно, очень нравится, даже шишка привстала. Боюсь только что если это не дрочить на практике, то забудется через пару месяцев, а дрочить такое на практике зачем? Чтобы код читать сложнее было?
418 2542300
>>42288
Раздели 6/3, чо как тупой?
419 2542301
>>42299
Я в целом про задачки для питона.
изображение.png3 Кб, 743x54
420 2542302
Ну, ещё естественно такое есть, но это уже совсем ультрабред.
421 2542303
>>42299

>Чтобы код читать сложнее было?


чтобы сложные циклы визуально свернулись и код стало читать проще
изображение.png8 Кб, 651x104
422 2542304
>>42299
Вот, ещё шишку твою побалую.

Да просто пиши код какой хочешь, оно само придёт, когда будет всю эту хрень легко разбирать и видеть что тут написано.
423 2542310
>>42298
Я думаю, можно нахувертить вложенных лямбд и тащить скоуп за собой, но лень придумывать, это бессмысленная задачка.
424 2542313
>>42303
Вложенные циклы читать как раз проще, уже двухэтажный компрехеншен на грани, не говоря о больше.
А если тебе надо прокрутить что-то быстренько, то да, такие штуки упрощают.
425 2542355
>>42313
Давай мы перестанем толочь воду в ступе и ты прочитаешь до конца это https://docs.python.org/3/howto/functional.html
426 2542364
Есть у кого-нибудь Рамальо Питон, к вершинам мастерства август 2022 ?
изображение.png150 Кб, 680x332
428 2542677
429 2542684
>>42364
>>42627
А что хорошего в этой книге? Почему стоит прочесть?
430 2542686
>>42684
Обувают лохов на деньги. Читай укус бидона, не отвлекайся.
431 2542690
>>39925
Задача: есть список чисел на входе, нужно сбацать интервалы на выходе. Типо из [1,2,3,5,6,7,9,10] в [1-3, 5-7, 9-10].
Я новичек, можно пиздить сильно
432 2542694
>>42686
А укус чем лучше Ромальо с торрента?
433 2542715
>>42684
там ВООБЩЕ нет ничего для новичков.
Исключительно сложные вопросы и наверняка ты что-нибудь новое узнаешь.
434 2542733
>>42715
Ок, спасибо.
435 2542753
>>42690
Идешь и сравниваешь поочередно значения, истинно ли условие +1. Если нет, то оформляешь результат и продолжаешь по новой.
Для этого есть itertools.groupby, но ты не осилишь, к тому же задачка скорее всего на такой ручной способ.
436 2542798
>>42753
Непонятно.
А почему groupby ?
похоже на reduce, но мне тоже сложно такое
437 2542806
>>42798
Он собирает в группы последовательно идущие элементы с совпадающим ключем-условием.
Редьюс это вообще про другое.
439 2542933
>>42753
>>42819
Так я и писал что сделяль, просто долго из-за тупости. В итоге тупо удаляю по условию лишнее в списке
изображение.png82 Кб, 1473x430
440 2543123
Продолжаю изучать функциональное погроммирование на языке, который не является функциональным . Задача 13

что здесь не так?
Почему itemgetter не работает с dict ?
441 2543133
>>43123
Все понял. Спутал attrgetter и itemgetter.
Мне нужно использовать itemgetter.

Извиняюсь, был напуган.
442 2543256
>>42018
>>42063
Да какие 100 строк. Но рекурсивно все равно проще и компактнее, конечно.
443 2543374
>>43256

>мутирование аргумента


Извинись.
444 2543416
>>43374
Аж на одну строку src=src.copy() больше станет!
445 2543592
>>43256
src.extend(top)
image.png69 Кб, 1318x769
447 2543636
>>42690

остаёшься. у меня на это ушло 40 минут

https://www.online-python.com/V6nTHU3eN9
Стикер536 Кб, 250x250
448 2543685
Вы согласны что питон похож на бейсик или не согласны, я щас нэпонял?
449 2543686
>>43685
Ты бейсик-то видел хоть раз, довен?
image.png22 Кб, 770x679
450 2543688
Посоветуйте инструмент, которым можно рисовать в питоне (нужно наспавнить n кругов фиксированного размера внутри другого круга, чтобы проверить одну статистическую гипотезу, пикрил.
Я правильно понимаю, что для тут только turtle?
451 2543690
>>43688
pillow ещё глянь, там есть средства для рисования.
452 2543699
>>43688
Можно отрисовать вектор на каком-нибудь cairo. Ну и matplotlib. Turtle это для детей, никто не рисует с помощью turtle.
453 2543705
>>42018

>Нерекурсивно порядка 100.


99% рекурсии можно заменить 2-5 строчками на код с очередью, который ещё и эффективнее будет, и не будет проблем с переполнением стека иметь.
Собственно я так сходу даже затрудняюсь назвать алгоритм, где такого сделать нельзя. Хотя я проснулся три минуты назад, ещё не соображаю.
454 2543727
>>43705
Ну замени. Запости код.
Вот тебе входные данные [1, 1, [1], [[1, 1, [1, 1]]], [1, [1, 1], 1]]
Ты тот же стек сделаешь из указателей вручную
455 2543733
>>43727
А что сделать? Сумму посчитать?
456 2543735
>>43733
Да.
изображение.png27 Кб, 546x229
457 2543743
>>43735>>43727
https://pastebin.com/8UJjjx2Z
И g выдаёт результаты лучше, даже если почередовать, чтобы в кеш всё прогрузилось.
458 2543750
>>43727

>Ты тот же стек сделаешь из указателей вручную


Только, во-первых - он не будет переполняться (хотя я не знаю переполняется ли он в питоне), во-вторых, во-вторых - невероятно странно и удивительно что какой бы там ни было стек под капотом питона работает медленнее, чем интерпретируемый код на питоне.

Можешь ещё взять рисунку со спиралькой, и попробовать написать алгоритм заливки (как в пеинте), на си или си++. У меня разница получилась по типу, что для кода с рекурсией время выполнения порядка секунды, а для кода с очередью всего 30 мс.
459 2543753
Если поменять рекурсию пытаясь избежать лишних вызовов - то же самое.
685.png291 Кб, 543x415
460 2543759
>>43743
Хоть проход не в том же порядке, что с рекурсией, и есть копирование, неплохо.

В питонах вызовы функций дорогие как пиздец. Надо очень длинные массивы и низкую вложенность, чтобы затраты отбились.
461 2543768
>>43743
https://pastebin.com/7nRyfTQB
Хуй знает, наверное перегнул со 100 строками. Но будет длиннее точно.
462 2543779
>>43759
Рекурсия тоже ломается, да, а список считай неограниченной длины при адекватном времени выполнения.

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

>>43768
Точно перегнул.
463 2543921
>>43688
матплотлиб
спаси и сохрани.png214 Кб, 3504x1904
465 2543954
братья, прошу спасти и помочь. я учусь на истфаке, но нам в обязаловку впихнули программирование. умоляю решить хотя б 2
466 2543956
>>43954

> число N которое является делителем числа N+1


арифметику на истфаке тоже не учат чтоле?
467 2543957
>>43956
Получается
468 2543970
>>43954
a = input().split()
if int(a[0]) > 1:
__print('0')
else:
__print('1')
469 2543981
>>43970
Это второе?
470 2543991
>>43981
Да.
471 2543993
>>43981

Спасибо, храни тебя господь. Но если не сложно можешь ещё одно решить? Хотя б минималку набрать. Я свечку поставлю
472 2543997
>>43991
Извиняюсь. Сообщение выше должно было тебе отправиться
473 2544004
>>43954
Это на платформе Яндекс контест?
А причем тут истфак?
474 2544006
>>44004
Потому что нам впихнули это под видом дополнительной подготовки "Цифровые технологие".
475 2544007
476 2544014
>>43993
Это первая
f = [int(n) for n in input().split()]
m = [int(n) for n in input().split()]
print(max(f) + min(m))
477 2544186
Аноны, надо проверять входящее имя и если в нем в произвольном месте содержится кусочек строки, только в этом случае продолжать выполнение, иначе return. Как это можно сдлеать максимально компактно. Или только с дополнительной переменной?

NENUGNAYA_PEREMENNAYA = False
tmp_name = 'jigurda'
proper_parts = ('hui', 'pizda','urda')
for p in proper_parts:
if tmp_name.find(p) != -1:
NENUGNAYA_PEREMENNAYA = True
break
478 2544190
>>44186
Зачем тут ненужная_переменная и финд, если можно просто сделать иф п ин тмп_наме.
479 2544199
Двач-питонач, можете пнуть меня в нужную сторону?
Мне нужно сделать бота для дискорда, который будет ловить вебхуки от моего сервака и отправлять их нужным пользователям. По отдельности никаких проблем нет, а вот скрестить это у меня не выходит.
Каким образом я могу скрестить бота (discord или nextcord) и приём вебхук (aiohttp, quart)?
Буду рад, если кто-то поможет
480 2544210
>>44190
Да пох на финд. Как без ненужной_переменной обойтись? Надо чтобы проверялись все proper_parts и только если ни один не найден то return, а если хоть один найден то функция продолжается.

NENUGNAYA_PEREMENNAYA = False
tmp_name = 'jigurda'
proper_parts = ('hui', 'pizda','urda')
for p in proper_parts:
if p in tmp_name:
NENUGNAYA_PEREMENNAYA = True
break

if not NENUGNAYA_PEREMENNAYA:
return
481 2544218
>>44210
def tupoy_pidoras(tmp_name):
for p in ('hui', 'pizda', 'urda'):
if p not in tmp_name:
return
print(tmp_name)
482 2544220
>>44218
Ой , тут я тупой пидорас, если тебе надо проверить все, а не первый попавшийся, тот тут можно сделать через any.
483 2544221
>>44220
Вот именно что ты тупой пидорас и обосрался. Только хотел написать. Обзываться плохо.
484 2544225
>>44220
Ладно. А any она ленивая или нет? Ну т.е. если у меня proper_parts километровый, но в основном есть совпадение в начале она сразу прервется или будет дальше проверять?
485 2544231
>>44225
Ленивый, если какой-то элемент итерабла будет True, то он сразу будет True.
486 2544283
>>44199
Каналы, очереди.
487 2544294
Вот я перебираю список
for e in list:

А чтобы сразу менять элемент в списке нужно вот так делать:

for i, e in enumeate(list):
list = ''

По другому нельзя?
488 2544296
>>44294
lisy =
489 2544297
>>44296
Макаба квадратные скобки сьедает.
490 2544389
>>44294

>По другому нельзя?


Нет.
491 2544440
>>44186
any(part in name for part in parts)
492 2544555
>>40106
Глупость полная. Для aiohttp куча батареек тоже, просто тебе их не навязывают "из коробки". Но они officially supported https://docs.aiohttp.org/en/stable/third_party.html
Юзаю aiohttp там где раньше юзал tornado. Вот tornado умирает, но там слишком много легаси было типа поддержки второго питона.
А fastapi, во-первых, для api, во-вторых на любителя, мне например не нравится.
493 2544558
>>40195
Но сам язык намного менее гибкий. Насчет быстрее - это на особо важно для 99% веб сервисов у которых узкое место БД либо IO(ожидание ответа от другого сервиса). У go есть своя ниша, но он скорее заменяет то, что раньше было написано на С++, хотя туда rust ещё лезет сейчас.
Просто писать на go так себе удовольсвие, если это не что-то совсем просто. Куда приятней scala, nim, elexir
494 2544564
>>40905
if os.system("ping -W1 -c1 ya.ru &>/dev/null") == 0: print("it werks")
495 2544778
>>44283
А можно ещё чуть инфы?
У меня затык в том, что они оба пытаются стартануть один и тот же loop у asyncio. И я не очень осознаю, как мне их разнести. Засунуть их в разные потоки и создать там для каждого потока свой лур - норм решение или нет? Как в питоне вообще с многопоточностью?
496 2544815
>>44778
Зачем создавать разные loop`ы можно один использовать.
В aiohttp ты можешь добавить таск https://docs.aiohttp.org/en/stable/web_advanced.html#signals при запуске
С discord не работал, но судя по коду https://github.com/Rapptz/discord.py/blob/master/discord/client.py оно само подцепит loop который уже запущен ну или можешь в .loop его подсунуть.
497 2544822
>>44778
Почитал дальше исходник discordа. Там блокирующей метод run, наверное с ним проблема?
Можешь вот так же сделать в твоем async task`е https://github.com/Rapptz/discord.py/blob/master/discord/client.py#L815
498 2544847
>>27453 (OP)
>>27453 (OP)
Как бы вы реализовали функционал таймера со стратистикой?

Услувно говоря - пользователь наживает старт - начинается отсчет. Пользовтаель нажимает паузу - начинается пауза. Нажимает стоп - отсчет прекращается.

Я пока не придумал ничего лучше, чем завести бд вида "пользователь-операция-время", а при нажатии, например, на старт писать в нее "пользователь1-старт-unixtime", а для подсчета статистики сделать отдельный скрипт с запросами в бд.
изображение.png1 Кб, 241x24
499 2544902
заебись конечно когда документация топовая
500 2544988
Аноны вот есть переменная в которой находится приличных размеров строка.

Вот есть функция которая эту строку обрабатывает и в конце обновляет переменную.
main_line = updated_line

Переменная в глобальной видимости, она не возвращается с return, такая логика.

Так плохо получилось, что в середине этой функции в редких случаях переменная тоже может быть обновлена и функция продолжится и в самом конце строка опять обновится уже без смысла.
...
main_line = updated_line
...
main_line = updated_line
...

Это вообще нормально? Стоит ли из за этого вводить ещё переменную например main_line_already_updated, чтобы предотвращать второе присвоение. Как это в питоне делается?
501 2545025
>>44988
Вот поэтому глобальные переменные сосут жопу. Мог бы

main_line = function(...)
502 2545032
>>45025
Мне нужна подсказка именно в этой ситуации. Про то что глобальные переменные зло - это на каждом столбе написано, в какой справочный материал не залезь там: НЕ В КОЕМ СЛУЧАЕ НЕ ИСПОЛЬЗУЙТЕ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ С ВИДИМОСТЬЮ ИЗ ФУНКЦИЙ!!! НИКОГДА ЭТОГО НЕ ДЕЛАЙТЕ! БРАТ УМРЕТ!! СЕМЬ ЛЕТ НЕ БУДЕТ СЭКСА!!111 ПРОКЛЯНУУУ!!!!

Что на счет моего вопроса?
503 2545077
>>44988
Забей, питон не про производительность.

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

В общем, я бы рекомендовал сосредоточится на других аспектах, и это прям если тебе совсем нечего делать и ты вылизывания кода производишь - то можно написать тест и посмотреть бьёт по производительности лишнее копирование или лишняя проверка.
504 2545078
>>44988
Какая-то дичь. Вообще ты можешь использовать ключевое слово global внутри функции чтобы изменять глобальную переменную
505 2545081
>>44988

>Стоит ли из за этого вводить ещё переменную например main_line_already_updated, чтобы предотвращать второе присвоение.


А зачем его предотвращать? И вообще, мало ли у тебя несколько потоков, которые эту переменную присваивают и читают?
506 2545113
>>45032

> — как мне отпилить себе ногу?


> — не отпиливай себе ногу


> — ну я знаю что не надо, но вот хочу дальше отпиливать себе ногу



По правде говоря, я не понял в чём суть вопроса. Что-то там, в какой-то сложной функции несколько раз пишется глобал. Ну и? В чём проблема? Пусть дальше пишется.

> чтобы предотвращать второе присвоение



Хуй знает зачем тебе это. Но я тебе предложить тупо возвращать из функции эту строку, и у тебя в принципе не получится никакого второго присвоения. А ты чёт раскукарекался что тебе морали читают. Ну сделай флаг, что уже присвоено, что тебе это даст?
507 2545126
>>45113
Ты чего так разнервничился?
aba5eff7a658005124da82940b17d433.jpg43 Кб, 735x555
508 2545144
>>45126
Я эмоциональный человек, всё в порядке.
509 2545158
>>45113
Суть вопроса выяснить, что в питоне хуже: излишний раз присваивать переменную или вводить флаг чтобы этого не происходило.
2022-12-1900-55-06.png40 Кб, 493x609
510 2545177
>>44815
>>44822

> Там блокирующей метод run, наверное с ним проблема?


Да, скорей всего, ибо или только вебхуки работали, или только бот

Сделал фигню на пикриле и оно заработало! Хз, правильно или нет, но оно работает и пофигу. Огромное спасибо тебе, анон!!
511 2545194
>>45158
Хуже лишний раз посчитать значение. Присвоить переменную ничего не стоит. Разве что через переменную что-то может держаться в памяти, но это редко бывает проблемой.
512 2545195
>>45177
Да, примерно так. Только, мне кажется, надо код в runner завернуть в цикл ещё, чтобы если экспепшн будет он пытался перезапуститься. В методе run в discord.py оно тоже как-то в цикле дергалось.
513 2545200
>>45177

> loop = asyncio.get_event_loop()


> loop.create_task(...)



Так уже давно никто не делает. Во-первых get_running_loop, а во-вторых, можно вообще без loop, asyncio.create_task(...)
514 2545482
>>44902
как это вообще получилось?
image.png28 Кб, 602x426
515 2545485
>>44988

>Как это в питоне делается?



миллион способов, но лучше возьми свой пример, доведи до абсурда и реши, как лично тебе будет красивее выйти из этой ситуации:

https://www.online-python.com/9o8abPhgjN
516 2545758
Решил заняться настоящим TDD (Test Driven Design) и не понимаю как в модуле unittest изобразит тестирование по таблице параметров?

Типа я хочу видеть, с какими именно данными мой метод справляется или не справляется.
Таблица параметров нужна, чтобы тестировать сходные методы. Они все по-разному работают, но должны выдавать идентичный результат( как ни странно)
image.png65 Кб, 2135x223
517 2545771
>>27453 (OP)
Как в Пайчарме называется вот этот механизм - я навожу на переменную в коде и он мне показывает вот такую херню с описанием?
У меня на 2х машинах установлен Pycharm Pro. Но на одной все показывается а на другой - нет (обе Linux mint если че)
изображение.png55 Кб, 710x445
518 2545774
>>45758
Ладно. Разобрался.
У них тут есть метод SubTest(msg='')
519 2545844
>>45200
Ок, поправлю. Пасиб за замечение
520 2546053
Знатоки говна Джанги, сможете пояснить, почему когда отправляю форму через обычный интерфейс (на фронте есть фронта с кнопочкой submit и в описании action) то все ок и данные вьюха видит в request.POST, но когда отправляю через javascript fetch то в request.POST пусто и все данные оказываются строкой байт в request.body?
521 2546243
>>46053
1) Данные отправляются через new FormData() ?
2) Проверяй Content-Type, если ты отправляешь обычный application/json, схуяли он должен попадать в request.POST ?
522 2546333
>>46053
Потому что ты заблудился между двух сосен. И соснул с проглотом.
523 2546335
Пилите перекат, петуховены
524 2546348
>>46335
а хули обсуждать? 4.0 выйдет - запилю
525 2546392
>>41976
>>42032
>>43779
инфа вам за питонячью рекурсию:
https://youtu.be/1dUpHL5Yg8E
527 2547450
>>43970

>a = input().split()


>if int(a[0]) > 1:


>__print('0')


>else:


>__print('1')


Зачем ты так с ним?
def govno(a, b):
rng = range(a, b + 1)
k = [0] * len(rng)
for i in rng:
if (i + 1) % i == 0:
k = i
return [i if i > 0 else 0 for i in k if k > 0]

print(govno(1, 5)) # [1]
изображение.png6 Кб, 159x180
528 2547457
>>47450
Сраная макаба.
529 2548182
>>47450

>Зачем ты так с ним?


Придумай пример числа, подходящего под условия задачи, и ты всё поймёшь.
530 2548278
>>47457
Охуеть как все видно то стало.
Может тебе в окулисты вкатиться?
531 2548449
>>47457
шакал ебучий
изображение.png12 Кб, 454x145
532 2548492
>>48182
Это сразу было понятно, анонче, однако это не делает твоё решение верным.
>>48278
>>48278
Да уж, нехорошо получилось.
533 2548949
>>48492

>Это сразу было понятно, анонче, однако это не делает твоё решение верным.


Покажи пример инпута, когда моё решение даст неверный ответ, или выйдет за пределы ограничений времени/рам.
534 2549499
>>48949
Покажи препода с истфака который будет твое решение проверять не по методичке
535 2550350
>>49499
Оно хоть условиям удовлетворяет. Твоё улетит за ограничение премени при простой проверке диапазона из задачи
1 1000000000000000000
536 2552847
>>48492
выглядит как какая то хуйня. даже лень разбираться стало
537 2552883
>>50350
Не предусмотрел, действительно.
Даже с 100000000 тайм констрейнт похерен в двадцать раз. А как сам препод отреагирует на твоё решение, как думаешь?
>>52847
В чем разбираться? Для экономии времени заранее создан лист с элементами 0 в диапазоне принимающих функцией чисел (т.к. создание списка в цикле занимает в полтора раза больше времени), через цикл фор проверяется условие, при выполнении которого возвращается элемент из листа, который больше нуля (2/1 == 1), т.е. первый и единственный.
538 2552929
>>52883

> заранее создан лист с элементами


И нахрена?
Если потом выбрасываешь оттуда всё кроме одного значения?
Тред утонул или удален.
Это копия, сохраненная 6 февраля 2023 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски