Сохранен 538
https://2ch.hk/pr/res/2527453.html
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Питон тред №151 /python/

 Аноним 30/11/22 Срд 20:15:24 #1 №2527453 
Ri74JUp.jpg
py40.mp4
Тред, посвящённый языку программирования Питон, #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
Аноним 01/12/22 Чтв 02:19:30 #2 №2527620 
Я очень люблю отвечать на вопросы ньюфагов по коду.
Это и самому позволяет лучше разобраться, иногда затрагивает сторонние для меня темы, или там могут быть вопросы, которые логичны, но которые я сам себе не задавал почему-то.
Аноним 01/12/22 Чтв 02:23:12 #3 №2527622 
Но только когда это вопросы по коду, а не "зачем нужны классы?".

Функции это инструмент, классы инструмент и питон — тоже инструмент. Инструменты бывают производительнее, понятнее, безопаснее или удобнее, и всё, никакого высшего смысла использовать одно вместо другого. Используешь по своим нуждам. И придётся ориентироваться на инструменты которые используют другие, если хочешь вместе с кем-то код писать и не быть белой вороной, да, что опять же вопрос нужд. А смысл — это человеческая абстракция мышления, артефакт работы мышления. Его нет ни в классах, ни в жизни.
Аноним 01/12/22 Чтв 03:25:14 #4 №2527629 
>>2527453 (OP)

что несёт дебил блять. если питон 4 не будет вводить ничего в сам язык, нахуя ему версию менять? остатки питона второго додавили, скучно стало?
Аноним 01/12/22 Чтв 03:58:16 #5 №2527639 
>>2527620
Ответишь на мои?
Аноним 01/12/22 Чтв 04:15:12 #6 №2527640 
>>2527639
Постараюсь. Если напишешь вопросы тут или напишешь мне на дискорд. Я правда не знаю как запостить, так как меня банили за айдишник тут.
Аноним 01/12/22 Чтв 07:24:54 #7 №2527673 
>>2527620
Если вычесть джуновы вакансии датасаенса и мл, сколько останется бэкенд вакансий? Будет ли тогда в питон вкатиться все еще легче, чем в джаву? А за пределами рф?
Аноним 01/12/22 Чтв 08:54:49 #8 №2527693 
>>2527673
Когда ты вкатываешься в бэкенд, ты вкатываешься именно в бэкенд, а не питон. Основной объём знаний соответствующий

Вкатиться сложно, бэкенд вакансий мало, вне джанго-стека. Особенно джун-вакансий.
Аноним 01/12/22 Чтв 09:56:39 #9 №2527718 
>>2527453 (OP)
Если не будет ничего нового, то зачем тогда выпускать 4,0? А? А? А?
Аноним 01/12/22 Чтв 11:37:47 #10 №2527776 
год опыта в резюме рисовать при том что без опыта на коммерческих норм тема? 100+ откликов, ниразу даже тестовое не выслали не говоря о собесах
Аноним 01/12/22 Чтв 12:48:39 #11 №2527815 
>>2527776
Это тред про устройство на работу? Ты отклики тоже на должности химиков и юристов кидаешь?
Аноним 01/12/22 Чтв 12:50:43 #12 №2527817 
>>2527776
Рисовать можешь любой. На техсобесе синьор-помидор, если не на отъебись набирает народ, чтоб закрыть просто ваклуху, наводящими вопросами это прочухает.
Аноним 01/12/22 Чтв 15:59:56 #13 №2528017 
>>2527776
Пздц, а мне тестовое раза 3-4 присылали, но я каждый раз сливался
Аноним 01/12/22 Чтв 16:12:12 #14 №2528038 
Есть простой вопрос
Нужно сделать эндпоинт только для одной цели - принимать здоровенный, в несколько гб пост с джейсоном и писать его на диск, и создавать событие по окончанию записи
Соответственно это говно должно быть асинхронным и а дальнейшем расширяемым до авторизации и тд.
Стоит ли смотреть на фласк или накорячить на http.server? или может aiohttp?
Аноним 01/12/22 Чтв 17:12:35 #15 №2528138 
Почему Гвидо не завезет JIT с пистон? Без JIT-а мы же сосем писю по хардкору. PyPy имеет JIT, но новые фичи туда не скоро залетают а какие-то либы не совместимы
Аноним 01/12/22 Чтв 19:32:59 #16 №2528308 
Яндексоиды предлагают реализовать алгоритм бинарного поиска от 0 до 1000 и в качестве примера дают следующее:

500
Меньше
250
Меньше
125
Меньше
63
Больше
94
Больше
109
Больше
117
Больше
121
Больше
123
Угадал!
Аноним 01/12/22 Чтв 19:38:03 #17 №2528311 
11111.jpg
>>2528308
Ебал в рот тупой спам-лист
Аноним 01/12/22 Чтв 20:17:18 #18 №2528344 
изображение.png
>>2528308
И даже правило про округление до чётного не применить.
Может быть на глаз кто-то написал. Да и что меняется то, суть то та же? Или хочешь прям такие же значения получить? Ну держи, вот, это всегда пожалуйста. Применяя правила округления к (n1+n2)/2 или к (n2-n1)/2 можно получить желаемое.
Аноним 01/12/22 Чтв 20:25:27 #19 №2528356 
Аноны, а сохранилась ли у кого нибудь шапка из старых питон тредов? Годная же инфа была.. В ссылке на старую версию лежит тот текст, который в шапке сейчас
Аноним 01/12/22 Чтв 20:43:56 #20 №2528366 
>>2528344
Спс, попробую. Интересно, они специально так сделали для повышения сложности или им просто пофиг было?

Хотя у них в задании на циклы одним из последним идет какая-то задача на хэш-функции. Может и специально так хитро встраивают неочевидные моменты в простые на первый взгляд задачки.
Аноним 01/12/22 Чтв 21:15:19 #21 №2528388 
Стикер
>>2527622
Вот есть молоток это инструмент. Молоток нужен чтобы забивать гвозди в поверхность, вот есть микроскоп, это инструмент, микроскоп нужен чтобы рассматривать мелкие детали.

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

#---------

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

Вопрос от Жака Фреско. А нахуя нужно два одинаковых инструмента?
Аноним 01/12/22 Чтв 21:50:16 #22 №2528407 
>>2528388
Не так. Функция - это организация кода. Функция сортировки, например.
А класс - организация данных. На вопрос что такое класс сортировки - я смогу только гипотезы примерные выдвинуть, так как не очень ясно что это.

И то же самое в обратную сторону, что такое класс ползунка (который элемент интерфейса) - понятно. А вот что такое функция ползунка я не могу ответить. Будет интересно если ответить сможешь ты.
Аноним 01/12/22 Чтв 22:35:12 #23 №2528437 
>>2528407
Т.е. между классом и функцией можно поставить знак равенства. Суть у них одна и так же только название разное - чтобы человеческие мешки с костями не путались (ООП)
Аноним 01/12/22 Чтв 23:17:39 #24 №2528462 
>>2528437
Ты можешь в классе объявить функцию?
А в функции объявить класс?
мимонепитунист
Аноним 01/12/22 Чтв 23:20:01 #25 №2528463 
>>2528437
> чтобы человеческие мешки с костями не путались
Для нечеловеческих мешков с чипами не существует ни функций ни классов, а только инструкции, которые всё идут-идут и никак не заканчиваются.
Аноним 01/12/22 Чтв 23:46:56 #26 №2528480 
>>2528462
Да.
Аноним 02/12/22 Птн 00:10:01 #27 №2528490 
>>2528437
Ладно, возвращаюсь к своей политике отвечать только по коду.
Приходи когда будет код и не понятно как он работает или работает не совсем правильно, или когда будет не совсем ясно как сделать фича-нейм.
Аноним 02/12/22 Птн 00:17:47 #28 №2528493 
>>2528490
Я с самого начала пытался понять есть ли в "инструменте класс" какие-то фактические отличия от "инструмента функция", но почему-то УЧИТЕЛЯ не могут прямо ответить на этот вопрос: мол так и так, нихуя различий нет, классы нужны только чтобы челики не путались, это функция которая просто называется другим словом.
Вместо этого УЧИТЕЛЯ начинают какую-то ментальную гимнастику, вилять тазом, обтекаемо рассказывать про машину с дверями и прочую хуйню-малафью.

Вот человек хочет понять СУТЬ явления, а она такова что это функция под другим словом. ООП? Очень хорошо. очень важно. Но почему просто так и не ответить. Ладно, Бог с вами.
Аноним 02/12/22 Птн 00:24:56 #29 №2528495 
>>2528493
>Вместо этого УЧИТЕЛЯ начинают какую-то ментальную гимнастику, вилять тазом, обтекаемо рассказывать про машину с дверями и прочую хуйню-малафью.
Я почитал ваши диалоги. Тебе пытались объяснить абстракцию, через её назначение, через её составные части, и через другие абстракции. К сожалению, я не знаю других способов объяснить абстракцию. Ты знаешь другие способы? Типа, чем лес отличается от рощи?
Аноним 02/12/22 Птн 00:29:56 #30 №2528499 
Сап. Можно где-то почитать про отличия между 2 и 3 версией пайтона? Мне нужно только на уровне синтаксиса, ибо работаю с несколькими примерами кода, которые написаны на разных версиях. И постоянно ловлю синтакс ероры когда пытаюсь перенести код.
Аноним 02/12/22 Птн 00:37:21 #31 №2528506 
>>2528499
https://docs.python.org/3/howto/pyporting.html
Аноним 02/12/22 Птн 02:04:48 #32 №2528530 
>>2528493
Уже 10 раз объяснили чем отличается функция от класса и ты продолжаешь срать про СУТЬ.
СУТЬ в том, что функция берёт ЧТО-ТО, делает что-то (а может и не делать) с этим ЧТО-ТО и возвращает ЧТО-ТО (а может не возвращать), а класс КОНКРЕТИЗИРУЕТ ЭТО ЧТО-ТО, придаёт ему больше смысла ДЛЯ ЧЕЛОВЕКА и даёт ЧЕЛОВЕКУ возможность с этим ЧТО-ТО оперировать не как с ЧТО-ТО, а как с чем-то КОНКРЕТНЫМ.
Аноним 02/12/22 Птн 02:34:18 #33 №2528535 
>>2528530
Как же ты меня вывел, хуесосная пидарасина.

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

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

И вот теперь представь, когда у тебя по диагонали кода гуляют РАЗНОТИПНЫЕ данные.
В первом случае ты на эти данные натравливаешь ФУНКЦИИ и ожидаешь какое-то ПОВЕДЕНИЕ. Тебе надо ВНУТРИ ФУНКЦИИ описывать ПОВЕДЕНИЕ для КАЖДОГО ТИПА.
В втором случае ты ОБОРАЧИВАЕШЬ эти данные КЛАССАМИ, придаёшь им КОНКРЕТНЫЙ ТИП и соответствующее ему ПОВЕДЕНИЕ через методы.
Аноним 02/12/22 Птн 02:36:12 #34 №2528536 
Это >>2528535 было сюда >>2528493 , но я просто уже немного пьян.
Аноним 02/12/22 Птн 03:04:02 #35 №2528542 
>>2528493
>это функция которая просто называется другим словом
Тебе уже приводили примеры, что в разных языках это может работать по-разному.
В жаваскрипте классы это синтаксический сахар над функциями.
В питоне функции и классы это разные типы объектов.
В джаве функции это методы класса Main, т.е. там все функции это методы классов.
В си нет классов, только функции, но есть структуры, которые позволяют эмулировать классы.

В итоге мы получаем, что ни функции ни классы нахуй не нужны, ты можешь сплошняком объявлять по всему коду переменные и делать с ними что хочешь через базовые операторы. Вот только за такой код пизды дают.
Аноним 02/12/22 Птн 03:05:18 #36 №2528543 
изображение.png
>>2528493
Если ты все задачи будешь решать только функциями без использования классов, то в 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 элементов, и всё размещать в нём.
sage[mailto:sage] Аноним 02/12/22 Птн 05:25:47 #37 №2528562 
9140861955df76d5-2245-41c1-8031-07a4da3f313f.jpg
>>2528543
> чтобы сделать калькулятор как пикрелейтед тебе нужно: 30 минут на питоне.
мимовкатун второй час не могущий осилить глава 10 "Введение в инструкции языка Python"
Аноним 02/12/22 Птн 08:01:49 #38 №2528601 
>>2527693
Нет. Если я вкатываюсь в бэкенд на пайтон, то я учу джангу/дрф, если в джаву, то учу спринг.

Зачем искать вакансии вне джанго-стека?
Аноним 02/12/22 Птн 08:22:59 #39 №2528605 
>>2528562
ну тебе год потребовался, чтобы научиться ходить. но не значит что газануть за пивасиком для олдов треда сейчас займёт у тебя больше 5 минут
Аноним 02/12/22 Птн 08:27:44 #40 №2528607 
хз полчаса будут только енв разворачивать и импорты прописывать
джун
Аноним 02/12/22 Птн 08:31:04 #41 №2528610 
Да я примерно же, пытаясь пояснить что это не фигня.
Могу попробовать засечь и со стримом сделать интереса ради вариант на питоне и голом си, думаю близкие числа получатся.
Аноним 02/12/22 Птн 10:38:56 #42 №2528660 
>>2528493
бляядь, да сколько можно одно и то же пережевывать?

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

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

Исходи из этой предпосылки и все в ООП станет на свои места.
Аноним 02/12/22 Птн 10:45:55 #43 №2528667 
>>2528493
в принципе понятно чего ты ждешь:
хочешь чтобы тебе кратеньно выразили СУТЬ как будто внутри этих концепций какая-то великая математическая штука все объясняющая.

Но ее нет!

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

Но ты можешь пока для понимания использовать концепцию "ООП - это ради чужих денег".
Аноним 02/12/22 Птн 12:01:35 #44 №2528741 
Теперь каждый тред будет содержать в себе споры с людьми, которым классы "ненужны", я правильно понимаю?
Аноним 02/12/22 Птн 12:09:14 #45 №2528744 
>>2528741
Нет, только с одним шизиком, который срёт из треда в тред.
Аноним 02/12/22 Птн 13:41:19 #46 №2528808 
>>2528542
>>2528543

Ну в общем-то мое понимание СУТИ после ваших ответов значительно возросло. Кроме того, я не мог оставить без внимания такую километровую стену текста - спасибо за неё, анон. Всё, больше я не буду эту тему поднимать.
Аноним 02/12/22 Птн 15:30:17 #47 №2528891 
DZvMDiZZPk.jpg
Я пишу вот так вот:

from selenium import webdriver
browser = webdriver.Chrome()


с пустым значением вот здесь Chrome() не указывая в скобках путь к вебдрайверу и всё вроде работает.
Ну и нафиг этот путь нужен, если и без него пашет? Или так в новых версиях, а в старых не работало?
Аноним 02/12/22 Птн 15:30:53 #48 №2528892 
Ребята, появился следующий вопрос:
есть python модуль расчета некоторых параметров (токи короткого замыкания) по введенным исходным данным. Ввод/вывод ведется через консоль. Есть идеи прикрутить к этому всему графический интерфейс для повышения удобства. Вопрос: какую GUI библиотеку лучше использовать?
Код: https://github.com/aspirmk/mrtkz
мой уровень знания питона: 0
Аноним 02/12/22 Птн 15:40:56 #49 №2528899 
>>2528891
Если он рядом со скриптом или по path, то можно без него, если где-то в жопе, то надо указывать, очевидно же.
Аноним 02/12/22 Птн 15:41:49 #50 №2528901 
>>2528892
pyguizero

а зачем ты в каждом репозитарии пишешь "модуль расчета хуитки" ? Никто эти модули импортировать никогда в свои программы не будет
Аноним 02/12/22 Птн 15:44:37 #51 №2528903 
>>2528901
Разработчик: Сычев В.С.
Аноним 02/12/22 Птн 17:02:32 #52 №2528992 
user input.png
Петян, есть несколько опций, из которых пользователь должен в консоли выбрать одну или несколько. Подскажи какой TUI либой обмазаться, чтоб за часик реализовать такой функционал.
Аноним 02/12/22 Птн 17:05:43 #53 №2528997 
>>2528388
ну и чем ты будешь забивать очень маленькие гвозди, умник?
Аноним 02/12/22 Птн 17:42:37 #54 №2529030 
ООП.mp4
>>2528493
Аноним 02/12/22 Птн 17:45:10 #55 №2529032 
download.png
>>2528997
Твоим хуем.
Аноним 02/12/22 Птн 18:46:14 #56 №2529067 
>>2529032
с чего ты взял, что у меня есть лишний хуй для тебя?
Аноним 02/12/22 Птн 19:29:10 #57 №2529104 
>>2528992
сам спросил, сам нашёл:
https://github.com/sebageek/clintermission

всем спасибо.
Аноним 02/12/22 Птн 23:39:03 #58 №2529291 
image.png
https://youtu.be/4D5RN2yKlG4

Блять, вот был бы такой же урок, но на нормальном английском, просто невыносимо слушать этот индийский бубнеж
Аноним 02/12/22 Птн 23:46:49 #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)
Аноним 02/12/22 Птн 23:55:39 #60 №2529307 
изображение.png
изображение.png
>>2529298
Ты прикалываешься, да?
Ты мог бы три слова написать в поисковик (или в документацию Pillow, даже просто мышку на функцию навести), и найти решение.
https://stackoverflow.com/questions/2726171/how-to-change-font-size-using-the-python-imagedraw-library
Аноним 02/12/22 Птн 23:57:15 #61 №2529308 
>>2529307
я новичок(
Аноним 03/12/22 Суб 00:03:38 #62 №2529310 
>>2529298
>img.save('nazi_nigger1.jpg')

дац ма бой
Аноним 03/12/22 Суб 00:08:09 #63 №2529311 
>>2529307
>>2529310
Я поменял код но мне выдает ошибку 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)
Аноним 03/12/22 Суб 00:29:27 #64 №2529324 
>>2529311
>draw.text((450, 750), str(message.text),font = font, (255, 255, 255))
Ты не можешь сначала указать параметр со знаком равенства, а потом указать без равенства. Именованные параметры неупорядочнены, оно не понимает какой параметр равен твоим (255, 255, 255). И это тоже должно гуглиться в первом ответе, если скопируешь туда ошибку.
Аноним 03/12/22 Суб 02:52:45 #65 №2529350 
>>2527640
Тут банят за это?
Можешь, пожалуйста, тогда добавить меня? industrial#0468
Аноним 03/12/22 Суб 06:43:20 #66 №2529382 
>>2528493
Один из отцов основателей ООП, создатель языка Smalltalk, Alan Kay писал, что в ООП главное не объекты, а сообщения.

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

https://pythontutor.com/visualize.html#mode=edit
Аноним 03/12/22 Суб 11:25:11 #69 №2529487 
>>2529382
Я мимо шел, но ты подменяешь понятия. Организация нескольких функций в единое нечто не эквивалентно классу в ООП смысле, это скорее обычный модуль. Класс от модуля отличается тем, что модуль - всегда синглтон, а класс, как правило, нужно инстанциировать
Аноним 03/12/22 Суб 12:08:19 #70 №2529563 
>>2529461
в списке есть повторяющиеся числа
a.index(minim) возвращает индекс первого minim
а тебе надо того который сидит на i+j+1
Аноним 03/12/22 Суб 12:47:41 #71 №2529616 
>>2529485
Проверял пошагово. В конце кода числа просто не меняются местами
Аноним 03/12/22 Суб 12:48:22 #72 №2529617 
>>2529563
Хм.. не думал в эту сторону. Спасибо, буду пробовать переделывать
Аноним 03/12/22 Суб 13:10:29 #73 №2529627 
ясмог.png
>>2528562
Аноним 03/12/22 Суб 13:30:11 #74 №2529642 
>>2528562
А предыдущие 9 глав это что??
Аноним 03/12/22 Суб 17:39:09 #75 №2529852 
>>2529642
Введение и типы наверное.
Аноним 03/12/22 Суб 19:21:24 #76 №2529921 
>>2529627
Молодец котенька!
Аноним 03/12/22 Суб 20:17:03 #77 №2529970 
python педрильское дерьмо, ни на что не годное, к тому же- платформо-зависимое.
Нормальных либ нет, только прокидывания к C,C++ либам, в основном- старым как говно мамонта, естественно, с кучей дыр и уязвимостей. Только конченные кретины юзают ёбаный петухон в проде.
Годится только как школьный язык для обучения, да и то, в спецшколе для даунов.
Аноним 03/12/22 Суб 23:02:17 #78 №2530064 
>>2529970
Ясно.
Аноним 04/12/22 Вск 01:40:50 #79 №2530148 
>>2528892
для такого лучше всего tkinter использовать
Аноним 04/12/22 Вск 02:45:31 #80 №2530168 
>>2528903
Разработчик: Ерохин Чедислав

5к звёзд, во всех awesome-raschyoti листах, на первых позициях подборок на гитхабе, все импортируют его модули даже когда они не нужны в проекте, из гугла и амазона звонят благодарят за отличный модуль
Аноним 04/12/22 Вск 02:58:14 #81 №2530172 
>>2529642
>А предыдущие 9 глав это что??

0. ПРЕДИСЛОВИЕ ОТ АВТОРА
1. КРАТКАЯ ИСТОРИЯ ЧЕЛОВЕЧЕСТВА
2. ЧТО ТАКОЕ КОМПЬЮТЕР
3. ЧТО ТАКОЕ ПРОГРАММИРОВАНИЕ
4. ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ
5. ЯЗЫКИ ПРОГРАММИРОВАНИЯ: КАКИЕ ОНИ БЫВАЮТ
6. ТИПИЗАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
7. ДИНАМИЧЕСКИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ
8. ИСТОРИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ PYTHON
9. УСТАНОВКА ИНТЕРПРЕТАТОРА PYTHON В ОС WINDOWS VISTA
sage[mailto:sage] Аноним 04/12/22 Вск 04:29:22 #82 №2530202 
>>2529642
>На слуху чаще всего Лутц, но там очень много воды

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

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

>>2528605
да что там пиво, я бы отсосал олдфагам треда, если бы от этого непотребства хоть как-то процесс ускорился. но увы.. поэтому пролетел ты с пивком.
Аноним 04/12/22 Вск 04:33:23 #83 №2530203 
>>2530202
Лутц устаревший. Уперся дид и не хочет апдейт выпускать.
Может не смог уже в асинк, лол.
sage[mailto:sage] Аноним 04/12/22 Вск 04:37:22 #84 №2530204 
>>2530203
ну основы-то не изменились, наверное. а мне пока фундамент надо заливать качественный. нюансы потом можно добить отдельно, если нужны будут.
Аноним 04/12/22 Вск 12:46:44 #85 №2530418 
>>2527453 (OP)
Всем привет, нужна помощь по джанге, если вам не сложно.

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

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

Можно ли заблокировать использование логина без переопределения dispatch?
Пробовал через переопределение initial. в лог пишет, однако редиректа не происходит.
Аноним 04/12/22 Вск 12:49:44 #86 №2530423 
>>2530172
Госпаде, и ведь кто-то же такое читает...
Аноним 04/12/22 Вск 12:55:09 #87 №2530434 
>>2528344
Нихуя ты f завернул в f, затейник.
Аноним 04/12/22 Вск 13:08:24 #88 №2530443 
>>2530418
Почитал документацию, добавил

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 лучшим вариантом перенаправления, если айпишник превысил количество неправильных вводов? Есть какие-то "бестпрактис"?
Аноним 04/12/22 Вск 13:12:20 #89 №2530449 
>>2529970
Питон лучший
Аноним 04/12/22 Вск 13:19:57 #90 №2530456 
>>2530449
нет, питон даже не язык, а интерпретатор строк.
Без либ- он ничего не может.
А либы к питону пишут на Си.
Аноним 04/12/22 Вск 13:26:58 #91 №2530465 
>>2530456
А Си типа в вакууме висит или как?
Аноним 04/12/22 Вск 13:41:13 #92 №2530476 
>>2530465
Си- полноценный язык, к нему в каждой ОС есть abi, который позволяет писать программы настоящие, то есть бинарники под системы. 99% полезных программ написаны на Си.
Даже без всяких либ, из Си можно дергать системные api.
Аноним 04/12/22 Вск 13:50:38 #93 №2530485 
>>2530476
Так что ты в треде забыл, байтоёб? Написал уже свой велосипед компилятор? Нет? Ну тогда бегом писать. Думаешь всем не похуй, что питухон обёртка над СИ? Если мне надо будет какую-то числодробилку добавить, я возьму с so напишу библу на C/C++ и вызову из питона, либо сделаю на pypy. Но лучше после питона пойду гошечку попинаю, а после неё раст, а твоя учесть за границы массива не вылезать.
Аноним 04/12/22 Вск 14:28:21 #94 №2530517 
>>2530476
Веб, нейронки, визуализацию данных для ученых тоже на Си предлагаешь писать?

Тебе сколько лет, малыш? Тебя не учили в детстве, что разные инструменты - для разных целей?
Аноним 04/12/22 Вск 19:48:17 #95 №2530865 
>>2530517
Возможно этот чел не знает си. Обычно сикрикуны ничего на нем не написали, а просто вычитали что на нем можно делоть низкоуровневые брутальные вещи и что си это как скальпель хирурга для тонких и элегантных решений. Обычный сикрикун
Аноним 04/12/22 Вск 20:12:54 #96 №2530881 
>>2530865
Типичная пидораха. На словах знает всё лучше всех, но на деле взял отпуск и уволился 2 недели назад.
Аноним 05/12/22 Пнд 02:36:39 #97 №2531115 
image.png
image.png
Почему вы не напишите простенький скрипт на TensorFlow и не начнете рубить бабло пассивным доходом? Да, 40 рублей за 1000 капч не так много, но если таких сервисов до жопы, бот может разгадывать хоть миллион капчей в сутки.
Аноним 05/12/22 Пнд 10:09:59 #98 №2531221 
>>2531115
Там есть штрафы за снижение точности распознавания? Антифрод на сайте, не позволяющий так просто подключить бота? Покажи реальные примеры капчей, которые дают разгадывать. Может они намного сложнее, чем показывают в примерах.
Аноним 05/12/22 Пнд 11:52:12 #99 №2531259 
>>2531115
>>2531221
Как я помню про такие сервисы, "работнику" может прилететь любая капча любой сложности хоть цифры их хуев, хоть мегасложная капча с форчонга.
Так что надо натаскать нейронку на все возможные капчи а иначе она будет проебывать постоянно. Натаскать на все капчи в сети - задачка трудная.
Аноним 05/12/22 Пнд 11:59:19 #100 №2531270 
>>2531259
Что если спереди фильтром поставить еще одну нейронку, которая кластеризирует типы капчей, а потом отправляет ее той нейронке, которая с таким типом хорошо справляется?
Аноним 05/12/22 Пнд 12:23:01 #101 №2531307 
>>2531270
Ну для этого, для начала, нужны нейронки кторые все капчи умеют разгадывать т.е. как минимум тренированы на них и тестировались.

Короче владельцы этого сайта могут реализовать такой подход, и для них это бы имело смысл, все популярные капчи отправлять к нн, а новые или спорные варианты капчи отсылать макакам, но Васяну с двача это сделать - собрать все возможные варианты капч, потом нейронки подготовить. Слишком сложно.
Аноним 05/12/22 Пнд 14:39:19 #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 = "[email protected]"
toaddr = "[email protected]"
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()
Аноним 05/12/22 Пнд 15:04:46 #103 №2531538 
>>2528493
>Я с самого начала пытался понять есть ли в "инструменте класс" какие-то фактические отличия от "инструмента функция"
Ты на самом деле задал очень правильный вопрос, анон.

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

В 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) будет по-разному действовать.

Это и есть вся суть ООП - полиморфизм через подмену исполнителя.
Аноним 05/12/22 Пнд 15:10:33 #104 №2531549 
Стоит записываться на skillfactory или подобные какие-то курсы? База у меня уже есть, не знаю просто, что учить дальше. Бабки не жалко, если что.
Аноним 05/12/22 Пнд 15:13:24 #105 №2531555 
>>2529382
>Alan Kay писал, что в ООП главное не объекты, а сообщения
Это ООП по Алану Кею, исходное, расово верное и правильное. Три кита ООП - это инкапсуляция + отправка сообщений + динамическая диспетчеризация получателем. Последнее означает, что получатель и только получатель решает что делать с сообщением - что отвечать, отвечать ли вообще, и при этом может сменить логику обработки в любой момент как ему будет угодно, то есть это не должно быть детерменировано на этапе компиляции. С этой точки зрения Erlang того же Алана Кея - тру-ООП-язык, общего между ними то, что они не столько языки, сколько среды выполнения по принципу actor-model.

А потом в индустрию пришли джавапидоры и стали называть объектно-ориентированным-программированием кадавра на принципах инкапсуляция + наследование + полиморфизм через подмену исполнителя. А повторяющие это ньюфаги не могут догнать, что наследование противоречит инкапсуляции, и потому должно быть выкинуто нахуй, а полиморфизм бывает ещё и других видов, ну и короче джава-ООП лучше выкинуть на свалку истории и забыть нахуй.
Аноним 05/12/22 Пнд 15:14:54 #106 №2531558 
>>2531549
>что учить дальше
Делай что-нибудь по гайдам с ютуба на джанге или другом фреймворке, хоть на голом пистоне. Твоя цель - научиться делать что-то по плану из головы.
Аноним 05/12/22 Пнд 15:17:46 #107 №2531561 
>>2531555
>лучше выкинуть
Как хорошо что петухов с двача, вместе с Аланом Кеем спросить забыли, что лучше и кого выкидывать. А вещи эволюционируют своим путем и естественным образом принимают более удобную для всех форму.
Аноним 05/12/22 Пнд 15:23:05 #108 №2531572 
>>2531558
Я джанго основы выучил (на уровне сделать несколько страничек с ссылками друг на друга). А вот как углубиться не знаю, как практиковаться, не могу себе сам задачу придумать, поэтому думаю курс какой-нибудь попробовать, пусть за меня цели ставят.
Аноним 05/12/22 Пнд 15:30:48 #109 №2531581 
>>2531561
Мань, ты чего так надорвался? На собесе по губам поводили?
Аноним 05/12/22 Пнд 15:31:24 #110 №2531583 
>>2531572
Имиджборду напиши
Аноним 05/12/22 Пнд 15:49:32 #111 №2531609 
>>2531489
>socket.gaierror: [Errno -2] Name or service not known
>host smtp.proton.me
>Host smtp.proton.me not found: 3(NXDOMAIN)
мы, блядь, должны за тебя переводить с английского что ли?
Аноним 05/12/22 Пнд 16:02:17 #112 №2531621 
>>2531489
>Name or service not known
у тебя днс резолвер не может зарезолвить smtp.proton.me
Аноним 05/12/22 Пнд 18:55:58 #113 №2531875 
png-clipart-emoji-sticker-thought-computer-icons-emoji-smiley-sticker.png
лол, пайдата в ереване проходит
https://www.youtube.com/watch?v=IRr3gx71rnk
Кто ж знал в начале года, что Армения теперь один из центров IT
Аноним 05/12/22 Пнд 22:05:36 #114 №2532115 
>>2531538
>Как мы знаем, monkey.eat(banana) может быть заменено на eat(&mut monkey, banana) без потери смысла.
Смысл не теряется, но наступает конфликт имён, например
monkey.eat(banana)
insect.eat(banana)

То есть ты не можешь использовать простые названия для функций, иначе будут конфликты. Из-за этого приходится делать замысловатые названия, как это в си принято
Аноним 05/12/22 Пнд 22:42:05 #115 №2532163 
>>2531875
это временно.
Аноним 06/12/22 Втр 00:52:24 #116 №2532338 
>>2532115
>наступает конфликт имён
Раскидай по неймспейсам.
Или назови по-разному. Никто не заставляет тебя называть их одинаково. Ты же не называешь все функции в коде foo чтобы потом ебаться с этой проблемой. В ООП методы родственных объектов называются одинаково для задач полиморфизма. Но вне ООП этого требования нет, там полиморфизм делается по-другому.
Аноним 06/12/22 Втр 02:06:56 #117 №2532361 
>>2530865
>можно делоть
всё можно делать, а питухон не нужен вообще, это дерьмо для дибилов которым сложна писать программы больше 1к строк. Ничего годного на питухоне нет и не было, только лишь скриптовая обвязка для других либ на других языках, и питон даже не скриптовый язык, а интерпретатор строк, глубоко ущербный с самого начала, там даже типизации нет нормальной.
Аноним 06/12/22 Втр 02:15:46 #118 №2532365 
>>2531555
хотя и трипл, ну и зелень просто. Самая годная реализация сообщений между объектами это интерфейсы в Java, недооцененная и мощная парадигма, сколько ни читал статей смузипидаров, про это вообще не очень любят бухтеть, больше гавно какое то обсуждают типа mvc с внедрением зависимостей.
Раньше говорили всё есть обьект, а нужно- всё есть интерфейс. Интерфейс между обьектами. Круче этого ничего невозможно придумать, на интерфейсах можно сколько угодно сложную систему построить, нужно лишь спеки правильно писать по интерфейсам, а остальная архитектура- становится прозрачной.
Аноним 06/12/22 Втр 07:10:16 #119 №2532420 
ебать.png
>>2532361
причина бабаха?
Аноним 06/12/22 Втр 11:16:22 #120 №2532524 
>>2532365
>Самая годная реализация сообщений между объектами это интерфейсы в Java
кинь пример, заценим
Аноним 06/12/22 Втр 17:45:24 #121 №2532931 
>>2532848
Саблайм лох
Аноним 06/12/22 Втр 18:44:53 #122 №2533027 
Пытаюсь сделать DFS в питоне, проблема в том что у меня слишком много vertices в графе от того если использовать классическую рекурсивную реализацию DFS, функция крашится с RecursionError: maximum recursion depth exceeded. Пробовал изменить лимит рекурсии, тогда уже сам питон крашится. Можно ли как-то это пофиксить? Слышал есть какой-то вариант через объект итератор и стаки это сделать?
Аноним 06/12/22 Втр 18:58:28 #123 №2533045 
>>2533027
Динамическое программирование.
Аноним 06/12/22 Втр 19:45:52 #124 №2533108 
>>2533027
Храни вершины в стеке и делай цикл: пока стек не пуст, взял вершину, добавил в стек её соседей.
Аноним 06/12/22 Втр 21:43:23 #125 №2533191 
Сап питонач. В вебе не силён, нужен стратегический совет. Перепиливаю мелкосервис на джанге, в котором 1,5 пользователя будут вбивать/изменять данные клиентов. Как лучше избегать race condition, учитывая, что там параметров у каждого клиента дохуища? В документации рекомендуется пердолить F(), но учитывая наличие 1,5 юзера не легче сделать возможной только 1 активную сессию записи в БД?
Аноним 06/12/22 Втр 23:03:13 #126 №2533303 
>>2533191
самое базовое: при отправке данных отправлять также и дату последнего изменения объекта, если дата изменения объекта и дата изменения в отправленных данных не совпадают - бросай ошибку. на фронте можешь реализовать любую логику от простой ошибки, до получения актуальной копии, патча изменениями и т.д. главное помни - явное лучше неявного
Аноним 07/12/22 Срд 00:36:57 #127 №2533390 
>>2533191
select for update
Аноним 07/12/22 Срд 05:03:36 #128 №2533441 
>>2533027
stack = [root]
while stack:
node = stack.pop()
print(node)
stack.extend(reversed(node.children))
sage[mailto:sage] Аноним 07/12/22 Срд 11:41:39 #129 №2533603 
>>2533390
> select_for_update
> Returns a queryset that will lock rows until the end of the transaction
и как это помогает?
Аноним 07/12/22 Срд 12:11:27 #130 №2533656 
>>2533303
Спасибо. Так и сделаю.
Аноним 07/12/22 Срд 12:46:47 #131 №2533726 
>>2533191
Тебе тут в целом неплохой вриант советуют. Но правильней всего отслеживать не по дате, а по хешу. Т.е. каждую запись (строку?) ты хешируешь hash() и полученное значение передаешь в html форму как hidden поле.

Когда пользователь изменяет запись и сабмитит форму, то вместе с его изменениями сабмититься хеш старой записи. На сервере при обработке запроса ты сравниваешь хеш сабмитнутый с хешем записи в БД. Если совпали - можно апдейтить данные. Если отличаются, нужно показать пользователю ошибку "данные были изменены до вас".
sage[mailto:sage] Аноним 07/12/22 Срд 12:53:39 #132 №2533736 
>>2533726
тогда уж просто рандомный uuid4 хранить и обновлять его при записи. точность tz.now до микросекунд, так что шанс выстрела гонки емеется только в теории
Аноним 07/12/22 Срд 13:06:18 #133 №2533759 
>>2533736
Нет ничего лучше хеша данных. И вот почему. Допустим Алиса открыла запись чтобы редактировать, но пошла посрать. За это время пользователь Боб тоже быстренько откроет данную запись у себя, изменит и сохранит. Потом передумает и изменит назад на предыдущие данные. А затем из сортира придет Алиса и может продолжить

Пока ТП срала, запись изменилась 2 раза, но данные у неё остаются актуальными, совпадающими с БД. Сравнение по хешу это учтёт, она сохранит свою правку без ошибки. А в случае с uuid или отслеживанием времени, Алиса получит ошибку и справедливо возмутиться: "какого хуя? Нихуя не изменилось, красноглазики тупые нахуевертили."
Аноним 07/12/22 Срд 15:44:42 #134 №2533870 
>>2533191
crdt
Аноним 07/12/22 Срд 17:47:33 #135 №2534048 
>>2533603
Не совсем правильно понял проблему, перечитал еше раз, зачем вам нужна метка времени или хеш? Можно просто поле version завести
Аноним 07/12/22 Срд 17:48:41 #136 №2534051 
>>2533759
Тут уже надо контрольную сумму полей считать
Аноним 07/12/22 Срд 23:32:17 #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
Аноним 07/12/22 Срд 23:38:35 #138 №2534515 
>>2534510
https://ideone.com/W5Fdeu
Аноним 07/12/22 Срд 23:39:53 #139 №2534517 
>>2534510
class C:
__num=0

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

____return num


a = C()
b = C()
Аноним 07/12/22 Срд 23:41:12 #140 №2534520 
>>2534517
То же самое, что и у анона выше, но раз уж начал печатать.
sage[mailto:sage] Аноним 07/12/22 Срд 23:47:04 #141 №2534526 
>>2533191
решений тебе накидали. хочу лишь упомянуть 2 принципа, которые почтивсегда нужно держать в голове: YAGNI и KISS

удачи в борьбе со сложностью анон!
Аноним 08/12/22 Чтв 00:55:17 #142 №2534587 
image.png
Вторая функция будет работать быстрее или то же самое?
Аноним 08/12/22 Чтв 01:22:33 #143 №2534628 
Screenshot20221208-011727.png
>>2534587
немного быстрее

> %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)
Аноним 08/12/22 Чтв 01:53:53 #144 №2534638 
>>2534628
Спасибо!
Аноним 08/12/22 Чтв 04:53:32 #145 №2534676 
image.png
Пикрыл работает только если элемент множества 1 в 1 совпадает с элементом другого множества, а мне надо если substring, т.е. оператор "in" а не "==". Короче надо чтоб пикрыл выдал 2, а не 0.
Есть варианты, кроме итерирования по каждому отдельному слову?
Аноним 08/12/22 Чтв 04:54:21 #146 №2534677 
>>2534676
>чтоб пикрыл выдал 2, а не 0
Точнее 1, а не 2.
Аноним 08/12/22 Чтв 05:04:14 #147 №2534680 
>>2534676
>Есть варианты, кроме итерирования по каждому отдельному слову?
Только ещё более сложные.
Аноним 08/12/22 Чтв 05:23:37 #148 №2534684 
>>2534676
.issubset
или
<=
Аноним 08/12/22 Чтв 05:38:26 #149 №2534686 
image.png
image.png
>>2534684
Не, это мне никак не поможет.
>>2534680
Понял, спасибо.
опрос Аноним 08/12/22 Чтв 05:48:15 #150 №2534689 
15861909375820.jpg
для чего ВЫ используете async и await?
Аноним 08/12/22 Чтв 09:20:41 #151 №2534744 
>>2527453 (OP)
Анон, коплю деньги чтобы войтивайти купив онлайн-курсы по питону, а как мне вообще понять нормальные это курсы или нет? Заметил что сейчас везде рекламы курсов тестеров, С++, питона, но чуется мне что это хуита и развод на деньги.
Так вот, как определить что курс покупаешь нормальный?
Аноним 08/12/22 Чтв 09:25:20 #152 №2534745 
>>2534744
Я хуею, как инфоцыганье всё же успешно косит бабло.
Каждый второй долбоёб покупает какое-то говно. Всё есть в открытом доступе, есть спижженное платное, ничем не лучше бесплатного, но нет, надо копить блять и нести им.
Или ты думаешь, что если въебешь деньги ни за что, то будет мотивация дополнительная? Нет, не будет.
Аноним 08/12/22 Чтв 09:34:09 #153 №2534750 
>>2534745
мне кажется это тролль
Аноним 08/12/22 Чтв 09:36:56 #154 №2534753 
>>2534750
Просто пошли совсем нулёвые из лесу, раньше вкатуны хоть что-то соображали изначально, а теперь вот куча рекламы и вот он здесь.
Аноним 08/12/22 Чтв 09:46:35 #155 №2534761 
>>2534745
Ну то есть по сути ответа на мой вопрос здесь не будет, будет кукареку от местной ебанашки с переизбытком времени. Понял.
Аноним 08/12/22 Чтв 09:49:36 #156 №2534765 
>>2534761
Да, уебывай копить дальше, где только время берешь на вопросы.
Аноним 08/12/22 Чтв 09:50:49 #157 №2534766 
>>2534765
Там же где и ты визжать и хлопать крыльями в рабочее время, лел.
Аноним 08/12/22 Чтв 09:59:44 #158 №2534770 
>>2534745
>то будет мотивация дополнительная?
Неиронично да. Помню абонемент в зал подарили и меня бы жаба задушила, если б я все 15 раз не отходил.
Аноним 08/12/22 Чтв 10:03:40 #159 №2534773 
>>2534766
Ну посмотришь сам, хули спорить с тобой.
>>2534770
Обычно всякие абонементы и прочие велотренажеры купленные с такой целью так и валяются. Наверное, у тебя повышенная жадность, лол.
Аноним 08/12/22 Чтв 10:25:41 #160 №2534783 
image.png
я спарсил ветку комментов и теперь хочу ими управлять в интерактивном окне, в котором они были бы изображены в виде дерева. чтоб можно было взять и например удалить какую-нибудь ветку диалога.
что посоветуете? какой GUI Framework выбрать?
Аноним 08/12/22 Чтв 11:18:46 #161 №2534821 
Почему все погромисты говорят, что в питоне уебищное ООП?
Пытаюсь сейчас разобраться с ООП на примере питона - это хорошая идея или лучше сначала изучить его в языке, где оно реализовано нормально (джава например)?

>>2528535
То есть мы для каждого такого класса описываем подробную инструкцию, как его резать, а потом просто даем команду снаружи всей этой классовой структуры РЕЗАТЬ Х и он будет резать в зависимости от того к какому классу относится Х? Я правильно понял идею?
Аноним 08/12/22 Чтв 11:38:01 #162 №2534855 
У меня глупый вопрос. Кароч хочу запилить бота для себя чтобы чекать инфу через апи и прочее. Кароч, но чет подгоняюсь. Вот я создал бота, он будет паблик или майселф бот онли? Потому что инфа конфидициальная может быт типо проверки счетов и тд. Можно бота как т вынести из паблика, у него же адрес есть будет, нет?
Аноним 08/12/22 Чтв 11:57:34 #163 №2534892 
>>2534821
>говорят, что в питоне уебищное ООП
ООП в принципе уёбищное
[mailto:[email protected]Аноним 08/12/22 Чтв 12:29:10 #164 №2534932 
Посоветуйте норм книги по алгоритмизации , в списке чет найти не могу
Аноним 08/12/22 Чтв 12:34:11 #165 №2534941 
>>2534783
>что посоветуете? какой GUI Framework выбрать?
tkinker

>>2534855
Проверяй в боте, что это именно ты пишешь. По id, емейлу или что там есть, где ты собрался этого бота крутить.
sage[mailto:sage] Аноним 08/12/22 Чтв 13:20:01 #166 №2535024 
>>2527453 (OP)
Не стал изучать этот язык чтсто потому что у них хохлятский флаг в логотипе.

Сажа, скрыл.
Аноним 08/12/22 Чтв 13:26:27 #167 №2535034 
Как сделать словарь который бы как ключи принимал лист или сет? Ну то есть я понимаю что словарь не сделаешь скорее всего, но как такой объект хранить вообще чтобы был легкий индексинг ключей а не через for-loop?
Аноним 08/12/22 Чтв 13:27:35 #168 №2535038 
>>2534932
На амазоне вроде эти две самые популярные :
[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)
Аноним 08/12/22 Чтв 13:32:30 #169 №2535041 
>>2535034
>лист
никак

>или сет
frozenset

>но как такой объект хранить вообще чтобы был легкий индексинг ключей а не через for-loop?
че
конец опроса Аноним 08/12/22 Чтв 13:45:53 #170 №2535050 
>>2534689
я так и думал
Аноним 08/12/22 Чтв 14:07:35 #171 №2535080 
>>2535041
вот такой объект
dct={{1,6}:3,{7,8}:2}

dct[{1,6}] должен давать аутпут 3
Аноним 08/12/22 Чтв 14:10:50 #172 №2535087 
>>2535041
Короче спасибо фрозен сет то что нужно
Аноним 08/12/22 Чтв 14:15:44 #173 №2535098 
>>2534892
Есть такое, но без него сейчас не обойтись же...
Аноним 08/12/22 Чтв 14:18:13 #174 №2535101 
image.png
>>2535080
Фрозен сет, да. Можно тьюплом ещё, если тебя краткость интересует.
Аноним 08/12/22 Чтв 14:39:23 #175 №2535121 
Джава или питон? Вот только давайте без этих ваших кок пок от задач зависит это быстрее то медленнее. Мне, например, для души надо, приложуху какую нибудь набыдлокодить, сайтик, вот это всё

Интересует многозадачность и ваше субъективное мнение.
не вкатывальщик
Аноним 08/12/22 Чтв 14:40:35 #176 №2535122 
>>2535121
>приложуху какую нибудь набыдлокодить, сайтик, вот это всё
Очевидный js.
Аноним 08/12/22 Чтв 14:46:47 #177 №2535136 
>>2535122
Не хочу жс
>Джава или питон
Аноним 08/12/22 Чтв 14:48:13 #178 №2535138 
>>2535136
Тогда питон. Там шаблонизатор для сайтов лучше.
Аноним 08/12/22 Чтв 17:14:43 #179 №2535311 
>>2535138
Окей, а как питон чувствует себя в простых десктопных приложениях?
Аноним 08/12/22 Чтв 17:15:51 #180 №2535312 
>>2535311
Как минимум лучше чем джава
Аноним 08/12/22 Чтв 17:16:52 #181 №2535314 
>>2535312
Типа, давно такая мулька ходит, мол, питон это язык для набросочек, а потом уже перепиливают под нормальный язык.

То есть можно дрочить питон и наслаждаться жизнью?
Аноним 08/12/22 Чтв 17:19:15 #182 №2535316 
>>2535312
АТО мне кажется, что ява поглубже и побазированней. Хочется простой базы. Вот эта вот вся типизация, многопоточность етц.
Года 4 назад уже читал книги по питону, и на каком то моменте начал ощущать свою не полноценность (пошел в интернет литать холивары)
Аноним 08/12/22 Чтв 17:19:35 #183 №2535317 
>>2535316
>литать
листать*
Аноним 08/12/22 Чтв 17:20:08 #184 №2535318 
>>2535314
А зачем тебе перепиливать что-то под джаву?
Аноним 08/12/22 Чтв 17:21:27 #185 №2535320 
>>2535318
Типа, она быстрей и легаси хуегаси. Яж не разбираюсь - в погромировании остановился на пол пути к осилению джанги и всё.
Аноним 08/12/22 Чтв 17:21:29 #186 №2535321 
>>2535316
Хочешь базы и хардкора - учи С++
Джава для твоих задач нахуй не нужна.
Аноним 08/12/22 Чтв 17:22:28 #187 №2535322 
>>2535320
Для твоих целей это всё равно что микроскопом гвозди забивать.
Аноним 08/12/22 Чтв 17:22:58 #188 №2535323 
>>2535321
Но ява легче плюсов и базированней питона (чуть ближе к байтоёбам).
Аноним 08/12/22 Чтв 17:27:29 #189 №2535325 
>>2535322
Я щупал плюсы и яву уже чуть чуть. Плюсы для моих задач действительно не нужны, а вот ява как то получше выглядит, полегче, и опять же база какая никакая.

Просто боюсь, если я потрачу нное время на освоение пистрона, то все равно придется придрачивать к нему какой нибудь жс, базы хуязы, теория алгоритмы байтоёбство.
Не лучше ли сразу с явы начать? Или питон сможет удовлетворить мои маняхотелки?
Аноним 08/12/22 Чтв 17:30:27 #190 №2535326 
>>2535325
Хочешь жаву, бери жаву, зачем ты споришь-то? Мы ж тебя не заставляем.
Аноним 08/12/22 Чтв 17:35:48 #191 №2535332 
>>2535326
Я пока еще не спорил - просто высираю сомнения на основе своих наблюдений. Оче сложно определиться, особенно когда на все твои вопросы отвечают одним предложением про задачи и микроскоп

>Интересует многозадачность и ваше субъективное мнение
Аноним 08/12/22 Чтв 17:40:04 #192 №2535335 
>>2535325
>все равно придется придрачивать к нему какой нибудь жс
К любому языку придётся, потому что это единственный язык браузеров, тебе же сразу сказали.
Аноним 08/12/22 Чтв 17:49:00 #193 №2535341 
>>2535335
Попробую по другому.
Саму суть я понял, ООП освоил, никаких фреймворков не знаю. Хочу двигаться дальше. Пока не знаю куда хочу, типа, десктоп? Веб? Да похуй, просто хочу.
Пистрон очень легкий - я его с нуля без навыков погромирования освоил за 3 недели попутно задев немножечко джанги. Но, поначитавшись разного понял, что питон это просто максимум не база, приуныл, дропнул. Пошел читать яву - перегорел, и, теперь спустя 4 года захотелось поразмять свой стухший мозг, ну и показать всем как я могу, если получится.

Так вот теперь и не пойму, развивать свой питон, или почитать немного какой никакой базы?
Аноним 08/12/22 Чтв 17:55:54 #194 №2535350 
>>2535341
Питон для веба и для десктопа нахуй не нужон. Его можно использовать, но есть более подходящие инструменты.
Он подходит, если у тебя уже есть конкретные задачи и надо их решать. А учить под некую перспективную задачу это хуйня на палке.
Аноним 08/12/22 Чтв 18:04:53 #195 №2535358 
>>2535350
А как же джанго и среднемаленькие проекты? Не все же в сервисы с 2кк посещений в день перерастают? десктопчик тоже разный бывает.
Мне хочется отностельно простой базы. Питон сможет её дать?

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

Хочется объять ВСЁ, и чтоб не было сложно в освоении. Много раз читая книжки по пистрону (ДЛЯ НАЧИНАЮЩИХ) видел типа, вот тут к памяти обращаемся, оно его тут подчистит само а тут мы немного помжем, не спрашивайте как это вам пока знать не нужно. В яве же, в книжках обучающих все поясняется и рассказывается сразу, но сложновато для меня.
Аноним 08/12/22 Чтв 18:14:43 #196 №2535367 
>>2535358
>Мне хочется отностельно простой базы.
C
Аноним 08/12/22 Чтв 18:15:25 #197 №2535368 
>>2535358
> А как же джанго и среднемаленькие проекты? Не все же в сервисы с 2кк посещений в день перерастают?
На нем пишутся прототипы, что быстрее. Если они выстреливают, то дальше переписываются на чистовике чем-то другом или обрастают костылями для ускорения. (то же происходит и с пхп, руби и прочей скриптотой.)
Для базовой алгоритмизации там всё есть, без анальных корчей на каждое нетривиальное действие, хотя многие эти корчи воспринимают как какой-то плюс. Типа вот я в детстве бегал по недостроям и подвалам и вырос человеком, не то что вы, разнеженные зумерки.
Базы нужны, конечно. И нужен юникс, рекомендую тебе как можно скорее лезть в юникс, зная даже его основы ты поймешь, как и почему сделано многое в той же скриптоте, включая питон.
Аноним 08/12/22 Чтв 18:16:34 #198 №2535369 
>>2535367
Вы, программисты реально с годами черствеете в плане резвития, Или сразу такими не гибкими в сферу вкатываетесь? Или я не достаточно четко поясняю про свои хотелки?
Аноним 08/12/22 Чтв 18:19:25 #199 №2535371 
>>2535369
>двач, как мне есть суп, ножом или палочками?
>ложкой
>Вы, программисты реально с годами черствеете в плане резвития, Или сразу такими не гибкими в сферу вкатываетесь? Или я не достаточно четко поясняю про свои хотелки?
Аноним 08/12/22 Чтв 18:22:45 #200 №2535379 
>>2535368
Короче, если выбирать из двух языков по моим хотелкам, то ява. Спасибо анон.

А в юникс я лазил, да. Больше подгонял единственный и не повторимый дебиан под себя трогая всякую фреймовую чушь чтоб как у погромистов. Да, какой то шарм в этом есть, и даже не скучно
Аноним 08/12/22 Чтв 18:25:44 #201 №2535381 
>>2535371
Паттерны свои с микроскопами и прочими НУ ВСЕМ ЖЕ ПОНЯТНО ОДИН ТЫ ВКЛЮЧИТЬ И ВЫКЛЮЧИТЬ НЕ МОЖЕШЬ убери, и поясни нормально.
Я не требую, просто хочется чуточки понимания и немножечко пространных размышлений от анонов о яве и питоне, субъектитвно, без оскорблений.
Аноним 08/12/22 Чтв 18:39:35 #202 №2535402 
>>2534821
Обычное там ООП. Как во всех скриптовых языках. Ну есть некоторое количество довольно странного легаси, например len() это встроенная глобальная функция, а не свойство объекта. Всякие слоты ещё на сишном уровне, которые работают в обход основного механизма ООП, у Армина можешь почитать. А так самое обычное скриптовое ООП из слоёных хэш-таблиц.
Аноним 08/12/22 Чтв 22:32:13 #203 №2535734 
>>2535402
>>2534821
Там в принципе другое ООП, чем в C++/Java. Потому что языки сильно разные
Аноним 08/12/22 Чтв 22:35:08 #204 №2535741 
>>2535358
Питон для веба вполне себе норм

Питон в этом плане это язык бэкенда. Реально в бэкенде у тебя основную нагрузку несут сервисы вроде баз данных и очередей, а язык лишь логику. Для логики питон удобен.
Аноним 09/12/22 Птн 00:43:21 #205 №2535842 
>>2534821
ААП у Пятоне рэалізована дастаткова дасканальна для вывучэньня. Усе асноўныя ўзоры праектаваньня магчыма рэалізаваць. https://refactoring.guru/design-patterns/abstract-factory/python/example
Аноним 09/12/22 Птн 01:02:25 #206 №2535860 
>>2535842
Ху со рта вынь, читать сложно
Аноним 09/12/22 Птн 01:03:12 #207 №2535862 
>>2535734
А ещё 2 + 2 будет 4.
Аноним 09/12/22 Птн 01:55:49 #208 №2535885 
>>2534821
Учитывай что почти все книги про ООП написаны про джаву. Оно там не то чтобы нормально реализовано, скорее там ограничения языка преодолеваются плясками с ООП. Многое оттуда совершенно неактуально в питонах, банально потому что питоны гибче и проще во множестве аспектов.

Понять что такое класс и объект, узнать про базовые фичи ООП, ты сможешь и в питоне. Если хочется стать мастером дрочки паттернов ООП и базвордов, то лучше жава.
Аноним 09/12/22 Птн 02:05:07 #209 №2535888 
>>2535885
И то же самое в с++ (как в питоне) к слову.
В джаве у тебя всё класс, ты не можешь код вне класса написать толком, и привнесение ооп просто вообще везде часто превносит проблем больше, чем пользы, по сравнению с кодом, где ооп - просто синтаксический сахар для структур, без кучи последовательных наследований и кучи тормозных виртуальных методов.
Аноним 09/12/22 Птн 11:07:21 #210 №2536084 
>>2535842
фууу. прекращай свиноязык использовать. либо дуй в /ukr с этим.
Аноним 09/12/22 Птн 11:47:38 #211 №2536125 
>>2536084
имхо это белорусскый. Так что давай, отвечай. Во имя славянской дружбы.
Аноним 09/12/22 Птн 11:57:33 #212 №2536133 
>>2535888
В питоне тоже всё объект, как в жаве. И тоже всё делается тормозными наслоениями. Питон экономит время разработки, а не время выполнения.
Аноним 09/12/22 Птн 12:42:42 #213 №2536163 
image.png
image.png
АААААААААААА Я час сука искал баг, всматривался в каждую строчку, не понимая, где проебался, а оказывается эта тварь какого-то хуя меняет значение переменной, КОТОРУЯ Я ВООБЩЕ НЕ ТРОГАЮ БЛЯТЬ. Я записываю b, а эта сука меняет a. Я СПЕЦИАЛЬНО СДЕЛАЛ КОПИЮ a, ЧТОБЫ ОРИГИНАЛЬНАЯ ПЕРЕМЕННАЯ ОСТАЛАСЬ НЕИЗМЕННА, ПИДОРАСИНА. Что за ебаный пиздец? Какой сын шлюзи это придумал? И это говно именно со словарями, с другим типом данных такой хуйни не происходит, меняется только копия.
Аноним 09/12/22 Птн 12:50:41 #214 №2536173 
>>2536163
b = a не копирует объект, а даёт ему новое имя.
Можешь считать что это vars['b'] = vars['a']
Ну или напечатать id(a), id(b), a is b чтобы увидеть что это тот же объект.
Тебе нужно b = a.copy(), и быть в курсе что есть ещё deepcopy, который клонирует и внутренности.
Аноним 09/12/22 Птн 12:52:26 #215 №2536175 
>>2536163
> оказываетсо эта твагх какава-то хуя меняет знаценне пеґеменной
Мусіш прачытаць пра mutable/immutable.
Аноним 09/12/22 Птн 12:54:44 #216 №2536176 
image.png
image.png
>>2536173
Почему тогда здесь принтит тру, а не фолс, почему принтит 1, а не 2? Схуя словари такие особенные?
Аноним 09/12/22 Птн 12:58:11 #217 №2536180 
>>2536176
Потому что в третьей строке ты имени b присваиваешь новый объект. Объект и переменная это разные вещи. Один и тот же объект может находиться в множестве переменных. К примеру, так происходит передача аргументов в функцию.

b['a'] = ... — это вызов метода объекта b. Сам объект остаётся на месте.
Аноним 09/12/22 Птн 13:00:29 #218 №2536183 
>>2536176
>Схуя словаґы такке особенные?
Таму што слоўнік - mutable, а 1 ці 2 - immutable.
Аноним 09/12/22 Птн 13:00:34 #219 №2536184 
>>2536174
Проверил. Работает .copy()
Зачем дип?
Аноним 09/12/22 Птн 13:02:50 #220 №2536188 
>>2536183
Да не нужно там никакого иммутабле гуглить. Это сработает даже с мутабельными объектами.

a = []
b = a
b = []
assert a is not b
Аноним 09/12/22 Птн 14:40:52 #221 №2536257 
>>2535369
>Или я не достаточно четко поясняю про свои хотелки?
Ты хочешь ВСЁ СРАЗУ
Этому годами учатся
Аноним 09/12/22 Птн 14:53:25 #222 №2536263 
k0p0b3gj.png
with open('text.csv') as f:
mytext = f.read().splitlines()


Почему в ВижиалСтудио это вызывает ошибку:
FileNotFoundError: [Errno 2] No such file or directory: 'text.csv'
А в АЙДЛ или напрямую запуская .py файл всё работает. В ВС работает только если указать прямой путь к файлу, вроде: 'c:/text.csv'
Что за дичь блин, можно как-то пофиксить?
Аноним 09/12/22 Птн 15:17:39 #223 №2536286 
>>2536263
А был бы на линуксе, сразу бы понял.
'text.csv' — это относительный адрес. От считается от текщего "взгляда" программы. Айдл смотрит на папку, где лежит text.csv, соответственно по адресу ТЕКУЩАЯ_ПАПКА\text.csv, он её видит. Вижуал студио смотрит куда-то в другое место, например, свою собственную, и никакого C:\Program Files\Visual Studio\text.csv не видит, поэтому No such file
Аноним 09/12/22 Птн 15:19:21 #224 №2536288 
>>2527453 (OP)
Джангобляди, вот скажите, что с вами не так?
Почему продолжаете использовать этот кусок кала, по недоразумению названный фреймворком?!
Сука, работал над джангопроектом, который до меня накатил такой же чушок как вы. Познакомился с еще одной ахуенной способностью джанги - оказываются опции auto_now и auto_now_add на DateTime колонках в модели действуют только внутри Джанги! То есть блять есди я инсерчу данные через plain sql, то все упадет нахуй из-за null! Потому что все это решает только на уровне самой Джанги
Але, дебилы! Application layer в помине не должен заниматься таким, это задача database layer! Ссать над окаждому на пятак кто продвигает Джангу в 2022+
Аноним 09/12/22 Птн 15:39:19 #225 №2536311 
>>2536286
>А был бы на линуксе, сразу бы понял.
>'text.csv' — это относительный адрес. От считается от текщего "взгляда" программы. Айдл смотрит на папку, где лежит text.csv, соответственно по адресу ТЕКУЩАЯ_ПАПКА\text.csv, он её видит. Вижуал студио смотрит куда-то в другое место, например, свою собственную, и никакого C:\Program Files\Visual Studio\text.csv не видит, поэтому No such file
Эт ясно, а фиксить-то как это в Вижуал Студио, ну это же тупо костыль указывать полный путь к файлу, а потом если что удалять. Бред какой-то.
Должна быть в конфиге какая-то рабочая директория или что-то такое наверное.
Аноним 09/12/22 Птн 15:45:08 #226 №2536320 
>>2536288
Даже в алхимии есть 2 разные опции:
default и server_default, server_default колнтролирует поведение на уровне базы. Но для джангобляди подобный концепт просто непостижим
Аноним 09/12/22 Птн 17:17:18 #227 №2536423 
>>2536311
ну принтани __file__ перед тем как with open делаешь, узнаешь хоть какой там путь

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

> pathlib.Path(__file__).parent / 'test.csv'
Аноним 09/12/22 Птн 18:01:57 #228 №2536471 
>>2536423
--file-- не то, надо os.getcwd()
Аноним 10/12/22 Суб 00:53:20 #229 №2536947 
>>2536288
И зачем тебе понадобилось инсертить в чистом sql? В чём проблема дописать now() в values инсерта? Почему это проблема фреймворка?

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

Ты скозал? Может ещё в хранимки всё приложение перепишешь?
Аноним 10/12/22 Суб 01:03:54 #230 №2536953 
>>2536471
ты как раз про рабочий каталог написал. надо __file__ использлвать. можно константу PROJECT_DIR вынести в какой-нить модуль по типу shared.settings
Аноним 10/12/22 Суб 11:22:54 #231 №2537133 
>>2536947
Потому что помимо джанго-говна у меня есть вызовы:

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

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

Это как бугуртить почему я не могу в block device натолкать данных в обход файлсистемы.
Аноним 10/12/22 Суб 14:16:35 #234 №2537275 
>>2527620
>>2527453 (OP)
Мне нужно создать что-то dict, который при доступе по ключу возвращает не точно его, а похожее (если есть) с некоторым допуском.

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

Я гуглил, но не нашел, есть ли в питоне такой модуль. И если нет, то как мне его написать самому.
Аноним 10/12/22 Суб 14:24:14 #235 №2537284 
>>2537275
Наследуешься от словаря и добавляешь метод yobaget, можно прям __getitem__ переопределить, чтобы как у тебя, но это перебор.
Ну а там какого-то левенштейна захуярить, ну или гугли "нечеткий поиск", способов много.
Аноним 10/12/22 Суб 14:37:54 #236 №2537301 
Парни, что умеет pycharm чего не умеет vs code?
блять [mailto:[email protected]Аноним 10/12/22 Суб 14:58:48 #237 №2537324 
Смотрю плейлист по алгоритмизации от МФТИ (закреп), и сука уже 3 лекцию он пиздит про ебаные системы исчесления , алгебру логики, синтаксис и т д. Где алгоритмы нахой?!?! ОП пофикси тред , убери ссылку на эт хуйню
Аноним 10/12/22 Суб 15:12:09 #238 №2537328 
>>2537284
Проблема в том, что если каждый раз искомый ключ сравнивать с каждым уже имеющимся ключом, используя левенштейна, то это очень медленно. Совсем медленно.
Аноним 10/12/22 Суб 15:16:09 #239 №2537332 
>>2537328
Если у тебя там не что мильйонов ключей, то без синтетических тестов и не заметишь, небось.
Аноним 10/12/22 Суб 15:24:43 #240 №2537339 
>>2537332
К сожалению, заметно без тестов. У меня около 20К ключей, но я даже не могу дождаться завершения работы программы.
Аноним 10/12/22 Суб 15:27:01 #241 №2537342 
>>2537339
А левенштейн на питоне или конпеляный? Думаю, где-то в модулях должен быть.
Аноним 10/12/22 Суб 15:37:23 #242 №2537347 
>>2537342
Левенштейн на питоне, но там заметно, что замедление происходит от того, что каждый ключ сравнивается с искомым. По сути при таком алгоритме смысла в словаре нет, это как list получается.
Тут нужно хеш-функцию словаря патчить, чтобы хеши были триграфами какими-нибудь, например.
Аноним 10/12/22 Суб 16:10:30 #243 №2537390 
394C8D04-CCD6-479E-ACBD-E4632F59B1FF.jpeg
>>2527351 →
Аноним 10/12/22 Суб 16:45:50 #244 №2537430 
>>2537178
>Это как бугуртить почему я не могу в block device натолкать данных в обход файлсистемы.
Но ведь можешь...
тест на ньюфагов Аноним 10/12/22 Суб 17:32:18 #245 №2537470 
Стикер
словари упорядочены или нет?
Аноним 10/12/22 Суб 17:51:31 #246 №2537488 
>>2537390
>print без скобок
двойко дурачек ты?
Аноним 10/12/22 Суб 18:04:05 #247 №2537500 
>>2537470
С какой-то версии по факту да, объявили это фичей в следующей.
Аноним 10/12/22 Суб 18:21:09 #248 №2537522 
>>2537470
>упорядочены
sorted или ordered?
Аноним 10/12/22 Суб 18:30:02 #249 №2537531 
А можно сделать какой-то общий обработчик ошибок для функции.
Например в теле много всего обращаются к сайту, запрашивают разные параметры, какой-то элемент может не загрузится и код просто вываливается с фатал эрор.
Можно не дрочиться всем трай прописывать или WebDriverWait, а просто чтоб функция вернула состояние ошибки и код продолжил работать дальше?

Как-то реально это сделать не прописывая каждой строке отдельный обработчик ошибки?
Аноним 10/12/22 Суб 18:51:25 #250 №2537553 
>>2537470
Сохраняют порядок добавления. Вроде бы начиная с 3.6.
Аноним 10/12/22 Суб 18:58:27 #251 №2537561 
>>2537531
Обработчик ошибки означает что ты обрабатываешь ошибку. Когда ты ошибку возвращаешь как значение, значит ты тоже собираешься её потом обработать. Какой-то вопрос без вопроса.

Если тебе надо чтобы твой говнопарсер пореже падал, то contextlib.suppress.
Аноним 10/12/22 Суб 19:04:16 #252 №2537569 
>>2537561
>Если тебе надо чтобы твой говнопарсер пореже падал
Именно это.
>contextlib.suppress.
Пасиб.
Аноним 10/12/22 Суб 19:38:24 #253 №2537608 
>>2537328
Словарь использует хеш, изменяешь хотя бы бит - и он совсем другой.
А тебе нужно не хеш, а "миниатюру". То есть представь что ты фотографию сжимаешь до 32х24, округляешь все значения яркостей с шагом в 0.1 (в диапазоне от 0 до 1), и уже после этого считаешь хеш.
При смени пары пикселей миниатюра будет такая же. Но если выберешь неправильно функцию получающую миниатюры, то часть ключей сольются. Но в любом случае это будет уже не полный перебор, а перебор только части ключей.

Это алгоритм не для питона, это для компилируемого языка.
Аноним 10/12/22 Суб 20:46:53 #254 №2537644 
>>2537608
>При смени пары пикселей миниатюра будет такая же
не обязательно, всегда будут пары изображений, где в результате изменения одного бита миниатюры в итоге будут разными

Впрочем к исходному вопросу это отношения не имеет
Аноним 10/12/22 Суб 21:00:11 #255 №2537649 
>>2537324
>ОП пофикси тред , убери ссылку на эт хуйню
Да его сложнее чем Лутца выпилить. Вроде все понимают, что "не то", но он уже настолько расхайпован, что сложно чего-то ещё предложить взамен
Аноним 11/12/22 Вск 00:07:24 #256 №2537740 
>>2537275
Ёсьць зусім іншае рашэньне адпаведнае твайму прыкладу: soundex ці metaphone. Стварае індэкс для словаў па гучаньню.

https://pypi.org/project/ru-soundex/
https://pypi.org/project/fonetika/
Аноним 11/12/22 Вск 01:04:30 #257 №2537758 
>>2537740
> ньн
Эту хуйню же большевики ещё отменили? Змагар-реконструктор, пиздос.
Аноним 11/12/22 Вск 01:52:12 #258 №2537773 
>>2536125
тебя никто не понял что ты там написал.
Аноним 11/12/22 Вск 02:41:56 #259 №2537785 
Возможно ли распараллелить запись в один файл так, чтобы не случилось недетерминистичного говна когда два процесса "перебивают" друг друга и получается каша из байтов? Не бейте за тупой вопрос, я впервые занимаюсь параллелизацией, посадили перекатывать скрипт который обрабатывал, условно, миллион документов в сутки чтобы он обрабатывал двадцать.
(на практике я почти точно раздам потокам по своему файлу и потом сведу в один, но мне любопытно)
Аноним 11/12/22 Вск 02:46:24 #260 №2537786 
У меня есть огромная пачка скриптов, написанная людьми которым скорость написания и "работает же" была сильно важней хороших практик (читай - датааналитиками). Начальство просит свести это всё в нормальную репу.
Как мне быстрее всего слепить requirements.txt из этого? Пока что самое умное что я придумал - поставить голый венв, автоматически установить всё что там есть, и сгенерить рекваерментс ИДЕшкой).
Аноним 11/12/22 Вск 03:34:43 #261 №2537800 
>>2537785
Калі файл адкрыеш для запісу, сістэма блякуе ягонае адкрыццё ў іншай плыні. Гэта выключае канфлікт кшталту мешанкі байтаў.

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

>>2537758
Бальшавікам далі па пысе імбрыкам і адмянілі іх.
Аноним 11/12/22 Вск 05:48:47 #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"
Аноним 11/12/22 Вск 06:16:01 #263 №2537833 
>>2537826
Почему в одном месте response_dict а в другом response.dict ?
Аноним 11/12/22 Вск 06:24:39 #264 №2537835 
>>2537785
Мне кажется что возможно, если ты сначала создаешь файл из нулей, например 8 гигабайт размером, и потом каждый процессс пишет строго в свой гигабайт. Но результат будет зависеть от того какая ОС и какая файловая система.
Аноним 11/12/22 Вск 08:23:18 #265 №2537848 
>>2537785
Скорее нет, чем да. Скажем так, чтобы была одновременная запись сделать можно, но чтобы всё гарантированно работало - я не уверен.

Сделай один процесс с открытым файлом, которому другие процессы передают куски на запись и делают запросы на чтение. Файл всё-равно в скорость работы накопителя упирается, и записывая из двух процессов ты ничего кроме потенциальной ненадёжности кода не получаешь. А с одним процессом, который будет держать в себе очередь правок и запросов на чтение точно будет работать в любой нормальной ос и не вызовет никаких ошибок.
Аноним 11/12/22 Вск 10:01:02 #266 №2537870 
>>2537470
разумеется, словари упорядочены. все тру олды треда знают, что это так
Аноним 11/12/22 Вск 10:02:46 #267 №2537871 
>>2537488
вероятно, этот косяк венды был описан в 2002 году, и до сих пор актуален
Аноним 11/12/22 Вск 12:37:50 #268 №2537946 
>>2536163
жесть подрыв джуна
Аноним 11/12/22 Вск 12:39:11 #269 №2537947 
>>2537833
потому что код накопипастил
[mailto:[email protected]Аноним 11/12/22 Вск 16:25:05 #270 №2538260 
Привет аноны , вопрос к опытным веберам, подскажите план (ну или хотя бы список того что нужно знать) для вката в бэкенд на джуна?
Аноним 11/12/22 Вск 17:02:22 #271 №2538299 
>>2538260
SQL, HTTP, framework.
[mailto:[email protected]Аноним 11/12/22 Вск 17:04:21 #272 №2538301 
>>2538299
>framework
какие
Аноним 11/12/22 Вск 17:12:47 #273 №2538311 
>>2538301
Django, либо Flask+SQLAlchemy, либо Aiohttp или что там модно молодежно
Аноним 11/12/22 Вск 17:19:33 #274 №2538314 
hg2dcbj3lvu2jbjjtdd4.png
>>2538301
Аноним 11/12/22 Вск 17:43:55 #275 №2538336 
>>2538260
язык(питон), git, linux, django, sql(postgres), алгоритмы и структуры данных, ооп, паттерны проектирования, юнит-тесты, html+css, rabbitmq, docker, работа с api, асинхронное программирование, аниме
Аноним 11/12/22 Вск 17:47:18 #276 №2538342 
сижу значит учу джангу а там про какое то орм говорят которое работает с бд напрямую, возникает вопрос я что зря эскьюэль учил до этого....
[mailto:[email protected]Аноним 11/12/22 Вск 17:48:01 #277 №2538343 
>>2538336
пизда ...
кста а нах линукс?
Аноним 11/12/22 Вск 17:52:27 #278 №2538349 
>>2538342
а нафига ты таблицу умножения учил, если есть калькуляторы.
Аноним 11/12/22 Вск 17:58:40 #279 №2538358 
>>2538343
сервера вроде как на линуксах стоят. но я зарофлил на самом деле, не переживай, по сути надо ориентироваться немного в гите, в вёрстке разобраться за пару вечеров сможешь, язык и бд ты уже знаешь, осталось написать на джанге пару интернет-магазинов и уже будешь иметь представление о том что ждёт на работе и о чём говорить на собесах, всё получится.
Аноним 11/12/22 Вск 18:02:13 #280 №2538359 
>>2538343
Это нужно что бы резюме солиднее выглядело. Каждую мелочь отдельно выписать.
Аноним 11/12/22 Вск 23:22:55 #281 №2538662 
>>2538314
Aiohttp умер окончательно?
Аноним 12/12/22 Пнд 00:22:24 #282 №2538682 
Сервера работают на линухе, если ты занимаешься вебом нужно уметь знать основы типа запустить свое дерьмо на удаленном сервере, настроить запуск сервисов итп.
Аноним 12/12/22 Пнд 06:09:58 #283 №2538750 
Ананасы, я правильно понимаю, что в кондишине типа:
if ('key' in dict.keys() and dict['key'] == 1)

Второе условие даже не будет проверяться, если первое False и значит ошибки не будет?
Аноним 12/12/22 Пнд 06:21:26 #284 №2538752 
изображение.png
>>2538750
У тебя есть очень удобный автоответчик на такие вопросы, начинается на "к", заканчивается на "ь".

Я рекомендую вариант с get - не знаю что там внутри питона, но get один раз просматривает ключи, и если находит возвращает значение, а твой вариант один раз просматривает все ключи для первой проверки, а потом ещё раз ищет когда ты уже значение получаешь.
Аноним 12/12/22 Пнд 06:36:48 #285 №2538755 
>>2538752
>У тебя есть очень удобный автоответчик на такие вопросы, начинается на "к", заканчивается на "ь".
kChatGPTь
Аноним 12/12/22 Пнд 06:45:48 #286 №2538756 
>>2538752
Он вычисляет хеш ключа, а не смотрит все ключи, это быстрая операция.
Аноним 12/12/22 Пнд 07:05:02 #287 №2538758 
>>2538756
Да всё-равно любая логика написанная в самом питоне на низком языке это быстрее двух условий в питоне в любом случае.

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

Во втором случае с get он на стадии получение значения вместо исключения кидает значение по умолчанию. Там такой же if стоит, но вместо throw идёт return default
Аноним 12/12/22 Пнд 07:07:06 #288 №2538759 
>>2538758
Это называется преждевременная оптимизация.
Гет полезен для других целей.
Аноним 12/12/22 Пнд 07:09:12 #289 №2538760 
>>2538759
Уж прости. Я из крестотреда сбежал.

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

>>2538762
>Как это она появится, если ты её не поставишь?
В лисенере "def listener(message):" и переменная внутри функции не определена пока не появится, её вообще приходится объявлять как глобал что тоже костыль.
Аноним 12/12/22 Пнд 17:20:23 #294 №2539184 
>>2539178
>костыль
Скорее typeof костыль. Он возвращает строку, но какие были причины так сделать? В строках не проверяется синтакс, у тебя программист напишет "unefined" и ищи потом эту хуйню. Опять же, каким-то инструментам, анализирующим код (например IDE) будет сложнее с кодом, в котором нет переменной, а потом она вдруг появляется, потому что неизвестно, какое у нее имя. Именно что a = None выглядит намного более гладко.
Аноним 12/12/22 Пнд 18:06:08 #295 №2539214 
>>2538750
Пиздец, чел.

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

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

В-третьих, да, and/or выполняются лениво.
Аноним 12/12/22 Пнд 18:14:17 #296 №2539218 
>>2538761
asyncio.Event, threading.Event и аналогичное. Вместо твоего цикла будет одна строка event.wait(), и не будет лишних 0-3 секунд ожидания.
Аноним 12/12/22 Пнд 18:27:35 #297 №2539225 
>>2539214
Все эти keys,values,items возвращают специальные объекты.
Именно keys выдает что-то вроде сета, потому что все ключи хешабельны. Скорее всего в итоге оно работает примерно одинаково под капотом. Но без keys красивее в такой проверке.
Аноним 12/12/22 Пнд 18:32:47 #298 №2539232 
image.png
>>2539225
Аноним 12/12/22 Пнд 18:35:29 #299 №2539234 
изображение.png
>>2539232
Ну, ты чего анон? Что-то вроде сета.
Это как range. Вроде бы раньше он список выдавал в версиях второго питона, а теперь это свой объект range.
Аноним 12/12/22 Пнд 18:36:05 #300 №2539235 
>>2539234
Я к тому, что это не итератор, он не будет смотреть все ключи.
Аноним 12/12/22 Пнд 18:38:09 #301 №2539238 
>>2539235
Также, как ты можешь сделать x=range(9999999) и делать 1000 in x и ничего там не будет итерироваться.
Аноним 12/12/22 Пнд 19:18:14 #302 №2539255 
Screenshot from 2022-12-12 19-13-02.png
>>2539225
Ну не сет он выдаёт, а итератор, указатель на оригинальную хэшмапу и указатель на текущий элемент. Видимо они там подсуетились и реализовали прокси-метод in, который вызывает оригинал, разница во времени небольшая и не зависит от размера.

https://github.com/python/cpython/blob/main/Objects/dictobject.c#L4665-L4671
Аноним 12/12/22 Пнд 19:23:40 #303 №2539260 
>>2539255
разница в 50% так-то.
Аноним 12/12/22 Пнд 19:25:38 #304 №2539263 
>>2539255
Ну так у тебя оверхед во первых на поиск метода, во вторых на создание объекта. Вынеси dd = d.keys() в глобалс и смотри тогда.
Аноним 12/12/22 Пнд 19:32:24 #305 №2539270 
Screenshot from 2022-12-12 19-31-28.png
>>2539263
Кек. Неужели в dict contains что-то большее чем dictkeys contains?
Аноним 12/12/22 Пнд 19:37:11 #306 №2539279 
>>2539270
Хех.
https://github.com/python/cpython/blob/main/Objects/dictobject.c#L3626-L3644
https://github.com/python/cpython/blob/main/Objects/dictobject.c#L3180-L3200
Аноним 12/12/22 Пнд 19:47:26 #307 №2539290 
>>2539279
Так и почему быстрее? Кейс таки должен чуть помедленнее быть из-за оберток этих, но на копейки.
Аноним 12/12/22 Пнд 21:37:42 #308 №2539359 
Screenshot from 2022-12-12 21-36-10.png
>>2539290
Там повторён код, а не обёртка. Видимо вся котовасия из-за сломанного ООП/системы слотов/магических методов.
Аноним 12/12/22 Пнд 21:42:37 #309 №2539363 
>>2538761
Можно отслеживать globals() на появление новых переменных
Аноним 12/12/22 Пнд 21:43:09 #310 №2539364 
>>2539359
У него есть привязка к оригинальному словарю, поэтому так, наверное.
Вообще, надо покопаться во всех этих реализациях, интересно. Но надо подучить си и найти какой-то материал с разбором. Видел цикл лекций на ютубе, но по двойке.
Аноним 12/12/22 Пнд 22:17:51 #311 №2539384 
изображение.png
изображение.png
>>2539270
Мяу. А можно этому timeit передать функцию или лямбду и список+словарь аргументов, а не строку в виде текста?
Аноним 12/12/22 Пнд 22:21:15 #312 №2539385 
>>2539384
Можешь имя функции передавать.
def hui:

timeit(hui)
Аноним 12/12/22 Пнд 22:33:02 #313 №2539392 
>>2539385
А аргументы как?
Я хочу проверить для разных параметров время выполнения функции.
Аноним 12/12/22 Пнд 22:36:47 #314 №2539394 
>>2539392
Можно через лямбду, можно через замыкания.
Аноним 12/12/22 Пнд 22:59:38 #315 №2539403 
>>2539394
Не знаю что такое замыкание. Всегда считал что так лямбды в js называют просто...
А как передать то? Написать пустую лямбду по типу labmda: fun(t1,t2)?
Аноним 12/12/22 Пнд 23:05:34 #316 №2539406 
>>2539403
С лямбдами да.
Замыкание примерно так. https://ideone.com/TnTGLf
К функции прилипают переменные из окружающего скоупа.
Аноним 12/12/22 Пнд 23:12:16 #317 №2539407 
>>2539406
Угу, понял. Так бы и сказал, что просто когда функция возвращает функцию, примерно как декоратор.

Идеоне заблочен по какой-то причине, кстати, причём "сильно" - рутрекер открывается условный с использованием тех же лёгких средств обхода блокировок. А тут только прокси.
Аноним 13/12/22 Втр 00:20:19 #318 №2539462 
Ладно, а подскажите другое, где можно захостить дискорд-бота на питоне или другой небольшой сервер со своим протоколом на 5 человек?
Аноним 13/12/22 Втр 00:29:44 #319 №2539467 
>>2539462
https://lowendstock.com/
С бисплатна идешь нахуй сразу.
Аноним 13/12/22 Втр 00:48:39 #320 №2539473 
>>2539467
Да не вопрос, только я не знаю как сервер не в России оплатить, а местный не хочу.

И там какие-то веб-платформы, я во всём этом не разбираюсь, хочется код запустить, просто чтобы у него айпишник свой был и к нему можно через сокеты по порту подключится, без докеров-хуёкеров или что там используется. Такое везде будет?
Аноним 13/12/22 Втр 00:56:28 #321 №2539475 
>>2539473
Да. У них обычно нат, там один айпи на всех, тебе выделяют диапазон портов под твою впску на которых можно развернуть какие-то сервисы.
Как оплатить уж сам разбирайся.
Аноним 13/12/22 Втр 02:16:59 #322 №2539496 
Какой xml-парсер вам больше нравится?
использую xml2dict, мейнтейнер мудак, зависимость есть
Аноним 13/12/22 Втр 02:19:45 #323 №2539497 
>>2539496
>xml2dict
xmltodict? Или это разные? Что за история с майнтейнером?
Аноним 13/12/22 Втр 02:24:21 #324 №2539498 
>>2539496
Сто лет уже не было задач с использованием xml, где ты такое нашел?
Разве что использую lxml как парсер для супа или напрямую для парсинга хтмл, если нужна скорость, т.к. суп пиздецки тормозной и гигабайты на нем молотить можно от старости умереть.
Аноним 13/12/22 Втр 02:46:49 #325 №2539507 
>>2539496
Стандартный xml etree. Нахуй что-то ещё?
Аноним 13/12/22 Втр 05:01:14 #326 №2539528 
16704795445870.jpg
>>2539496

re
Аноним 13/12/22 Втр 06:39:26 #327 №2539536 
>>2538752
гет лучше только тем что ключ два раза не писать
Аноним 13/12/22 Втр 07:02:42 #328 №2539542 
>>2539178
в питоне подбная проверка выглядит вот так

try: print(lol)
except NameError: pass
Аноним 13/12/22 Втр 11:48:31 #329 №2539659 
Screenshot148.jpg
Посоветуйте что почитать по всяких ОХУЕННЫМ фичам языка?
Я имею ввиду лямбды, functools, collections. Желательно с упражнениями.

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

Реально, книжек как будто нет. Кое-где упоминаются, но вскользь.
Аноним 13/12/22 Втр 13:06:28 #330 №2539747 
Потратил день чтобы написать херню которая преобразовывает входящий список. Кажись программировать не мое.
Аноним 13/12/22 Втр 17:12:55 #331 №2539925 
>>2539747
пости херню в тред
если решу за 5 минут - выкатываешься из ойти нахуй
Аноним 13/12/22 Втр 18:23:07 #332 №2539993 
>>2539659
Остановлюсь пока на этом:
https://github.com/fbaptiste/python-deepdive ( тут только отдельные уроки про функциональщину)

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

Мне понравилос.
Аноним 13/12/22 Втр 19:44:54 #333 №2540076 
>>2539496
Стандартный модуль xml сейчас более, чем хороший. lxml из каких-то древних времён, штатный xml всё умеет, что нужно
Аноним 13/12/22 Втр 19:47:25 #334 №2540081 
>>2538662
Его за пределами Украины-РФ почти не знают. Не любят там славян, не любят
Аноним 13/12/22 Втр 20:11:06 #335 №2540105 
image.png
Случилось чудо, первым спиздили переводной python distilled, а не оригинал.
Клятый аддисон-весли.
Аноним 13/12/22 Втр 20:11:15 #336 №2540106 
>>2538662
Сами авторы говорят, что его нужно юзать только как базу низкоуровневых вещей типа ебли с протоколами. Фастапи же предоставляет кучу батареек из коробки для полноценной вебморды. Отсюда и перекос. К слову, практически уверен, что многие юзают aiohttp как клиент.
Аноним 13/12/22 Втр 21:22:09 #337 №2540154 
>>2540106
aiohttp очень удобен как асинхронная веб морда для сетевого инструментария, тебе не нужны все эти asgi.

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

Там правда в чарте хватает какой-то левой мути, а вот aiohttp места не нашлось.
Аноним 13/12/22 Втр 21:22:39 #338 №2540155 
ппц ну я тупарез тупарезный
в общем занимался по книжке для нюфагов питон тони гэдис фроде с фруктами на обложке. Читал в целом все было понятно и задачки были посильными и темы понимались нормально. Вот прошел я. уровень еще низкий для решения задач из сети, думаю ну надо расширить знания начал читать лутца, так у него главы настолько большие что я пока одну тему читал уже стал забывать другие потому что не делал задания, а заданий там не то чтобы нету, но надо много прочитать прежде чем что-то понять. объемы очень большие. теперь вот хз вроде пока читаю а закреплять на практике более подробные знания с этими вариациями использования того или иного цикла или метода или способа я не успеваю тупо. учебный процесс можно сказать нарушился. может есть способ чтобы и углубляться и закрепляться и не так быстро забывать одно переставая видеть за деревьями леса
Аноним 13/12/22 Втр 21:23:30 #339 №2540156 
>>2539542
>>2539178
Я проверяю есть ли переменная в окружении, просто проверка имени переменной в dir или global по имени. Это питонический путь или ещё нет?
Ну как по мне это вообще ситуация не обычная, если ты не знаешь какие у тебя переменные есть, мне такое нужно было только для работы в колабе, там была каша из окружения - один фрагметн кода запускается что-то делает, потом ты его останавливаешь, погромируешь-погромируешь и следующую ячейку с кодом запускаешь.
Аноним 13/12/22 Втр 21:28:49 #340 №2540161 
>>2540154
>для сетевого инструментария
Ну так сетевые инструментарии гораздо более редкая вещь относительно обычных веб сервисов.
Аноним 13/12/22 Втр 22:22:46 #341 №2540195 
>>2540154
Думаю все просто укатились на go. И быстрее, и проще деплоить, и скейлится по ядрам хорошо, и выучить язык нормальному питонисту две недели.
Аноним 13/12/22 Втр 22:34:33 #342 №2540200 
>>2540155
Книга нужна чтобы за ручку тебя вести, чтобы ты задал себе правильные вопросы и нашёл ответы. Если книга снотворная — лучше дропай. Делай сразу юзабельные программы, напиши сначала угадай число, калькулятор, какую-нибудь тривию, 5 букв, попробуй веб поделать на каком-нибудь фласке, игры на arcade, в майнкрафте попрограммируй черепашек. Постепенно всю нюансы языка нагуглишь хорошо сформулированными вопросами/экспериментами в REPL.
Аноним 13/12/22 Втр 23:26:38 #343 №2540218 
>>2540105
А где?
Сейчас помоек развелось, я не успеваю.
Да еще побанили в одной, когда я их обозвал очередной пиратской помойкой...странные
Аноним 13/12/22 Втр 23:42:20 #344 №2540225 
>>2540218
Есть как минимум на либгене и руторе.
Аноним 14/12/22 Срд 12:49:23 #345 №2540469 
Нужна книга по пистону без воды. Лутца не советовать, там какой-то ад: на 410-й странице только начинают разбирать for/while. Желательно с задачами. Писал на питоне только небольшие скрипты, сейчас есть необходимость поработать над большим приложением.
Аноним 14/12/22 Срд 12:55:09 #346 №2540483 
>>2540105
Ну и что это такое?
Книга претендует на то чтобы заменить Лутца по исчерпывающести?
Аноним 14/12/22 Срд 12:59:00 #347 №2540491 
>>2540469
ну как же без воды? а как же создание нейронных связей?

Посмотри Хиллард Д. - Секреты Python Pro (Для профессионалов) - 2021.pdf
Аноним 14/12/22 Срд 13:58:16 #348 №2540572 
>>2540483
Идиотский нейминг от пиривоччиков, хоть не "питонья братва".
Интермедиейт книга от Девида Бизли, очень толковый чувак. На фоне засилья однотипных начальных для вкатунов это заебись.
Аноним 14/12/22 Срд 18:10:52 #349 №2540905 
oYAwzuHmQ4Q.jpg
Сделал вот такую проверку появился ли инет при переподключении заодно возвращает айпи, так правильно делать, или можно как-то изящней всё реализовать?

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
Аноним 14/12/22 Срд 18:45:35 #350 №2540916 
>>2540905
Ну как минимум while True, лишняя переменная нахуй не нужна. Сайт у тебя какой-то васянский, завтра исчезнет. Делай хед на тот же Гугл.ком.
Аноним 14/12/22 Срд 19:26:47 #351 №2540950 
>>2540905
while True:
try:
html.fromstring('хуйня малафья')
break
except:
time.sleep(1488)
Аноним 14/12/22 Срд 19:45:14 #352 №2540973 
>>2537470
Если поместить словари в список и затем отсортировать, то словари будут упорядочены.

Я прошел тест?
Аноним 15/12/22 Чтв 00:13:01 #353 №2541260 
>>2540916
>Сайт у тебя какой-то васянский, завтра исчезнет.
Там пара строк и одна из них мой айпишник, его и получаю.
Посмотрел сейчас есть сайты с api где можно айпишник в джисон формате получить, но там ограничения на 10 обращений, у какого норм ресурса это без лимита?

>>2540950
>while True:
>try:
>html.fromstring('хуйня малафья')
>break
>except:
>time.sleep(1488)
Заебись, спасибо.
Аноним 15/12/22 Чтв 00:15:42 #354 №2541261 
>>2541260
Dyndns изобретаешь?
Аноним 15/12/22 Чтв 01:13:12 #355 №2541294 
image.png
image.png
image.png
>>2527453 (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 или там банальный мьютекс под капотом?
Аноним 15/12/22 Чтв 01:44:27 #356 №2541314 
>>2541294
Там GIL под капотом, тупой мьютекс не всё пространство памяти и планировщик выполнения. До уровня опкода виртуалки/встроенного метода на си всё атомик и тред сейф.
Аноним 15/12/22 Чтв 03:55:36 #357 №2541335 
Подскажите, книга Доусона "Программируем на Python" кал или нет? Бесит, что все примеры даются как игры, а хотелось бы больше реальных/математических задач, как в хендбуке Яндекса.
Аноним 15/12/22 Чтв 05:12:27 #358 №2541343 
>>2541314
GIL не гарантирует атамарность. Я могу написать такую билиотеку на си, которая будет не атамарной. Например она содержит 3 функции send, flush и f. Функци send препроцессит отправляет данные в буффер, а flush коммит эти данные переселые из буффера куда надо. Функция f принимает аргумент n и делает n раз вызов сначала send, а потом flush. В итоге если передать из питона f большое число, а во время работы убить процесс, то сообщение будет отправлено не n раз. А свойство атомарности говорит, что либо n раз нужно отправить когда всё работает или 0 если ошибка. Атомарность значит или полностью применить изменение или вообще не применять. GIL не знает что там под капотом на си и не гарантирует атамарность. Только код на си может себе атамарность гарантировать
Аноним 15/12/22 Чтв 05:40:22 #359 №2541350 
>>2541314
Нит, пистон выполняет не код, а команды байт кода, которые ты можешь посмотреть через dis. Если во время работы с тредами планировщик скажет сменить тред, а потом ты вернёшься к функции, где есть, например, присвоение глобальной переменной, операция которой выполнена на половину (то есть во фрейме уже сгенерирована новая переменная, но она не пушнута в глобал стейт), то можешь получить очень неприятный сюрприз.
Аноним 15/12/22 Чтв 05:56:06 #360 №2541355 
Стикер
>>2540973
нет ньюфажена, гугли изменения по версиям
Аноним 15/12/22 Чтв 06:13:28 #361 №2541358 
>>2541343
Хуета с дивана от байтоёба.

>>2541350
Ну ёпт, я именно это и написал. Жопой читаешь? Опкоды/сишные коллы выполняются как цельная операция под гилом. То что ты там в несколько опкодов написал уже может прерваться.
Аноним 15/12/22 Чтв 06:16:01 #362 №2541359 
>>2541358
>Хуета с дивана от байтоёба.
Пруфы? Дай определение атамарности и сам расскажи как мой код работать будет. И если с моим описанием не сойдётся, то я сам тебе напишу эту библиотеку
Аноним 15/12/22 Чтв 06:27:51 #363 №2541360 
>>2541359
Атомарность это неделимость, как у древнегреческих философов. Она не обязательно с ролбэком. Ты просто можешь заблочить гил, и неделимо выполнить ряд операций.
Аноним 15/12/22 Чтв 06:38:45 #364 №2541364 
>>2541343
> GIL не знает что там под капотом на си и не гарантирует атамарность
Ну то есть, блядь, само собой, GIL за тебя код не напишет. Но конвенция сишного кода для питонов подразумевает что по умолчанию только один тред активен, поэтому большая часть операций безопасна. Там изредка экстеншены его отпускают, если 100% уверены в том что делают, всякие numpy, когда отправляются дробить числа.

При этом разломать list/dict/deque несинхронизированным доступом из нескольких тредов ты не можешь. Любой встроенный метод, какой-нибудь list.append, выполняется атомарно. GIL не отпускается пока не выполнится.
Аноним 15/12/22 Чтв 08:42:54 #365 №2541390 
>>2541355
Ну ты и душнила унылая.
Аноним 15/12/22 Чтв 09:55:24 #366 №2541419 
>>2541314
>>2541364
Точно, я совсем забыл про 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 )
Аноним 15/12/22 Чтв 12:19:37 #367 №2541571 
>>2541419
>Но ведь GIL подразумевает, что все thread-safe (тред же только один, верно?)
Сегфолтов ты не получишь, но данные закораптить запросто
Аноним 15/12/22 Чтв 12:45:33 #368 №2541609 
GIL гарантирует вам только то что пистон не крашнется, на вашу логику вашего приложения ему похую.
Аноним 15/12/22 Чтв 13:03:58 #369 №2541640 
>>2541571
>>2541609
Так, падажжи, ебана. Ну да, тред один, но имеется в виду, что он выполняется только один, но может в любой момент быть переключен, верно? Этот момент я упустил.

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

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

Ну тогда вроде все понятно более-менее, спасибо, аноны.
Аноним 15/12/22 Чтв 17:05:45 #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")
Аноним 15/12/22 Чтв 17:15:08 #371 №2541923 
>>2541911
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")))
Аноним 15/12/22 Чтв 17:16:45 #372 №2541927 
Screenshot19.jpg
>>2541911
>чтобы ввод строки был с клавиатуры, а не задан в программе?
ну или так
Аноним 15/12/22 Чтв 17:17:28 #373 №2541929 
>>2541911
или просто через множество, но наверное, ты до этого ещё не дошёл
Аноним 15/12/22 Чтв 17:19:03 #374 №2541931 
>>2541911
А, хотя я неправильно твоё задание понял, но там пару строк подправить и всё
Аноним 15/12/22 Чтв 17:29:32 #375 №2541945 
>>2541931
>>2541929
>>2541927
>>2541923
спасибо! разобрался
Аноним 15/12/22 Чтв 17:31:25 #376 №2541948 
>>2541923
print(sorted(set(s), key=ord))
Аноним 15/12/22 Чтв 17:33:39 #377 №2541949 
>>2541948
Разве эта функция не по дефолту сортирует по ord
Аноним 15/12/22 Чтв 17:39:02 #378 №2541959 
>>2541948
В принципе да. Видимо, суть задачки - навелосипедить вручную
Аноним 15/12/22 Чтв 17:46:23 #379 №2541968 
>>2541959
Да это суть задач. Дать тебе отработать на практике материал.

А то тут сразу же вспоминаешь всё это нытьё с рекурсивными функциями и задачками по них, да, крайне переусложнённые и которые без них порой намного проще и быстрее решить. Но у тебя задача не проще и быстрее решить, а именно рекурсией
Аноним 15/12/22 Чтв 17:50:00 #380 №2541976 
>>2541968
Рекурсия это говно. Суть питухона же максимально упростить код и разработку, нахуя же эта рекурсия нужна, чтобы макаки тратили часы на вход, потом в ней ошибались и переделывали. Есть ли вообще такая задача которую не решить без рекурсивного мозгоебства или это просто выебоны?

неосилятор
Аноним 15/12/22 Чтв 17:55:24 #381 №2541987 
>>2541976
Есть рекурсивные задачи, которые хорошо в нее укладываются, но можно решить и без неё.
Например, поиск файлов в вложенных каталогах или обход всех страниц сайта, который кравлинг.
Аноним 15/12/22 Чтв 18:12:38 #382 №2542018 
>>2541976
У тебя есть пакеты и монетки. В любой из пакетов ты можешь класть монетки, а так же другие пакеты (в том числе с монетками и пакетами монеток). Задача — посчитать сколько всего монеток внутри произвольного пакета.

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

Рекурсивно это решается в 10 строк. Нерекурсивно порядка 100.
Аноним 15/12/22 Чтв 18:13:29 #383 №2542021 
>>2541987
У ностарча недавно вышла книга про рекурсию с примерами на жс и питоне, кстати. Я пока не читал, но это хороший издатель без откровенного говна.
Аноним 15/12/22 Чтв 18:19:33 #384 №2542032 
>>2541976
Рекурсия просто заставляют поднапрячь мозг чуть больше, чем просто +-*/ и if else while.
Вот и всё, сложного там ничего нет. А мозг поднапрячь полезно лишний раз
Аноним 15/12/22 Чтв 18:28:45 #385 №2542052 
>>2542018
>Нерекурсивно порядка 100.
monetka = 0
for i in poket:
monetka += 1
Аноним 15/12/22 Чтв 18:30:48 #386 №2542059 
>>2527453 (OP)
Пацаны, джанго бэк создает некий excel-файл, нужно сохранять его так чтобы создавший его юзер потом мог посмотреть его через админку и скачать если нужно. Как это реализовать? Понятно что я могу создавать рандомное имя для файла и сохранять его по известному пути, но как сделать так чтобы его можно было смотреть из админки?
Аноним 15/12/22 Чтв 18:31:27 #387 №2542061 
>>2542052
не.
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 строк костылей писать
Аноним 15/12/22 Чтв 18:32:04 #388 №2542063 
>>2542052
Считай, монетка.
[1, 1, [1], [[1, 1, [1, 1]]], [1,[1, 1], 1]]
Аноним 15/12/22 Чтв 18:32:18 #389 №2542064 
c6de000fa1c1.jpg
>>2542052
Аноним 15/12/22 Чтв 18:33:34 #390 №2542066 
>>2542061
да и эти костыли будут считать только с определёнными данными, если они изменятся, то и весь код полететь может и тебе снова надо будет ещё 50 строк года добавлять, когда рекурсией это буквально пару строк и норм производительность для таких задач.
Аноним 15/12/22 Чтв 18:34:33 #391 №2542070 
>>2542063
А, ну вот хороший и единственный пример где нужна рекурсия. Тут согласен.
Аноним 15/12/22 Чтв 18:36:41 #392 №2542074 
>>2542064
Откуда у тебя моя фотка в момент программирования на Пайтон, когда я наиболее уязвим?
Аноним 15/12/22 Чтв 18:37:59 #393 №2542076 
>>2542059
Через сторадж сохрани файл и запиши его имя в FileField какой-нибудь модели. Будет так как будто файл загрузили через форму, но на деле ты его создал прямо на бэке. https://docs.djangoproject.com/en/4.1/topics/files/
Аноним 15/12/22 Чтв 19:09:21 #394 №2542119 
Всем привет , кто может помочь пожалуйста с кодом на питоне , возникли некоторые трудности в создании одного проекта . Используемые основные библиотеки : pynput, telebot
Аноним 15/12/22 Чтв 19:46:18 #395 №2542150 
Не врубаюсь, почему мое решение не подходит?
https://pastebin.com/fZyA5Zhf
Я знаю что это тупо, но я пытаюсь полностью закрепить владение itertools и тд
https://www.codewars.com/kata/58291fea7ff3f640980000f9/python

Уже переделал, но надо разобраться что не так с этим способом
Аноним 15/12/22 Чтв 19:53:10 #396 №2542156 
>>2542150
Пиздос как сложно у тебя.
{x['continent'] for x in lst}.issuperset(set(all_cont))
Аноним 15/12/22 Чтв 19:56:54 #397 №2542160 
>>2542156
Я понимаю, я забрутфорсил это решение просто через set:

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

но почему не проходит это сложное?
Аноним 15/12/22 Чтв 20:09:17 #398 №2542172 
>>2542160
Проходит.
С сетом вариант тоже хуйня, через сет компрехеншен намного лучше.
Аноним 15/12/22 Чтв 20:12:37 #399 №2542177 
Screenshot from 2022-12-15 20-07-56.png
>>2542160
Точно забрутфорсил? Так-то разницы между твоими решениями, судя по всему нет. Возможно дело в superset.
Аноним 15/12/22 Чтв 20:21:22 #400 №2542193 
>>2542177
Ебал я этот сайтец :(
На следующих задачах из серии тоже какая-то хуйня.

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

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

Похоже просто макакены друг друга обучают и плюсики ставят.
Придется на leeetcode идти, но там какие-то задачи всегда сложные.
Аноним 15/12/22 Чтв 20:22:32 #401 №2542195 
>>2542172
Мне просто не нравится set comprehantion.
Ката - это когда ты тренируешь конкретные элементы, а не ищешь лучший.
Вот я решил потренировать itertools и друзей.

Но получается какая-то поебень (
Аноним 15/12/22 Чтв 20:28:25 #402 №2542202 
>>2542195
Да причём тут сеты и итертулз, там задача отметить галочки что есть разработы из всех требуемых регионов. У тебя сама задача не решается. Достаточно появиться кому-нибудь из Антарктиды чтобы твоя прога перестала говорить что из Африки и Европы люди есть.
Аноним 15/12/22 Чтв 20:29:43 #403 №2542206 
>>2542195
> Ката - это когда ты тренируешь конкретные элементы, а не ищешь лучший.
Нет, это как раз писькомерство как бы изъебнуться поменьше.
Конкретно эти твои это какие-то тематические на higher-order functions.
Аноним 15/12/22 Чтв 20:32:43 #404 №2542209 
>>2542202
Но никто из таких не заявится на кодерское пати. Ни у кого нет паспорта из Антарктиды.
Аноним 15/12/22 Чтв 20:34:21 #405 №2542212 
>>2542206
Мне кажется так проще оценивать программу на правильность.
Не с отладчиком прыгать по ебучим вложенным циклами, тестик для функции ебануть.
Ну я что буду тут пересказывать стандартную документацию?

Тем временем, почитал комментарии и понял из этой задачи >>2542193
что детей учить программированию нельзя
Аноним 15/12/22 Чтв 20:36:11 #406 №2542216 
>>2542209
Окей, плавает кто-нибудь на яхте уже 5 лет, и указал локацию Ocean. Сути не меняет.
Аноним 15/12/22 Чтв 20:46:33 #407 №2542233 
изображение.png
>>2542216
Ну вот сходи там на сайте в каментах подушни
Аноним 15/12/22 Чтв 21:14:33 #408 №2542256 
Придумал упражнение на reduce но сам не могу ни нагуглить ни решить:

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

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

Я же не могу lenght где-то хранить вне лямбды. Как такое решается?
Аноним 15/12/22 Чтв 21:22:49 #409 №2542270 
>>2542256
Ну так используй кортежи (сумма, количество).
lambda t: t[0] + value, t[1] + 1
Аноним 15/12/22 Чтв 21:23:57 #410 №2542272 
>>2542270
В скобки забыл обернуть. lambda t: (..., ...)
Аноним 15/12/22 Чтв 21:38:55 #411 №2542281 
>>2542272
reduce(ANUS, [1,2,3])
Какую лямбду засунуть в ANUS чтобы возвращало среднее арифметическое?
Аноним 15/12/22 Чтв 21:44:54 #412 №2542286 
>>2542281
reduce(lambda acc, x: (acc[0] + x, acc[1] + 1), [1,2,3], (0, 0))
Аноним 15/12/22 Чтв 21:46:47 #413 №2542288 
>>2542286
Возвращает (6,3), а среднее арифметическое 2
Аноним 15/12/22 Чтв 21:56:49 #414 №2542295 
изображение.png
>>2542270
А вот это https://pastebin.com/LSpQvgEK можно в одну строчку запихнуть?
Что-то я путаюсь.
Аноним 15/12/22 Чтв 21:59:36 #415 №2542297 
НА САМОМ ДЕЛЕ я вспомнил как в одном очень серьезном опенсорсе, любители лябмд проебались и неправильно посчитали среднее. Без учета None (дело было в Typescript)

Теперь вот пытаюсь понять как им следовало бы это написать.
Аноним 15/12/22 Чтв 22:00:36 #416 №2542298 
изображение.png
изображение.png
>>2542288>>2542281
Я думаю никак нельзя с лямбдой, тебе нужно два значения хранить на каждой итерации, и в конце только поделить.

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

Лучше бы ты написал sum(lst)/len(lst), чем то что у тебя.
Аноним 15/12/22 Чтв 22:01:38 #417 №2542299 
>>2542286
>>2542298

Бля как же всё это круто и интересно, очень нравится, даже шишка привстала. Боюсь только что если это не дрочить на практике, то забудется через пару месяцев, а дрочить такое на практике зачем? Чтобы код читать сложнее было?
Аноним 15/12/22 Чтв 22:02:13 #418 №2542300 
>>2542288
Раздели 6/3, чо как тупой?
Аноним 15/12/22 Чтв 22:02:23 #419 №2542301 
>>2542299
Я в целом про задачки для питона.
Аноним 15/12/22 Чтв 22:03:43 #420 №2542302 
изображение.png
Ну, ещё естественно такое есть, но это уже совсем ультрабред.
Аноним 15/12/22 Чтв 22:04:00 #421 №2542303 
>>2542299
>Чтобы код читать сложнее было?
чтобы сложные циклы визуально свернулись и код стало читать проще
Аноним 15/12/22 Чтв 22:11:11 #422 №2542304 
изображение.png
>>2542299
Вот, ещё шишку твою побалую.

Да просто пиши код какой хочешь, оно само придёт, когда будет всю эту хрень легко разбирать и видеть что тут написано.
Аноним 15/12/22 Чтв 22:17:09 #423 №2542310 
>>2542298
Я думаю, можно нахувертить вложенных лямбд и тащить скоуп за собой, но лень придумывать, это бессмысленная задачка.
Аноним 15/12/22 Чтв 22:18:53 #424 №2542313 
>>2542303
Вложенные циклы читать как раз проще, уже двухэтажный компрехеншен на грани, не говоря о больше.
А если тебе надо прокрутить что-то быстренько, то да, такие штуки упрощают.
Аноним 15/12/22 Чтв 23:36:34 #425 №2542355 
>>2542313
Давай мы перестанем толочь воду в ступе и ты прочитаешь до конца это https://docs.python.org/3/howto/functional.html
Аноним 15/12/22 Чтв 23:43:05 #426 №2542364 
Есть у кого-нибудь Рамальо Питон, к вершинам мастерства август 2022 ?
Аноним 16/12/22 Птн 10:46:01 #427 №2542627 
>>2542364
https://rutracker.org/forum/viewtopic.php?t=6241982
https://rutracker.org/forum/viewtopic.php?t=6259099
Аноним 16/12/22 Птн 11:27:08 #428 №2542677 
изображение.png
>>2542627
Аноним 16/12/22 Птн 11:33:21 #429 №2542684 
>>2542364
>>2542627
А что хорошего в этой книге? Почему стоит прочесть?
Аноним 16/12/22 Птн 11:36:41 #430 №2542686 
>>2542684
Обувают лохов на деньги. Читай укус бидона, не отвлекайся.
Аноним 16/12/22 Птн 11:38:41 #431 №2542690 
>>2539925
Задача: есть список чисел на входе, нужно сбацать интервалы на выходе. Типо из [1,2,3,5,6,7,9,10] в [1-3, 5-7, 9-10].
Я новичек, можно пиздить сильно
Аноним 16/12/22 Птн 11:41:53 #432 №2542694 
>>2542686
А укус чем лучше Ромальо с торрента?
Аноним 16/12/22 Птн 11:51:29 #433 №2542715 
>>2542684
там ВООБЩЕ нет ничего для новичков.
Исключительно сложные вопросы и наверняка ты что-нибудь новое узнаешь.
Аноним 16/12/22 Птн 11:58:30 #434 №2542733 
>>2542715
Ок, спасибо.
Аноним 16/12/22 Птн 12:07:27 #435 №2542753 
>>2542690
Идешь и сравниваешь поочередно значения, истинно ли условие +1. Если нет, то оформляешь результат и продолжаешь по новой.
Для этого есть itertools.groupby, но ты не осилишь, к тому же задачка скорее всего на такой ручной способ.
Аноним 16/12/22 Птн 12:33:55 #436 №2542798 
>>2542753
Непонятно.
А почему groupby ?
похоже на reduce, но мне тоже сложно такое
Аноним 16/12/22 Птн 12:41:45 #437 №2542806 
>>2542798
Он собирает в группы последовательно идущие элементы с совпадающим ключем-условием.
Редьюс это вообще про другое.
Аноним 16/12/22 Птн 12:53:02 #438 №2542819 
image.png
image.png
>>2542690
Аноним 16/12/22 Птн 13:46:57 #439 №2542933 
>>2542753
>>2542819
Так я и писал что сделяль, просто долго из-за тупости. В итоге тупо удаляю по условию лишнее в списке
Аноним 16/12/22 Птн 15:52:17 #440 №2543123 
изображение.png
Продолжаю изучать функциональное погроммирование на языке, который не является функциональным . Задача 13

что здесь не так?
Почему itemgetter не работает с dict ?
Аноним 16/12/22 Птн 15:58:33 #441 №2543133 
>>2543123
Все понял. Спутал attrgetter и itemgetter.
Мне нужно использовать itemgetter.

Извиняюсь, был напуган.
Аноним 16/12/22 Птн 17:46:55 #442 №2543256 
Screenshot 2022-12-16 at 15.45.49.png
Screenshot 2022-12-16 at 15.44.15.png
>>2542018
>>2542063
Да какие 100 строк. Но рекурсивно все равно проще и компактнее, конечно.
Аноним 16/12/22 Птн 19:00:25 #443 №2543374 
>>2543256
>мутирование аргумента
Извинись.
Аноним 16/12/22 Птн 19:58:48 #444 №2543416 
>>2543374
Аж на одну строку src=src.copy() больше станет!
Аноним 16/12/22 Птн 22:53:15 #445 №2543592 
>>2543256
src.extend(top)
Аноним 16/12/22 Птн 23:36:04 #446 №2543627 
>>2542690
https://www.online-python.com/EWZr9OlY4F
Аноним 17/12/22 Суб 00:18:54 #447 №2543636 
image.png
>>2542690

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

https://www.online-python.com/V6nTHU3eN9
Аноним 17/12/22 Суб 05:55:57 #448 №2543685 
Стикер
Вы согласны что питон похож на бейсик или не согласны, я щас нэпонял?
Аноним 17/12/22 Суб 06:05:15 #449 №2543686 
>>2543685
Ты бейсик-то видел хоть раз, довен?
Аноним 17/12/22 Суб 06:43:21 #450 №2543688 
image.png
Посоветуйте инструмент, которым можно рисовать в питоне (нужно наспавнить n кругов фиксированного размера внутри другого круга, чтобы проверить одну статистическую гипотезу, пикрил.
Я правильно понимаю, что для тут только turtle?
Аноним 17/12/22 Суб 07:09:20 #451 №2543690 
>>2543688
pillow ещё глянь, там есть средства для рисования.
Аноним 17/12/22 Суб 07:57:58 #452 №2543699 
>>2543688
Можно отрисовать вектор на каком-нибудь cairo. Ну и matplotlib. Turtle это для детей, никто не рисует с помощью turtle.
Аноним 17/12/22 Суб 08:12:36 #453 №2543705 
>>2542018
>Нерекурсивно порядка 100.
99% рекурсии можно заменить 2-5 строчками на код с очередью, который ещё и эффективнее будет, и не будет проблем с переполнением стека иметь.
Собственно я так сходу даже затрудняюсь назвать алгоритм, где такого сделать нельзя. Хотя я проснулся три минуты назад, ещё не соображаю.
Аноним 17/12/22 Суб 09:14:00 #454 №2543727 
>>2543705
Ну замени. Запости код.
Вот тебе входные данные [1, 1, [1], [[1, 1, [1, 1]]], [1, [1, 1], 1]]
Ты тот же стек сделаешь из указателей вручную
Аноним 17/12/22 Суб 09:37:11 #455 №2543733 
>>2543727
А что сделать? Сумму посчитать?
Аноним 17/12/22 Суб 09:38:52 #456 №2543735 
>>2543733
Да.
Аноним 17/12/22 Суб 09:46:29 #457 №2543743 
изображение.png
>>2543735>>2543727
https://pastebin.com/8UJjjx2Z
И g выдаёт результаты лучше, даже если почередовать, чтобы в кеш всё прогрузилось.
Аноним 17/12/22 Суб 09:49:26 #458 №2543750 
>>2543727
>Ты тот же стек сделаешь из указателей вручную
Только, во-первых - он не будет переполняться (хотя я не знаю переполняется ли он в питоне), во-вторых, во-вторых - невероятно странно и удивительно что какой бы там ни было стек под капотом питона работает медленнее, чем интерпретируемый код на питоне.

Можешь ещё взять рисунку со спиралькой, и попробовать написать алгоритм заливки (как в пеинте), на си или си++. У меня разница получилась по типу, что для кода с рекурсией время выполнения порядка секунды, а для кода с очередью всего 30 мс.
Аноним 17/12/22 Суб 09:52:51 #459 №2543753 
изображение.png
изображение.png
Если поменять рекурсию пытаясь избежать лишних вызовов - то же самое.
Аноним 17/12/22 Суб 09:55:51 #460 №2543759 
685.png
>>2543743
Хоть проход не в том же порядке, что с рекурсией, и есть копирование, неплохо.

В питонах вызовы функций дорогие как пиздец. Надо очень длинные массивы и низкую вложенность, чтобы затраты отбились.
Аноним 17/12/22 Суб 10:04:26 #461 №2543768 
>>2543743
https://pastebin.com/7nRyfTQB
Хуй знает, наверное перегнул со 100 строками. Но будет длиннее точно.
Аноним 17/12/22 Суб 10:24:01 #462 №2543779 
изображение.png
изображение.png
>>2543759
Рекурсия тоже ломается, да, а список считай неограниченной длины при адекватном времени выполнения.

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

>>2543768
Точно перегнул.
Аноним 17/12/22 Суб 15:48:08 #463 №2543921 
>>2543688
матплотлиб
Аноним 17/12/22 Суб 16:17:00 #464 №2543939 
>>2543688
tkinter Canvas create_oval

https://tkinter-docs.readthedocs.io/en/latest/widgets/canvas.html
Аноним 17/12/22 Суб 16:42:57 #465 №2543954 
спаси и сохрани.png
братья, прошу спасти и помочь. я учусь на истфаке, но нам в обязаловку впихнули программирование. умоляю решить хотя б 2
Аноним 17/12/22 Суб 16:49:40 #466 №2543956 
>>2543954
> число N которое является делителем числа N+1
арифметику на истфаке тоже не учат чтоле?
Аноним 17/12/22 Суб 16:52:29 #467 №2543957 
>>2543956
Получается
Аноним 17/12/22 Суб 17:14:40 #468 №2543970 
>>2543954
a = input().split()
if int(a[0]) > 1:
__print('0')
else:
__print('1')
Аноним 17/12/22 Суб 17:21:57 #469 №2543981 
>>2543970
Это второе?
Аноним 17/12/22 Суб 17:24:16 #470 №2543991 
>>2543981
Да.
Аноним 17/12/22 Суб 17:25:32 #471 №2543993 
>>2543981

Спасибо, храни тебя господь. Но если не сложно можешь ещё одно решить? Хотя б минималку набрать. Я свечку поставлю
Аноним 17/12/22 Суб 17:26:38 #472 №2543997 
>>2543991
Извиняюсь. Сообщение выше должно было тебе отправиться
Аноним 17/12/22 Суб 17:33:57 #473 №2544004 
>>2543954
Это на платформе Яндекс контест?
А причем тут истфак?
Аноним 17/12/22 Суб 17:35:12 #474 №2544006 
>>2544004
Потому что нам впихнули это под видом дополнительной подготовки "Цифровые технологие".
Аноним 17/12/22 Суб 17:37:53 #475 №2544007 
>>2544006
И*.
Аноним 17/12/22 Суб 17:46:24 #476 №2544014 
>>2543993
Это первая
f = [int(n) for n in input().split()]
m = [int(n) for n in input().split()]
print(max(f) + min(m))
Аноним 17/12/22 Суб 21:56:17 #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
Аноним 17/12/22 Суб 22:02:02 #478 №2544190 
>>2544186
Зачем тут ненужная_переменная и финд, если можно просто сделать иф п ин тмп_наме.
Аноним 17/12/22 Суб 22:06:20 #479 №2544199 
Двач-питонач, можете пнуть меня в нужную сторону?
Мне нужно сделать бота для дискорда, который будет ловить вебхуки от моего сервака и отправлять их нужным пользователям. По отдельности никаких проблем нет, а вот скрестить это у меня не выходит.
Каким образом я могу скрестить бота (discord или nextcord) и приём вебхук (aiohttp, quart)?
Буду рад, если кто-то поможет
Аноним 17/12/22 Суб 22:09:40 #480 №2544210 
>>2544190
Да пох на финд. Как без ненужной_переменной обойтись? Надо чтобы проверялись все 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
Аноним 17/12/22 Суб 22:16:32 #481 №2544218 
>>2544210
def tupoy_pidoras(tmp_name):
for p in ('hui', 'pizda', 'urda'):
if p not in tmp_name:
return
print(tmp_name)
Аноним 17/12/22 Суб 22:19:59 #482 №2544220 
>>2544218
Ой , тут я тупой пидорас, если тебе надо проверить все, а не первый попавшийся, тот тут можно сделать через any.
Аноним 17/12/22 Суб 22:20:42 #483 №2544221 
>>2544220
Вот именно что ты тупой пидорас и обосрался. Только хотел написать. Обзываться плохо.
Аноним 17/12/22 Суб 22:22:57 #484 №2544225 
>>2544220
Ладно. А any она ленивая или нет? Ну т.е. если у меня proper_parts километровый, но в основном есть совпадение в начале она сразу прервется или будет дальше проверять?
Аноним 17/12/22 Суб 22:26:53 #485 №2544231 
>>2544225
Ленивый, если какой-то элемент итерабла будет True, то он сразу будет True.
Аноним 17/12/22 Суб 23:08:19 #486 №2544283 
>>2544199
Каналы, очереди.
Аноним 17/12/22 Суб 23:18:16 #487 №2544294 
Вот я перебираю список
for e in list:

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

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

По другому нельзя?
Аноним 17/12/22 Суб 23:19:59 #488 №2544296 
>>2544294
lisy =
Аноним 17/12/22 Суб 23:20:26 #489 №2544297 
>>2544296
Макаба квадратные скобки сьедает.
Аноним 18/12/22 Вск 01:03:45 #490 №2544389 
>>2544294
>По другому нельзя?
Нет.
Аноним 18/12/22 Вск 05:41:29 #491 №2544440 
>>2544186
any(part in name for part in parts)
Аноним 18/12/22 Вск 11:05:08 #492 №2544555 
>>2540106
Глупость полная. Для aiohttp куча батареек тоже, просто тебе их не навязывают "из коробки". Но они officially supported https://docs.aiohttp.org/en/stable/third_party.html
Юзаю aiohttp там где раньше юзал tornado. Вот tornado умирает, но там слишком много легаси было типа поддержки второго питона.
А fastapi, во-первых, для api, во-вторых на любителя, мне например не нравится.
Аноним 18/12/22 Вск 11:08:54 #493 №2544558 
>>2540195
Но сам язык намного менее гибкий. Насчет быстрее - это на особо важно для 99% веб сервисов у которых узкое место БД либо IO(ожидание ответа от другого сервиса). У go есть своя ниша, но он скорее заменяет то, что раньше было написано на С++, хотя туда rust ещё лезет сейчас.
Просто писать на go так себе удовольсвие, если это не что-то совсем просто. Куда приятней scala, nim, elexir
Аноним 18/12/22 Вск 11:11:52 #494 №2544564 
>>2540905
if os.system("ping -W1 -c1 ya.ru &>/dev/null") == 0: print("it werks")
Аноним 18/12/22 Вск 15:38:08 #495 №2544778 
>>2544283
А можно ещё чуть инфы?
У меня затык в том, что они оба пытаются стартануть один и тот же loop у asyncio. И я не очень осознаю, как мне их разнести. Засунуть их в разные потоки и создать там для каждого потока свой лур - норм решение или нет? Как в питоне вообще с многопоточностью?
Аноним 18/12/22 Вск 16:33:02 #496 №2544815 
>>2544778
Зачем создавать разные 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 его подсунуть.
Аноним 18/12/22 Вск 16:36:37 #497 №2544822 
>>2544778
Почитал дальше исходник discordа. Там блокирующей метод run, наверное с ним проблема?
Можешь вот так же сделать в твоем async task`е https://github.com/Rapptz/discord.py/blob/master/discord/client.py#L815
Аноним 18/12/22 Вск 17:01:58 #498 №2544847 
>>2527453 (OP)
>>2527453 (OP)
Как бы вы реализовали функционал таймера со стратистикой?

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

Я пока не придумал ничего лучше, чем завести бд вида "пользователь-операция-время", а при нажатии, например, на старт писать в нее "пользователь1-старт-unixtime", а для подсчета статистики сделать отдельный скрипт с запросами в бд.
Аноним 18/12/22 Вск 17:54:49 #499 №2544902 
изображение.png
заебись конечно когда документация топовая
Аноним 18/12/22 Вск 18:57:15 #500 №2544988 
Аноны вот есть переменная в которой находится приличных размеров строка.

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

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

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

Это вообще нормально? Стоит ли из за этого вводить ещё переменную например main_line_already_updated, чтобы предотвращать второе присвоение. Как это в питоне делается?
Аноним 18/12/22 Вск 19:22:55 #501 №2545025 
>>2544988
Вот поэтому глобальные переменные сосут жопу. Мог бы

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

Что на счет моего вопроса?
Аноним 18/12/22 Вск 19:57:54 #503 №2545077 
>>2544988
Забей, питон не про производительность.

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

В общем, я бы рекомендовал сосредоточится на других аспектах, и это прям если тебе совсем нечего делать и ты вылизывания кода производишь - то можно написать тест и посмотреть бьёт по производительности лишнее копирование или лишняя проверка.
Аноним 18/12/22 Вск 19:59:31 #504 №2545078 
>>2544988
Какая-то дичь. Вообще ты можешь использовать ключевое слово global внутри функции чтобы изменять глобальную переменную
Аноним 18/12/22 Вск 20:00:49 #505 №2545081 
>>2544988
>Стоит ли из за этого вводить ещё переменную например main_line_already_updated, чтобы предотвращать второе присвоение.
А зачем его предотвращать? И вообще, мало ли у тебя несколько потоков, которые эту переменную присваивают и читают?
Аноним 18/12/22 Вск 20:15:43 #506 №2545113 
>>2545032
> — как мне отпилить себе ногу?
> — не отпиливай себе ногу
> — ну я знаю что не надо, но вот хочу дальше отпиливать себе ногу

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

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

Хуй знает зачем тебе это. Но я тебе предложить тупо возвращать из функции эту строку, и у тебя в принципе не получится никакого второго присвоения. А ты чёт раскукарекался что тебе морали читают. Ну сделай флаг, что уже присвоено, что тебе это даст?
Аноним 18/12/22 Вск 20:25:54 #507 №2545126 
>>2545113
Ты чего так разнервничился?
Аноним 18/12/22 Вск 20:37:32 #508 №2545144 
aba5eff7a658005124da82940b17d433.jpg
>>2545126
Я эмоциональный человек, всё в порядке.
Аноним 18/12/22 Вск 20:46:57 #509 №2545158 
>>2545113
Суть вопроса выяснить, что в питоне хуже: излишний раз присваивать переменную или вводить флаг чтобы этого не происходило.
Аноним 18/12/22 Вск 20:58:41 #510 №2545177 
2022-12-1900-55-06.png
>>2544815
>>2544822
> Там блокирующей метод run, наверное с ним проблема?
Да, скорей всего, ибо или только вебхуки работали, или только бот

Сделал фигню на пикриле и оно заработало! Хз, правильно или нет, но оно работает и пофигу. Огромное спасибо тебе, анон!!
Аноним 18/12/22 Вск 21:10:12 #511 №2545194 
>>2545158
Хуже лишний раз посчитать значение. Присвоить переменную ничего не стоит. Разве что через переменную что-то может держаться в памяти, но это редко бывает проблемой.
Аноним 18/12/22 Вск 21:10:13 #512 №2545195 
>>2545177
Да, примерно так. Только, мне кажется, надо код в runner завернуть в цикл ещё, чтобы если экспепшн будет он пытался перезапуститься. В методе run в discord.py оно тоже как-то в цикле дергалось.
Аноним 18/12/22 Вск 21:13:14 #513 №2545200 
>>2545177
> loop = asyncio.get_event_loop()
> loop.create_task(...)

Так уже давно никто не делает. Во-первых get_running_loop, а во-вторых, можно вообще без loop, asyncio.create_task(...)
Аноним 19/12/22 Пнд 05:55:07 #514 №2545482 
>>2544902
как это вообще получилось?
Аноним 19/12/22 Пнд 06:06:53 #515 №2545485 
image.png
>>2544988
>Как это в питоне делается?

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

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

Типа я хочу видеть, с какими именно данными мой метод справляется или не справляется.
Таблица параметров нужна, чтобы тестировать сходные методы. Они все по-разному работают, но должны выдавать идентичный результат( как ни странно)
Аноним 19/12/22 Пнд 12:21:18 #517 №2545771 
image.png
>>2527453 (OP)
Как в Пайчарме называется вот этот механизм - я навожу на переменную в коде и он мне показывает вот такую херню с описанием?
У меня на 2х машинах установлен Pycharm Pro. Но на одной все показывается а на другой - нет (обе Linux mint если че)
Аноним 19/12/22 Пнд 12:22:32 #518 №2545774 
изображение.png
>>2545758
Ладно. Разобрался.
У них тут есть метод SubTest(msg='')
Аноним 19/12/22 Пнд 12:54:59 #519 №2545844 
>>2545200
Ок, поправлю. Пасиб за замечение
Аноним 19/12/22 Пнд 16:30:54 #520 №2546053 
Знатоки говна Джанги, сможете пояснить, почему когда отправляю форму через обычный интерфейс (на фронте есть фронта с кнопочкой submit и в описании action) то все ок и данные вьюха видит в request.POST, но когда отправляю через javascript fetch то в request.POST пусто и все данные оказываются строкой байт в request.body?
Аноним 19/12/22 Пнд 18:35:29 #521 №2546243 
>>2546053
1) Данные отправляются через new FormData() ?
2) Проверяй Content-Type, если ты отправляешь обычный application/json, схуяли он должен попадать в request.POST ?
Аноним 19/12/22 Пнд 19:56:38 #522 №2546333 
>>2546053
Потому что ты заблудился между двух сосен. И соснул с проглотом.
Аноним 19/12/22 Пнд 19:58:42 #523 №2546335 
Пилите перекат, петуховены
Аноним 19/12/22 Пнд 20:09:43 #524 №2546348 
>>2546335
а хули обсуждать? 4.0 выйдет - запилю
Аноним 19/12/22 Пнд 20:30:47 #525 №2546392 
>>2541976
>>2542032
>>2543779
инфа вам за питонячью рекурсию:
https://youtu.be/1dUpHL5Yg8E
Аноним 19/12/22 Пнд 20:48:09 #526 №2546429 
ПЕРЕКАТ
>>2546424 (OP)
>>2546424 (OP)
>>2546424 (OP)
>>2546424 (OP)
Аноним 20/12/22 Втр 17:05:02 #527 №2547450 
>>2543970
>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]
Аноним 20/12/22 Втр 17:10:22 #528 №2547457 
изображение.png
>>2547450
Сраная макаба.
Аноним 21/12/22 Срд 12:19:30 #529 №2548182 
>>2547450
>Зачем ты так с ним?
Придумай пример числа, подходящего под условия задачи, и ты всё поймёшь.
Аноним 21/12/22 Срд 13:40:46 #530 №2548278 
>>2547457
Охуеть как все видно то стало.
Может тебе в окулисты вкатиться?
Аноним 21/12/22 Срд 16:33:08 #531 №2548449 
>>2547457
шакал ебучий
Аноним 21/12/22 Срд 17:08:26 #532 №2548492 
изображение.png
>>2548182
Это сразу было понятно, анонче, однако это не делает твоё решение верным.
>>2548278
>>2548278
Да уж, нехорошо получилось.
Аноним 21/12/22 Срд 23:48:17 #533 №2548949 
>>2548492
>Это сразу было понятно, анонче, однако это не делает твоё решение верным.
Покажи пример инпута, когда моё решение даст неверный ответ, или выйдет за пределы ограничений времени/рам.
Аноним 22/12/22 Чтв 15:39:17 #534 №2549499 
>>2548949
Покажи препода с истфака который будет твое решение проверять не по методичке
Аноним 23/12/22 Птн 02:19:51 #535 №2550350 
>>2549499
Оно хоть условиям удовлетворяет. Твоё улетит за ограничение премени при простой проверке диапазона из задачи
1 1000000000000000000
Аноним 25/12/22 Вск 00:44:30 #536 №2552847 
>>2548492
выглядит как какая то хуйня. даже лень разбираться стало
Аноним 25/12/22 Вск 01:16:50 #537 №2552883 
>>2550350
Не предусмотрел, действительно.
Даже с 100000000 тайм констрейнт похерен в двадцать раз. А как сам препод отреагирует на твоё решение, как думаешь?
>>2552847
В чем разбираться? Для экономии времени заранее создан лист с элементами 0 в диапазоне принимающих функцией чисел (т.к. создание списка в цикле занимает в полтора раза больше времени), через цикл фор проверяется условие, при выполнении которого возвращается элемент из листа, который больше нуля (2/1 == 1), т.е. первый и единственный.
Аноним 25/12/22 Вск 03:25:00 #538 №2552929 
>>2552883
> заранее создан лист с элементами
И нахрена?
Если потом выбрасываешь оттуда всё кроме одного значения?
comments powered by Disqus

Отзывы и предложения