Тред, посвящённый языку программирования Питон, #84Предыдущий: >>1638346 (OP)Литература:Автоматизация рутинных задач ч.2 - https://anonymousfiles.io/3CBCoy1o/ <-- тут только одна книжка. Кто может, залейте её на ЯД к остальным.Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUqТоже книжки: https://yadi.sk/d/tArKKuQu3KejuqБольше книжек: https://yadi.sk/d/H-00n-UG3RSQemАнон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрацииhttps://dumpz.org/ - можно постить листинги, не требует регистрацииhttps://pastebin.com/ - для листингов, регистрация не обязательнаhttps://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудитьhttps://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться#######################################ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 годаВопросы-ответы:— А стоит ли читать Лутца, том номер N?Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)— Как можно без лишней возни ускорить программу на питоне1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy. — Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. Текущая версия: https://ideone.com/lujiX5
>>1647702 (OP)Анон, если ты можешь читать только из под прокси, но не можешь писать сюда из-за бана прокси, попробуй, например, вместо .hk домен .pm
>>1647702 (OP)>Текущая версия: https://ideone.com/lujiX5Эти не дают ссылки нормально шарить.Код шапки здесь: https://dumpz.org/agmQ3QZRZ8gA
>>1647702 (OP)Заценил нумбу на каком-то говне.Если передавать список в аргументы функции - выполняется за 2.9 секунды.Если список+нумба - 23 секунды.Если преобразовать список в numpy-массив - 10.9 секунды. Лол, вообще не понял как это работает и почему массив работает хуже списка.Если массив+нумба - 1.8 секунды. (А если ещё указать float64(int32[:,:],float64[:], int64) - то 0.75 секунды, видимо первая компиляция кушает) На другом говне с крупными numpy-массивами (больше математики, меньше вложенных списков в аргументах функций и другого говна).Ванилька: 9.046 секундыНумба: 0.831 секундыНумба с указанием типов в функциях: 0.374 секундыНумба с указанием типов в функциях и приведением кода к си-стилю: 0.064 секундыЭто в 150 раз прирост. У меня есть этот же код на си строчка в строчку, и он работает в 300 раз быстрее питонного. Получается всего в два раза отставание от честно скомпилированного кода, это при том, что часть кода не компилируется. У луа похожий результат был, тоже отставание в два раза при jit-компиляции. >Почитай обязательно про модуль numbaТак что одобряю, теперь питоном почти можно пользоваться.
>>1647745Написал функцию подсчёта простых чисел до N, умеренно оптимизированную. Делаю два запуска, первый до 13, для компиляции, второй до основного числа, уже на время:Если до 100 тысяч, то время на первый запуск / основной:ванилла 3.6, <1ms, 68mspypy3, <1ms, 39msnumba (на 3.6) 242ms, 5msто есть очень долго компилирует, вся выгода улетает.Если до 10 миллионовванилла <1ms, 24.5 секундыpypy3 <1ms, 9.8 секундnumba 0.24 секунды, 1.7 секундНикаких numpy не использовалось, чисто питоновский код.Процесс компиляции реально долгий, но я потестировал, судя по всему, это время тратится за загрузку машины-компилятора numba, а не на саму компиляцию кода. Если сделать несколько функций немного разных и их скомпилировать, то разницы во времени почти нет, те же 0.24 секунды на компиляцию всех функций. Реальная альтернатива тому, чтобы писать внешние модули на Си для вычислительных задач. Ещё есть возможности для оптимизации дополнительные.Минусы: больше только для вычислительных задач. Не поддерживает асинхронный код, не совместимо с pypy. Даже классы ограниченно поддерживает.Но, питонисту про существования модуля знать обязательно, может иногда пригодиться.
>>1647777>то есть очень долго компилирует, вся выгода улетает.Просто укажи типы и время компиляции становиться смешным.По счастливой случайности я сейчас тоже балуюсь с простыми числами.Получение первых 10000 простых чисел (с сохранением в список - пробую делить новое число на цифры из списка): ваниль - 1.862, нумба - 0.653, нумба у сказанием типа (@njit(int64[:](int64))) - 0.014.100000: ваниль - 47.004, нумба - 0.830, нумба с типами - 0.2171000000: нумба - 5.758, нумба с типами - 4.880
>>1647782Хотя хуйню посоветовал, он при применении декоратора всё-равно виснет.Энивей полезно, если функция работает меньше секунды за всё время работы, то это можно и не оптимизировать в общем-то.
>>1647791Да.Для начала ты должен понять, на что они у тебя уходят - на то, чтобы скачать страницы, либо на то, чтобы именно распарсить?
>>1647794В каком смысле "скачать страницы"? Скорее всего, второе. Может, это потому, что я путешествую по json'у get'ами?
>>1647797У тебя есть строкаresponse = request.get(current_address)Это ты скачиваешь страницу. Для этого ты лезешь в интернет, это занимает какое-то время, чтобы там соединение установить, запрос отправить и т.п. Легко может получиться, что основное время именно здесь расходуется.Попробуй посчитать, сколько времени уходит на каждый запрос.JSON в норме очень быстро обрабатывается. По крайней мере через библиотеку json, про этот способ не скажу, надо смотреть.
>>1647799Ну и не советовал бы с сайтов качать с большей скоростью, лучше наоборот, задержки встраивать. Иначе легко можешь попасть в чёрный список сайта, иногда отслеживают активность.
>>16477971. Поставишь асинхронку или даже многопроцессорность для скачки данных - получишь елдой банхаммером по голове за спам запросами. Это я уже проходил много раз2. Ты общаешься с местным api?3. Какого размера у тебя выходит json? Посмотри с помощью __sizeof__
>>1647801Попробуй спрофилировать и посмотреть, на какие функции основное время расходуетсяpython -m cProfile my_script.py
Посоветуйте редактор кода. Из опробованного:вим - переборПайчармы - стойкая неприязнь ко всему, что делает джет брейнс.Всякое говно на электроне - ВС код и Атом. Сейчас пользуюсь ими, но постоянный баги ужасают, особенно то, что переключаясь на окно редактора из какого-то другого, и пытаясь провернуть колесико мышки - само окно проматывается в неизведанные дали. Видимо запоминаются движение колеса вне самого редактора и потом разом применяются. Спайдер - просто не понравился. Все неудобно, топорно, некрасиво, будто юпитер ноутбук вынесли в отдельный редактор.Посовейтуйте что-нибудь.
Как установить этот питон или че там надо, на комп(винда), типа я программку пишу оно мне считает, или окошко выводит с надписью или вопросом, как-то так.
>>1648059Установить питон быстрее чем дождаться ответа на борде, кстати.https://www.python.org/downloads/windows/Ставишь, например 3.8.2 х64, запускаешь IDLE - открывается пикрелейтед (консоль). Всё, ты можешь писать код на питоне. Ещё можно нажать ctrl+n (чувствительно к языку раскладки, лол - на русской горячие клавиши не работают), вводить несколько команд сразу и запускать по f5. Или редактировать .py файл в любом блокноте и запускать как батник.
Есть массив и есть связный список...В питонухе, как я понял, массивов нет, есть только списки (list)? В массиве же доступ к любому конкретному элементу достигается за О(1), а вот в списке за О(n) кроме первого элемента - head, к нему канешн всегда О(1)Есть ли сторонняя либа с массивами?
>>1648164MySQL таблица вида (ID, Text, Longtext, Datetime, Int, Int, Text, Datetime, Int, Json, Json)Пытаюсь выполнить запрос"INSERT INTO `table_name` (имена столбцов кроме ID) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s);"Но в итоге постоянно выдает ошибку pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sssaa'' AND date=''2020-04-01 16:30:52''' at line 1")Окей, почитал, что для даты-времени нужно использовать не просто %s, а '%s', обернул оба столбца с даой-временем таким образом. Все равно получаю хуйнюpymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2020-04-01 16:34:31'', 6, 44, NULL, ''2020-04-01 16:34:31'', NULL, '{}', NULL)' at line 1")Вот что блядь не так? Я с этой хуйней уже часа 4 сижу, разобраться не могу
>>1648180>с массивами?numpy?>в списке за О(n)Уверен насчёт этого? Откуда ты это взял? Я очень-очень сомневаюсь, что в петухоне доступ к элементу за О(n).Не интересовался как это внутри устроено, если бы я на крестах делал список, который может содержать произвольные типы - то я бы хранил это в виде массива (или дека, нужно проверять что будет лучше в общем случае) из пар (тип,указатель_на_данные). Там будет доступ за O(1), а всякие сортировки будут перемещать маленькую структуру с указателем, вместо реальных объектов.
>>1648180Доступ к любому элементу списка O(1).Удаление элемента из списка, поиск элемента в списке, то есть "element in list" - O(n)Вот таблица, кстатиhttps://wiki.python.org/moin/TimeComplexity
>>1648188>>1648180Палка на двух концах. Можно каждому элементу внутри List присвоить поле index - integer значение, которое показывает его порядковый номер в списке, тогда доступ по этому индексу будет за О(1), но вот незадача, при вставке/удалении, придется инкрементировать или декрементировать соответствующие индексы... И трудоемкость возрастает до О(n). Можно забить хуй на индексы и двигаться от head, в таком случае при удалении/вставке надо лишь переназначить смежные ссылки, но вот доступ к элементу уже будет за O(n)Тут тебя выебут либо в рот, либо в жопу, задача программа лишь выбрать одну из двух дырок, расслабиться и наслаждаться процессом
>>1647898API у них только для бизнеса, к сожалению.С __sizeof__ странная штука получается: если применять его к переменной с json'ом в консоли, показывает 216 байт, а если сохранить этот самый json в текстовый файл, получается 67 килобайт. sys.getsizeof при этом возвращает 232 байта. >>1647927Спрофилировал: больше всего времени уходит на вот эти штуки, получается.
>>1648193>>1648194Ааа, выходит что в Питонухе как раз доступ к элементу за О(1) а вот вставка/удаление трудоемкаесть классические связные списки с вставкой за О(1)? друг просит
>>1648195Может быть, такое поведение и нормально, если учитывать, что эти товары могут быть распиханы на 30 страниц? При этом на каждой странице по 30 товаров, и у каждого нужно взять цену в этом огромном json'е.
>>1648185Ты делаешь через prepared statements или просто хуяришь сформатированную строку?Я пока не смотрел, как там сделано в питоне.
>>1648195Вот значит у тебя вся задержка из-за сети, долго данные читаются, здесь надо разбираться почему.Сто лет на request не смотрел, ничего не скажу. Возможно там надо как-то сначала целиком данные скачать, каким-нибудь одним запросом, а потом скормить его json. ХЗ. А может просто сервис медленно данные отдаёт.На самом деле если ты говоришь 67 килобайт, и это за полсекунды, то это мегабит в канале. Это не так мало, ты же не один может эти данные запрашиваешь.
>>1648195Возможно, у простого get нет keep-alive, так что кучу времени жрет ссл хендшейк. Попробуй через session.
>>1648215Мне кажется, тут скорее всего не та вещь, которую тебе нужно оптимизировать. Это ведь вопрос сети, а не твоего кода. Если ты будешь слишком агрессивно качать, рискуешь попасть в чёрный список. Это, конечно, от сервиса зависит. Не факт, то им жалко, и не факт, что обнаружат.
>>1648221Апи оно на то и апи, что можно качать сколько влезет. Если есть какие-то лимиты, то они обозначены явно в документации.
>>1648224Угу, не удивительно. Замени рандом на c%1024, если хочешь.Это не важно, рандом O(1) жрёт. O(30)==O(1). Если бы доступ был за линейное, то х20 размер массива дал бы вклад несмотря на тяжёлый рандом.Что за хуета на пике? Тоже хочу такую.
>>1648209>>1648211>>1648215>>1648221>>1648223Спасибо за ответы.Приделал requests.Session - максимум на ~2 секунды сократилось время исполнения. Насколько понимаю, это либо на сервере у них стоит какое-то ограничение, либо что-то у меня с интернетом тогда.
>>1648224Это kcachegrind, профилировщик.Ты собираешь профиль с помощью cProfile, напримерpython3 -m cProfile -o data.profile my_script.pyпотом запускаешь скрипт, который конвертирует этот профиль в формат для kcachegrindpyprof2calltree -k -i data.proflekcachegrind надо предварительно поставить, а скрипт можно поставить через pip
>>1648234>>1648237По профилю тут >>1648195 видно, что основное время тратится на метод _read SSL сокета, а не на установление соединения. Мне не понятно, почему этот метод, и некоторые другие, отвечающие за соединение (set_cypther и другие), вызываются 82 раза. Такое ощущение, что реально 82 соединения устанавливается, а не 20, как анон говорил.150 миллисекунд на соединение и 67 килобайт данных это вообще прилично.
>>1648237Ну хуй знает. Попробуй ещё гзип добавить, тоже частенько улучшает. Там вроде только хедер нужен, а разжимает автоматом.
>>1648147И какого хуя запрос"INSERT INTO table (name, date_created, logo) VALUES (%s, %s, %s)"При параметрах (name, datetime, '')Вместо пустой строки в последнем параметре вставляет ебучий апостроф в таблицу? У меня конечно мозг совсем от ORM размяк, но какого хуя оно не вставляет пустую строку как сказано?
>>1648274root = soup.find("div",id="app")print(root)root_childs = [e for e in root.descendants]print(root_childs)
Якого хуя петухон переписывает переменные?Есть цикл акаfor button in buttons: label = tk.Button(self, command=lambda: print(label))вот какого хуя при нажатию на кнопку оно высирает последний элемент? как это предотвратить и выдавать то, что нужно?
Сап. С чего начать разработку бота для телеграма? Посоветуйте что посмотреть/почитать на эту тему. Программировать хочу на питоне, не особо понимаю как подключить бота к среде разработки pycharms и синхронизировать код с ботом
Как в машоб вкатиться? В интернетах либо говно, либо сразу начинают с каких то йоба задач. Пистон знаю, 3 года говнячил на джанге, надоело.
>>1648381Не читай SICP, говорили они. Ничего из него в реальной жизни не понадобится, говорили они.google://замыкание
>>1648429Но на те же datetime, когда вставляешь отформатированной строкой, я так понял надо делать именно с кавычками.А насчет >>1648250 можешь подсказать? 3й параметр - пустая строка, через DataGrip я спокойно вставляю пустую строку, а тут оно хуярит 1 кавычку как бы я не делал: оставлял параметром, переносил эти кавычки в VALUES
>>1648462дали им checkio.org, изучай, практикуй, разбирайся. нет, хотим просто читать, чтоб знания сами в голову залетали и там волшебно усваивались
>>1648381Бля, брат, ты совсем тупой? Я понимаю, что это питон и он мозги размягчает, но что ты хочешь от питона? Ты в одну и ту же переменную весь цикл пихаешь разные значения. А потом вопишь, что питон тебе говна в жопу залил, ведь в это переменной теперь не тысяча значений, а ровно одно последнее.
>>1648381Гугли python late binding. В жопаскрипте та же херня. И это нихуя не очевидно, что бы остальные ни писали.https://medium.com/@dawranliou/closures-bind-late-7b01e3abcb7b
А теперь я напишу свою охуенную историю. В прошлом треде я уже писал, что не мог разобраться с импортами. Теперь я вроде как разобрался и хочу, чтобы мне кто-то сказал правильно ли я понял или нет. Есть следующая файловая структура, на которой я тестил свою хуйню жирный шрифт -- папки, курсив -- файлыTestApp---Folder1------FileA---Folder2------FileB---mainЯ хочу из FileA импортнуть функцию look из FileB. Если в FileA написать import Folder2.FileB, то будет такая ошибка No module named 'Folder2'. Если импортить относительно, а именно вот так from .Folder2.FileB import look, то будет ошибка attempted relative import with no known parent package. При том, если в main импортить файлА и файлВ, то импорты будут работать заебись в любом из вариантов. И вот в чем вопрос, правильно ли я понимаю, что питон вообще не может импортить пакеты или файлы из директорий, который находятся выше, чем главный запускаемый скрипт?
Есть годные курсы по пректическому программированию на питоне? Лекции и книги - это хорошо, но мне больше подходят курсы, т.к. легче прогресс отслеживать, и интерактив есть. рус/англ - всё равно, но думаю на ангельском будет больше материала. Также не хотелось бы опять скипать кучу новичковских знаний, по типу "что такое циклы/условия/типизация/етс. У лутца есть книга, но она уже старая, и может не затрагивать более новых фич
Еще один тупой вопрос по запросамЗапрос:SELECT * FROM `users` WHERE login IN (%s);Данные:['abc']Ошибка:pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'abc''' at line 1")Какого хуя ему блять от меня надо? Я передал строку для выборки из колонки с типом TEXT, а оно меня нахуй шлет
>>1648695>You have an error in your SQL syntaxЕсли тебе говорят об ошибке синтаксиса, значит ты клован, который не знает синтаксис (не важно чего: питонуха, sql или лиспа). Прими это как данность
>>1648699Я бы принял это как должность, если бы тот же запрос, но с вручную подставленными даннымиSELECT * FROM `users` WHERE login IN ('abc'); не выполнялся успешно без каких-либо ошибок
>>1648685> Файлы __init__ то надеюсь замутил?С питухона 3.3+ версий инит не нужон, держу в курсе.> Ты в PATH пути добавил?Уже бегу говнякать глобальную переменную своей машины, ага. Не, брат, я эту тему глубоко копал, так как, во-первых, каждый раз, когда я делаю пет проект добавлять по 100-150 строк в пас то абсурд, во-вторых, это занимает миллиарды строк и я в рот ебал такие приколы. Про иниты я не до конца понимаю что в них нужно писать, но добавлять пустой инит ради того, чтобы питухон воспринимал папку как пакет не нужно уже как года два.
>>1648508Решил побаловаться твоим checkio, а он какой-то сломанный. Неправильно работает проверка и дальше не пущает.https://py.checkio.org/en/mission/acceptable-password-ii/
>>1648678>И вот в чем вопрос, правильно ли я понимаю, что питон вообще не может импортить пакеты или файлы из директорий, который находятся выше, чем главный запускаемый скрипт? Да, именно так. Всё остальное - обходные решения.Я думаю это сделано специально, потому что такие схемы импорта очень грязны сами по себе. Это грязная архитектура. Не должно быть таких зависимостей сложных и неочевидных. У тебя или должен быть дочерний модуль, в подкаталоге, или глобальный, прописанный в твоём окружении, например.
Пытаюсь из вашего говна перекатится в ноду, чувствую сильные беды с башкой от стрелочных функций, промисов, асинхрощины во все поля и кучи других приколов.Всё-таки от простоты пистона со временем деградируешь, не советую его учить как самый первый яп.
>>1647702 (OP)Как мне понять и почувствовать ООП? Не могу разбираться в логике всякого кода нормальных людей, когда думаю сам о архитектуре, то от ооп в голову приходит только делать простейшие классы и получать профит только от простейшей инкапсуляции. А в нормальном коде даже у простых задач вообще всё через ооп работает. А ведь там дальше ещё паттерны всякие, и сложный нагруженный код. В общем, помогите как-то влиться во всё это, только я книжки из-за сдвг не могу читать, мне лучше курсы какие-нибудь.
Привет, анон, я мимовкатывальщик 20 лвл, как ты думаешь, стоит пытаться вкатиться зная английский на достаточно слабом уровне?(могу связать пару слов и понять 60% того, что мне говорят) Есть ли смысл пробираться сквозь тернии к звездам держа в зубах переводчик? Или, может, есть актуальная русскоязычная литература, которая поможет создать фундамент для моего вкатывания? Спасибо
У меня вопрос. Вот я осилил учебник по питону, смотрю на скрипт, понимаю как он работает, как что и с чем связано. Но когда дело доходит до написание своей программы, даже самой простой, в голове появляется обезьянка и стучит в тарелки. Такое ощущение, словно мозг напрочь не может вспомнить нихуя, либо путается в строках и выходит быдлокод. При этом если берешь чужой похожий код, то можешь нормально его корректировать под себя. Как с этим бороться?
>>1649133Начни писать регекспы, пойми, что там проблема прямо противоположная. Выработай промежуточный поход, пользуйся им в обоих дисциплинах.
>>1649133Это стандартное плато, такое есть и в изучении иностранных языков например.Надо продолжать, что ещё делать, лол.
>>1649061Технический англиский несложный.Алсо, нет такого, что вот охуенная литература или курс и ты всё поймешь, а остальная вообще ни о чем. В целом они перессказывают одно и то же, кроме всяких практических кукбуков.Достаточно литературы по бидону 3+, т.е. примерно десятилетней давности. Новыми фичами можно догнаться позже, если до этого вообще дойдет дело.
>>1649153Последний оригинальный Лутц 2013 года и он сам пишет, что обновление нинужно https://learning-python.com/about-future-eds.html2011 это видимо переводное предыдущее издание. Так что есть вариант поновее, но и это сойдет.
Нужно склеить список списков в один непрерывный список. Без вложений. Можно как-нибудь однострочником?
Посоны-вкатывальщики, там на один день открыли бесплатную регу на годный курс - https://inventwithpython.com/automateudemyАвтор написал пикрил, не знаю на сколько инфа пересекается, но курс наверняка информативнее, чем книжка. Планирую изучить и то, и другое.
>>1649239Думаю, практически повторяет книгу.В принципе, я нахожу видеокурсы более продуктивным для хуя-прокрастинатора, легче удерживать внимание, чем читая пдфку. Потом можно уже углублятся в детали, почитывая документацию.
>>1649133Делай сам просто много простых задачек, похожих, по несколько раз. Чтобы вот ты себя в таких задачках свободно чувствовал. Вот такие, на несколько строк, на один-два экрана максимум, от твоего уровня зависит.При этом ОБЯЗАТЕЛЬНО возьми за правило писать их с нуля, не пользуясь своими старыми решениями, не только копи-паст не надо делать, но и даже заглядывать в них. Это всегда работает, довольно быстро и эффективно. Когда какие-нибудь новые технологии осваиваешь, тоже очень полезно.
>>1649216В принципе для этого специальная функция в модуле itertoolsimport itertoolsb =[*itertools.chain.from_iterable(a)]
Время еще одного тупого вопроса по работе с БД, как правильно написать выполнение нескольких запросов с транзакцией? Что-то типа такого? https://pastebin.com/P63DBenC
>>1649451включаешь транзакцию@хуяришь мильйон вставок@коммитишьЭто можно завернуть в try и делать роллбэк при ошибке.
До меня походу дошло, почему здесь так любят перл-стайл однострочники вместо вынесения кода в функции. Потому что иначе будет как в джаве с размазыванием логики.
>>1649454Спасибо, значит я правильно понял, просто что транзакцию не включил, а так через трай сделал сразу
Анон, я хочу написать крестики нолики, но мне не совсем понятен модуль tkinter. Почему там нельзя задавать произвольное положение кнопки? В общем, хочу пойти сложным путем, холст, рисование матрицы 3х3, обработка щелчка мыши на клетке, проверка, куда кликнул по координатам относительно окна. Как рисовать, какой модуль юзать для холста?
>>1649463Почему ты думаешь, что нельзя?button = tkinter.Button(root, text="button")button.place(x=200, y=100)Использовать всё тот же модуль tkinter, из него брать Canvas.
>>1649470Потому что я скачал дизайнер, чтоб расположить кнопки как матрицу и сука не смог их передвинуть. Согласен, это тупо, что в таком модуле нельзя было бы изменить положение, но все же. Может дизайнер есть более нормальный?
>>1649472> дизайнерНу и смысл тогда идти "сложным путём"?Гуй на питоне пишут редко, соответственно, предложение инструментов для этого куда меньше, а те, что есть, сосут в сравнении с тем же Qt Designer.
>>1649484Так. Тогда какой гуй выбрать? кьюТи? Я хочу написать ебаный тетрис, крестики нолики, еще какую-нибудь хуету.На паскале писал, там есть событие онМаусМув, и в нем я считал, на какую ячейку наведена мышь для клика. Ну и так же можно привязать на стрелки переключение фокуса активной ячейки. Вот тут тоже хочу повторить. Вообще хочется сделать полноценный вариант тетриса
>>1649493Это всё можно сделать на ткинтере, и здесь тоже есть аналогичные эвенты. Вопрос в том, обязательно ли тебе нужен дизайнер для такой сравнительно простой задачи. Крестики-нолики и тетрис - это далеко не 3д макс или фотошоп по сложности, чтобы здесь был нужен дизайнер.
>>1649505А ведь можно напердолить интерфейс на сишарпе, охуенно напердолить, красивый, а работать с модулями питона. Или это совсем пиздец?
>>1649514> пиздецМне ещё не попадались языки, где FFI был бы удобным и прозрачным, везде нужно писать кучу обёрток, конвертеров и проверок.мимо
>>1647751Если у тебя последовательные запросы, то примерно никак, с асинхронщенной ты получишь прирост только при множестве «параллельных» запросов.
Блять, анон, я что, не могу менять значение переменной внутри функции?Объявил переменную в начале кода со значением "Х"Использую ее в функции. Из этой же функции пытаюсь переопределить ее значение, так как это как бы глобальная переменная, не?, получаю ошибкуlocal variable referenced before assignment
>>1649590Тебе надо её в функции как global декларировать. Иначе ты её можешь или только как read-only, или как локальную переменную использовать.
>>1649600Да. Если ты меняешь значение глобальной переменной, её обязательно надо сначала задекларировать, как глобальную.
>>1648816у меня все работает. перезагрузи страницу, может?мой солюшен:len(password) > 6 and any(s.isdigit() for s in password)
>>1648816а, наверное у тебя сломалось из-за того, что там от прошлого солюшна вставляет код, добавляя его к новой заготовке. просто почисти от всего кроме функции (можешь тесты удалить тоже, они чисто для тебя, чтоб локально проверять)
>>1649613>>1649615Та же хуйня. Я уже и сам метода три разных придумал, лол.Перезагрузка не помогает, попробую сейчас перелогиниться и почистить всякие печеньки-файлы.
>>1649619Хотя я посмотрел, оно тупо плейнтекстом шлет на сервер, нечему ломаться на клиенте, это что-то у них.
>>1649619>>1649622ну бля, ну по размеру балдюшка на полосе прокрутки видно, что там у тебя внизу приклеилась целая простыня левого кода, не? явно не 2-3 строчки ассертов
>>1649625Пиздос, почему-то было две копии всей ботвы и эта нижняя с пустым решением.Гениально, Холмс! Никогда бы не догадался.
>>1649630да, там есть такие "серии" задач, когда твое старое решение может пригодиться, и движок чекио объединяет заготовочный файл с тем, что у тебя там раньше было. не очень продуманно, но, думаю, второй раз на эти грабли уже не наступишь
Думал, с чего начать питон изучать. Решил, что я дно полное и начал с "Jason R. Briggs — Python для детей (2017)". К середине книги автор начал допускать ошибки в коде охуел от того, что их исправлять приходилось, а потом его подача превратилась в сплошной матан без нормального объяснения, что за хуйня в коде происходит. Сделал ебучий пинг-понг, охуел с пиздецомы задач в качестве домашки.Еле как сделал 3 штуки, осталась последняя задача:"#4. Счет в игреА не добавить ли в игру подсчет очков? Каждый раз, когда мяч отскаки-вает от ракетки, счет должен расти. Сделайте так, чтобы набранные очкиотображались в правом верхнем углу игрового экрана. Здесь вам приго-дится функция itemconfi g (см. раздел «Для чего еще нужен идентифи-катор» на стр. 186)."Я в душе не ебу, что я делаю не так, я раз 8 переписывал код в попытках через "hit_paddle == True" заставить считать отскоки. Я не понял, я совсем дно ебаное или просто автор мудак?Помогите с кодом, пожалуйста, нихуя же не понятно.https://ideone.com/7KAorW
>>1649708скорее, мудак автор, если вывалил кучу гуёвого кода без понятных объясненийпервый этап:сначала создаешь переменную в ините (self.hits = 0)где детектируется хит, увеличивай её (self.hits += 1)далее можешь принтить в консоль и убедиться, что всё работаетсурс: https://ideone.com/pzxn7Iвторой этап:автор рекомендует заюзать метод погуглив, можно узнать, что метод itemconfig изменяет существующий объект: https://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.itemconfig-methodно этот объектнадо как-то создать и записать в переменную. думаю подразумевался метод Canvas.create_text: https://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_text-methodв том же ините создаем канвас: self.hit_counter = canvas.create_text((50, 50), text=0)там, где детектируется хит, вызываем метод для изменения текста: canvas.itemconfig(self.hit_counter, text=self.hit_count)можно еще по желанию облагородить какими-нибудь строкамисурс: https://ideone.com/geoBTcвот годный курс приблизительно по тому, что ты делаешь. я сам начал изучать питон с него, очень помогло:https://www.coursera.org/learn/interactive-python-1https://www.coursera.org/learn/interactive-python-2
>>1647702 (OP)На сайте MIT лежит конспект очень хорошего курса "Математика для компьютерных наук. Наблюдал кто-нибудь его перевод или что то примерно такое на русском языке?https://courses.csail.mit.edu/6.042/spring17/mcs.pdfЗаранее спасибо за ответы P.S Ненавижу "Конкретную математику"
>>1649725>первый этап:сначала создаешь переменную в ините (self.hits = 0)где детектируется хит, увеличивай её (self.hits += 1)далее можешь принтить в консоль и убедиться, что всё работаетВот это я и делал, собственно и оно не работало. Но спасибо, перечитаю
>>1649725Посмотрел твой код, теперь я понял, что шел примерно в верном направлении. Просто я пытался строкиself.hit_counter = canvas.create_text((50, 50), text='Лох')text = f'Есть отбитие №{self.hit_count}' # text = 'Есть отбитие №%d' % self.hit_countcanvas.itemconfig(self.hit_counter, text=text)вынести за пределы функции в самый низ, как завещал автор и сталкивался с тем, что не засчитывались очки. Ты сделал все намного проще. Я теперь хоть понял, что я Лошара, спасибо, хых.
В Джанго когда именно работает middleware? Я знаю что оно включается дважды во время обработки запроса. Первый раз - перед тем как request передастся во view или после? А второй - после рендеринга template или перед?
Ньюфаг на связи. Уже несколько раз слышал что питон медленный. но не ясно где эта медленность проявляется и какой гемор она приносит.Как в реальном мире мешает скорость питона? Можно живых примеров?
>>1650126"говорят, экскаватор меденно ездит, и ни одну гонку формулы 1 не выиграет, это правда?" с одной стороны - чистая правда, с другой - у экскаватора нет задач выигрывать гонки. понятно, что у новичка, который ещё не определился, что ему в будущем захочется - строить дома или в гонках участвовать, такие вопросы всегда будут возникатьтам, где нужна скорость вычислений, и индустрия развита, написано дохуя низкоуровневых либ: numpy, tensorflow, etc.там, где нужна скорость вычислений, но интерес публики слишком мал, денег нет, либ нет, жизни нет, питон просто не используется - нет коммерческих рейтрейс-рендеров на питоне, нет почти игровых ЙОБА движков с пбр-графонием, с 3д графикой ситуация пососнаякороче, где этот язык неуместен, он не используется, и поэтому задач не возникнет (говоря простым языком: >НИНУЖНА)в остальном скорость исполнения не является ключевым вопросом. большинство типовых программ на питоне выполнится достаточно быстро, чтобы никого не ебало, сколько там миллисекунд это заняло. при этом существенно проще синтаксис и проще разработка. в результате большая экономия человеческого времени, меньше багов, меньше отладки, выше читаемостькак-то так
Сап! Хочу в IT, начал изучать пистон, но вот думаю, намного быстрей научусь, если кто-то уже знающий будет учить, кто-нибудь посоветует курсы аля скилбокс (слишком поверхностно они учат, за оверпрайс) или гикбрейн, или что-то подобное, может какие-то сайты со сливами подобных курсовпомогите а?))
>>1650126Тебе уже хороший коммент дали: >>1650152В основном тебе производительность не актуальна, тебе надо решить задачу, а не заставить комп расходовать 0.1% вычислительных ресурсов на неё вместо 1%.Чаще больше мифы и какие-то цифры на синтетических тестах. Про какие задачи конкретно ты говоришь? Питон, впрочем, в первую очередь про задачи со сложной логикой, он на это заточен, а не на числодробилку и супер хайлоад.
Бляяяяяя две недели жестко чилил, а теперь кажется будто вообще не учил. Тупо все ООП забыл, хотя до этого на изичах все задания по кд решал. Сеймы есть?
>>1650661Потому что приоритет операций такой, что сначала выполняется степень, и только потом унарный минус. Прям как в математике,
Анончики, стоит учить Vue для веба? Читал, что его можно в связке с нашими фреймами ебашить.И второй вопрос - что почитать миддлу? Язык уже знаю хорошо, хочется больше практики и реальных кейсов.
>>1650741Сделай упаковку и распаковку зип-архивов, мидл.Струкртура там несложная, компрессия есть в модуле zlib.
>>1651237Петушня должна была запилить ворнинги из коробки, но не парится. Поэтому приходится полагаться на IDE
Сейчас смотрю как чувак пилит на Джанге свою веб-корзину и вижу что он часто юзает херню вроде: Product.objects.filter().first(id=pk) (как на пикриле), кто-то в курсе почему он не юзает обычный вызов Product.objects.get(id=pk), а ставит ссаное first? Типо "так круче" или что это вообще?
>>1651241Такими темпами скоро питон превратится в жабу, на которой ни строчки без иде не написать.from com.palletsprojects.flask.web.application import FlaskApplicationContextConfigurer
>>1651307from statistics import meanres = {}for d in numbv:----res[d["city"]] = mean(d["b"]) # если ключи уникальны
>>1651320А насколько выгоднее будет сделать так?res = {d["city"]:mean(d["b"]) for d in a}Везде пишут, что компрешеншены выгоднее, но насколько?
Итак, вот скажите как есть. Вам с джангой тяжело было разбираться? Смотрю видео, листаю документацию и порой охуеваю от количества последовательностей, которые необходимо выполнить. Может нужна какая-то дополнительная база, чтобы информация более легче переваривалась?
>>1651425Джанго это максимально удобный и медленный фреймворк, на реальных проектах будет какой нибудь форк асинхронного фреймворка и низкоуровневый апи к базе. Вот там ты и охуеешь.
>>1651425Нет, просто Джанго хуета. Там изначально был допущен ряд конструктивных решений, который в общем-то предопределило его судьбу. Короче, пайтон и веб - это такое себе.
Ебать сколько книг. И в каком порядке это все читать, чтоб дойти до нейросетей? Литература ужасно несистематизированна, непонятно где для вкатывающихся, где для отбитых гуманитариев, а где для понимающих.
>>1651425Очень стройный и хороший движок, с одной проблемой, архитектурно он синхронный, все решения заточены под запрос-ответ. Встроена масса возможностей, при этом ими не обязательно пользоваться, если они не нужны, от них можно отказаться. Встроенные решения несложно заменить на альтернативные. Далеко не везде так.Может тебе действительно какой-то базы не хватает, чтобы освоить, что зачем нужно и почему сделано так.
>>1651449Работает, но спроектирован местами немного убого. Чего вебсокеты стоят, куда более кривые, чем вебсокеты обычные, не из aiohttp. И возможностей из коробки мало.Совсем-совсем не джанго. Но зато асинхронный.
>>1651262Ты еблан, твой обычный вызов возвращает объект запроса в орм. First() возвращает первый объект соответствующий запросу. All() вернёт все варианты. Дно ебаное
>>1650867Эта стрелочка показывает тип данных, которые возвращает метод. Полезно для ридблсти и автодокументирования кода.
>>1651262Блять ты знаешь как пишутся sql запросы? Так вот, тут ты можешь делать выборку элементов, в ней делать опять выборку и т.д.. Только ормка защитит тебя от багов, скл инъекций и десериализации
>>1651476Вебсокетами из websockets удобно пользоваться. А как сделали в aiohttp совсем нет. Я имею в виду серверную часть.
>>1648937++ Такой же опыт, когда пытаешься "понять" паттерны проектирования, в итоге ния не понимаешь. Я себя доводил даже до ощущения что схожу с ума. В общем лучше всего, думаю, ознакомится с теорией основных 5-7 паттернов (погуглить, есть сайтик с подробной инфой и примерами для пайтона), почитать про них в вики, тоже разобрать примеры (но не тратить на каждый больше 5-10 минут, лучше забить на такие) и попробовать, не особо увлекаясь почитать примеры на других языках, яваскрипт,или ява.Ну и потом изучить какой-нибудь лёгкий фреймворк, типа aiogram, scrapy, или небольшие рест при какие-нибудь, написать пару проектов, заюзав как можно больше функций и потом почитать исходники фреймворка, осознать паттерны в исходниках, осознать говно в твоём коде и наконец написать ещё один проект. Поздравляю, теперь ты понимаешь ООП чуточку лучше.
>>1651493Прикол в том, что ты не должен смотреть как это сделать, ты должен узнать столько, чтобы самому знать ответ на этот вопрос. Так обучение происходит намного быстрее и качественнее.
>>1651493Надо совмещать, и самому писать, и читать.Если ты будешь только сам писать, ты в пионерство ударишься, в клепание велосипедов, не будешь знать многих паттернов и подходов, решений, которые активно используются. И вообще, не разовьёшь важный и нужный навык, разбираться в чужом коде.
>>1651582malenki_pisya = OCHE_BOLSHA_PISYAfor stroka in stroki:....if chetni_stroka:........continue....for element in elementi:........if chetni_stolbets:............continue........if element < malenki_pisya:............malenki_pisya = element
>>1651582m = [[], [], []] - список списков, типа двумерный массивsubarray = []for row_num, row in enumerate(m):____if row_num in S1:________for col_num, x in enumerate(row):____________if col_num in S2 and x % 2 == 0:________________subarray.append(x)
>>1651599Почитай где-нибудь, как найти самый маленький элемент в простом списке, тогда псевдокод станет понятен.
>>1651600Короче, обходишь циклом. Что тебе нужно знать:enumerate(m)встроенная функция питона, которая возвращает пару номер элемента и сам элементпроверяешь, входит ли нужный элемент в множество, если да, используешь его.Всё остальное совсем тривиально, ты должен сам это знать и уметь.
>>1651481>First() возвращает первый объект соответствующий запросуВ запросе в котором либо один объект, либо нихуя>>1651484Ты дурачок? Я спрашиваю почему юзается first и filter вместо просто get. Поиск там идет по уникальному ийдишнику
Да, вопрос не по теме треда, но что проще для вкатыша - вью или реакт? Чтобы вот просто взять и начать верстать с гуглом минимальными знаниями js/html/cssУсловно нужно прикрутить адекватный вротенд к новостному парсеру, а пользоваться встроенным шаблонизатором фласка как-то уже стремно; хочется полноценное приложение для гитхаба
Есть тут pygame-шизики? Малой в школу ходит, и тут приходит, и говорит: КАК ЭТО НАРИСОВАТЬ? Сука, а я тожеж никогда не любил чертить или рисовать на ЯП. Как вспомню, как в шараге на ебучем турбопаскале всякие домики рисовали... Короче, збахайте, плес. С меня тонны нефти. Соре за шакальное качество
В чем разница между pip install и pip3 install?У меня на винде 3й Питон (3.8 и 3.7), всегда писал pip install и все было норм. Установил на еще один комп Убунту, там терминал почем-то отказывался понимать команду pip и требовал только pip3. Почему так?
>>1651818Там какие-то анальные пляски с названиями на фоне смены версий. python, python3. С пипом то же самое, надо думать.
Можно ли как-то в networkx или еще где пары ребер графа в таком виде представлять? Ну тупа сначала если как на пикче 4 полоски высрать, и по ним уже строить остальное?
Какая мотивация выпиливать функционал символа '-' из строки форматирования в f-строках?Я сначала подумал, что в питоне вовсе отказались от этого и поддерживается только в си — но нет, через % работает, через f-строку - не работает.
>>1652018В первом случае ф-строка отрабатывает без результатов, и потом отрабатывает %.Во втором случае ты ломаешь ф-строку синтаксисом, который она не понимает.Всё логично.
>>1652028В первом случае там не ф-строка, я просто f забыл удалить.>который она не понимает.Почему не понимает? Я вот как раз про это спрашивал. Разве ф-строка не подразумевается как синтаксический сахар для форматирования через %?Нашёл, что можно написать f"{23: >6d} {34: <6d} {'ab': >6s} {'ba': <6s}", кстати.
>>1651818Хуйня "явное лучше чем неявное" никакого отношения к этому не имеет.На линуксах долгое время был и есть второй питон. И тысячи скриптов, которые никто не хочет переписывать, вызывали его именно через python и pip. При миграции на третью версию понадобилось одновременно держать две версии питона. Чтобы не сломать старые скрипты, второй питон называют просто питоном, а чтобы юзать третий, нужно добавить 3. Это не проблема именно питона, она общая для всего линукса все эти убогие "2", ".so.2", "-ng" не от хорошей жизни появились.А идея изначально хорошей казалась - не тащить десяток копий одной либы для разных прог. Теперь же это всех настолько заебало, что придумывают даже уже не в снап, а в докер-образы оборачивать каждую утилиту. Так и живём.
>>1652041а когда второй питон умерт, будем переобуваться обратно, пока 4й не появится к которому прихуячим новые значения, кек
>>1652038Нет, это разные синтаксисы. Для спринтф-подобного остается %.В ф-строки можно даже код внедрять. Читай документацию, в общем.
>>1652038f строки это развитие str.format()вместо '{}{}{}'.format(foo, bar, baz)пишешь f'{foo}{bar}{baz}'и охуеваешь, как раньше без этого жил
>>1647702 (OP)Сап, петонач.Каков порог вхождения, тяжело ли даётся писать веб-говно — нужно ли оно, если есть желание стать жуниор-питонистом?Опишите петон тремя словами.
>>1652249порог вхождения в питон довольно низкий, но если совсем новичок, то лучше поизучать алгоритмы и всякое разное, используя какие-нибудь Си.Веб-говно, если ты имеешь в виду бекенды, то пишется отлично, это одно из частых применений питона."нужно ли оно" хуй знает что ты тут хотел сказатьОписал тебя двумя словами двачер калоед
>>1652249> Каков порог вхожденияОчень низкий, считай псевдокод.> тяжело ли даётся писать веб-говноЛегко.> нужно ли оно, если есть желание стать жуниор-питонистом?Нужно, но имей в виду, что из-за лёгкости питона конкуренция ебически высокая.
>>1652287> моржамиНужно в одном случае из ста.> слэшами в аргументахНе нужно. Как и keyword-only. Жду, когда ещё добавят хуиты типа spaceship <=> operator.
>>1652309бомбануло, что они при этом еще и засрали интуитивный синтаксис, типа "as" вместо моржа и тупль для позишн-онли аргументов вместо слэша между запятых
>>1652059Да не, тут по-моему извечная борьба интеграции и разбиения.Можно каждый ls выделить в отдельный микросервис, но ему надо взаимодействовать с внешним миром всё равно. Вот сейчас его помещают в его маленький уютный мирок в зафиксированном намертво окружении, но потом окажется, что с внешним миром он взаимодействует через API, а API, сюрприз, тоже может меняться в зависимости от версии. А внутри окружения могут быть какие-то модули с критическими уязвимостями. И так вернёмся к тому, с чего начинали.Примерно как динамическую линковку делали для того, чтобы избежать дублирования и чтобы можно было независимо править баги в библиотеках. Но в итоге начался гемор с совместимостью версий. Нет универсальной пилюли.
>>1652042Даже внутри третьего питона не всё так очевидно. Его постоянно дорабатывают, появляются новые фичи, а некоторые старые объявляются как depricated. И вот ты пишешь софт, используешь фичу, а ещё потом объявляют> Deprecated since version 3.7, will be removed in version 3.9(особый лес такого с 3.10)То есть у тебя даже при вызове python3 нет гарантии, что код всегда работать будет.
https://pastebin.com/KxzJBW7Xкто объяснит почему выводCalling method on Base ClassCalling method on Right SubclassCalling method on Left SubclassCalling method on Subclass[Finished in 0.1s]
>>1652373пиздец меня бомбит от этой хиутыв книжке написано, что МРО идет слева направо, а в реале справа налево
>>1652374>>1652373class SubClass(LeftSubclass, RightSubclass): num_sub_calls = 0 def call_me(self): super().call_me() print("Calling method on Subclass") self.num_sub_calls += 1>>> SubClass.__mro__(<class 'inh_oop.SubClass'>, <class 'inh_oop.LeftSubclass'>, <class 'inh_oop.RightSubclass'>, <class 'inh_oop.BaseClass'>, <class 'object'>)а в реале справа налево
>>1648937читай книжки вумныеhttps://dropmefiles.com/UNVJ0я сам сквозь эту поеботу с огромным трудом идублять сколько всякой хуиты придумали
>>1652379Эх, помню как на работе, недо-ждун с пеной у рта мне доказывал что "а чо тут такова, один раз жи, всё норм будет", после того как заменил логику без глобала на глобал.Получилось выиграть аж 2 строчки кода.
>>1652525вот вопрос еще:https://ru.stackoverflow.com/questions/1106804/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-super-%D0%B2%D1%8B%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4-%D0%B2-%D0%BE%D0%B1%D0%BE%D0%B8%D1%85-%D1%81%D1%83%D0%BF%D0%B5%D1%80%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85
Такой код: https://pastebin.com/RmfQyFcwРезультат такойCalling method on Base ClassCalling method on Right SubclassCalling method on Left SubclassCalling method on SubClass[Finished in 0.1s]Получается, что SubClass.call_me() всегда вызывает указанный метод у всех суперклассов (при его наличии)? А как же правило лишь о первом найденном совпадении? Разве SubClass.call_me() не должен вызвать лишь первый найденный у своих суперклассов метод, считая слева направо (здесь: LeftSubClass)К тому же непонятен порядок печати. Получается такой порядок исполнения кода, из дебаггера https://www.onlinegdb.com/online_python_debugger16 SubClass.call_me()17 SubClass.super().call_me() # вызывает call_me() первого слева суперкласса LestSubClass 6 LeftSubClass.call_me()# тут странность: на строке 7 вызывается не сall_me() суперкласса# LeftSubClass - BaseClass, а RightSubClass.call_me()7 LeftSubClass.super().call_me() # вызван RightSubClass.call_me()11 RightSubClass.call_me() # RightSubClass вызывает сall_me() у BaseClass12 BaseClass.call_me() # print("Calling method on Base Class")# тут начались странности: # print("Calling method on Right Subclass")# print("Calling method on Left Subclass") # print("Calling method on SubClass") Получается, что на строке 7 вызывается не сall_me() суперкласса LeftSubClass (BaseClass), а RightSubClass.call_me(). Почему так? И почему такой порядок принтов?вот что написано в книжке:First call_me of Subclass calls super().call_me() , which happens to refer to LeftSubclass.call_me(). LeftSubclass.call_me() then calls super().call_me(), but in this case, super() is referring to RightSubclass.call_me(). Pay particular attention to this; the super call is not calling the method on the superclass of LeftSubclass (which is BaseClass), it is calling RightSubclass, even though it is not a parent of LeftSubclass! This is the next method, not the parent method. RightSubclass then calls BaseClass and the super calls have ensured each method in the class hierarchy is executed once.Кто понмиает\знает, почему тут:1. "the super call is not calling the method on the superclass of LeftSubclass (which is BaseClass), it is calling RightSubclass, even though it is not a parent of LeftSubclass!"?2. почему "LeftSubclass.call_me() then calls super().call_me(), but in this case, super() is referring to RightSubclass.call_me()"?3. что такое "the next method"?
Как сделать так, чтобы метод класса (через @classmethod) при вызове от объекта выдавал ошибку? И какое исключение для этого лучше?
>>1652694Можно попробовать написать свой декоратор, который будет проверять, что тип параметра не является текущим классом (каким-нибудь inspect.isclass). Ну и кидать какой-нибудь TypeError.
>>1652703Скорее всего пытаешься строить велосипеды, когда есть typing или существующие на нем надстройки для проверок>>1652694Через type(object) == type (для класса будет True)
Есть лист со словарями видаlist = [{'a':'foo', 'b':'bar', 'c':1}, {'a':'foo', 'b':'bar', 'c':2}, {'a':'foo', 'b':'bar', 'c':3}, {'a':'hui', 'b':'pizda', 'c':1}, {'a':'hui', 'b':'pizda', 'c':2}Как эту хуйню лучше всего свернуть, чтобы вместо словарей с постоянно повторяющимися ключами был 1 словарь, а ключи "с", которые от словаря к словарю разные - склеить в лист?
>>1652863Нет, ключи повторяются, но встречаются различия>{'a':'foo', 'b':'bar', 'c':1}>{'a':'hui', 'b':'pizda', 'c':1}Так что так не выйдет
>>1652878Ну тогда так https://ideone.com/n7rOMiПри необходимости можно ещё раз пройтись и сконвертировать сеты в списки или одинарные значения.
Аноны, всем доброго вечера.Пытаюсь разобраться с вот этим https://github.com/vanyasem/VK-Scraper парсером, не зная основ.Что сделал?Установил необходимые requests, tqdm, vk_api, youtube_dlЗашёл в idle , запустил, почитал ошибкиВ папке vk_scraper создал vk_args.txt и вписал туда логпасс от своего фейкаАйди пациента вписал в сам app.py в 49 строкеИ снова соснул с ошибками на строки 496 и 472https://github.com/vanyasem/VK-Scraper/blob/master/vk_scraper/app.pyАнон, подскажи позязяВ какие строки в итоге вписывать свой айди и пасс, а в какую - айди владельца альбомов с фото? И как правильно прописать destination для винды?
>>1647702 (OP)Переставил себе ось, все почитил, июо чувствовал себя за ПК как ОКРщик, быдто даже дышал этой пылью. Ну и соотвественно проебал кряк пичарма ну не плотить же, так вот, помогите с кряком ибо где его искать, один бог знает, а как мы знаем, он уже умер и убили его мы. С меня как обычно человеческое спасибо
>>1647702 (OP)Cап! Помогите с count():Допустим, мне нужно найти "near" в тексте. При использовании count("near") также засчитает все производные слова - nearly и прочее. Как без регулярок решить эту проблему? в голову приходят только колхозные варианты - добавить пробел в конец поискового паттерна но тогда слова в конце строк считать не будет
>>1653575Я ещё пизже способ придумал - через str.find пройтись по строке, и края найденного слова проверять на isalpha.
Доставьте гайд по асинхрощине вообще прям для самых конченных даунов если таковой вообще существуетХочу переписать парсер с обычных реквестов с пул экзекутером под aiohttp и посмотреть как оно ваще. Но пока тупо не понимаю че за корутины, как они друг с другом взаимодействуют и почему это работает так быстро даже с наличием GIL'а
>>1653584Асинхронщина работает просто - ты запускаешь какое-то действие и коллбек для него, который надо выполнить, когда оно отработает.В хттп реквесте 99% времени это ожидание данных, так что можно ждать много ответов одновременно.Вот и всё.
Долбоеб на аноне хочет понять, как исправить ошибку и как её больше не допускать и просит помощи анонов
>>1653593> пытаться деструктурировать строку> написать if с большой буквы> не поставить двоеточия> не поставить отступы> IDLE
>>1653593invalid syntax потому что If с большойобрати внимание на использование input - там должен быть .split, так как на вход ты пишешь строку и функция input возвратит тебе строку (а не 3 элемента)а также отступов нет - программа даже визуально красивее смотрится когда есть отступыдвоеточий нет после if-else-elif - в пайтоне это надо делатьжелательно a==b и тд ставить в () - так будет красивее
>>1653639>>1653594>>1653587Спасибо. Я уже успел забанится за слишком большое кол-во запросов на переписанном парсере.
А насколько быстро можно усвоить стек питон + фласк, монго, докер, сокет.ио, json-rpc, меркуриал, редис, мемкешд, xml, протобаф?
>>1653665Немного трогал голый питон, по работе пишу на нем всякие простенькие скрипты для аналитики, также по работе делаю несложные запросы к бд на sql-диалекте яндекса (дома трогал постгрес, MS SQL Server, но в целом одно и то же). А так опыта программирования нет, я ПМ.
Бля, хуле это мудло пишет мне при попытках обновить/установить пакеты в виртуальной среде:Could not install packages due to an EnvironmentError: [WinError 5] Отказано в доступе: 'c:\\program files\\python38\\lib\\site-packages\\pip-19.2.3.dist-info\\entry_points.txt'Но у меня-то не 3.8 в venv стоит, а 3.7! Какого хуя вообще происходит? Откуда оно там взялось блять?
>>1653725А схуя ли у тебя питон в програм файлс? Вот и нет прав туда писать.Ищи в программах и удаляй. И path надо будет подправить, там должно быть.
Это рофлы такие? Почему дебагинг мне говорит об ошибке на нулевой (!) строке моего основного шаблона?Очевидно что он крашнулся не на нулевой строке этой template (я даже примерно догадываюсь где), вопрос в том, почему он мне пишет об этом?..ну это ж 3я версия джанги блин, ну как такой уебищный дебаг вообще возможен?
Сап, ананасы! Помогите неофиту.Допустим, есть строка с предложением без знаков препинания.Какими способами можно расставить в нём запятые по заданной грамматике?Первое, что пришло в голову, это сделать список слов и предлогов, чтоб в цикле искать по ним подстроки и подставлять запятые по индексам, но мне кажется, что существует подход получше.
>>1653825Невозможно.Почему предложение без знаков препинания читать сложно? Потому что способов их расставить много, и от них сильно меняется смысл. И читающему приходится догадываться о смысле по контексту.Самый реалистичный вариант - машинное обучение. Там, может, что-то да получится.
>>1653828Это и так понятно, я и не ставлю целью воспроизвести синтаксис целиком, только отдельные правила вроде "..., a ...", "например, ...", "... потому, что ..." и так далее. Мой вопрос был только в способе поиска и подстановки таких паттернов в строке.
>>1653832>не ебаться с экспешенамиТо есть вместо того чтоб адекватно получить эксепшн и обработать его, мы условно ставим self.value = None? Совет на все времена нет Осталось только из каждой функции None возвращать, когда получаем непредвиденное значение (и заодно проверять результат каждой функции на None)
А что там, кстати, по новой Джанге? Скоро повсеместно переходить начнут, как думаете? И насколько всё изменит это введение асинхронщины?
>>1653559>Как без регулярок решить эту проблему?Но это же типичный вопрос именно для регулярок. Они идеально для этого подходят, быстрые и оптимизированные.
Существуют ли Junior Python разработчики? Мне кажется, что нет. В условиях повышения требований нанимают тех, кто уже вырос из данного определения. И что должен уметь Junior/Middle? Какие сопутствующие технологии(если говорить про бэкэнд веба)? В вакансии не посылать, там 90% ебанутых HRш, лепящих всё подряд.
>>1653997> re.compileКстати, интересно, почему так до сих пор пишут, если, вроде как, пайтон их всё равно на ходу компилирует и кеширует. Разве что, чтобы паттерн в какую-нибудь красивую переменную засунуть.
>>1654000>там 90% ебанутых HRш, лепящих всё подрядсильно преувеличил, поскроллишь штук 10 и найдешь вполне адекватные требования вообще это классный двачевский для оправдания самого себя, я так понимаю ты даже не открывал вакансии
>>1654000Существуют, ведь до мидла надо ещё вырасти, и это не 1-2 месяца занимает.Зря ты так к вакансиям относишься, читай только требования(технологии именно) и поймёшь что те е надо учить.
>>1654000Мало кто напишет "Джуниор", сразу ломанутся те, кому ещё в стажёры рано. И не понятно, почему считается, что джуниор это тот, кто совсем чего-то знает. Вообще, на других квалифицированных специальностях после ВУЗа (4-6 лет!) ты идёшь на работу и тоже на младшего. А двочеры почему-то считают, что вот можно полгода поучиться и сразу идти работать.Вообще, может стоит поискать вакансии в QA на какое-то время, но это именно в фирму к разработчикам идти надо. Так будет реальный опыт работы на реальном производстве.
Что в форматировании/проектировании питоновского кода мгновенно может выдать во мне пришлого еблана?Скажем, я хорошо разговариваю по английски и дружу с грамматикой, но говорю с дичайшим руснявым акцентом, отчего все на меня будут косо смотреть. Что аналогия для этого в Пистоне?
>>1654190Спасибо! а если нужно применить функцию к каждому отдельному объекту в матрице? Например: создать из 2-х мерной матрицы чисел, матрицу из этих же самых чисел но типа str?
Что можете посоветовать неофиту для вката, что нибудб подробное по типу лутца, только попизже и без воды? Хочу сильную базу прочитать.Уже прочел укус питона, щас читаю грокаем алгоритмы
>>1654158А че если им напиздеть что я окончил техновышку (на самом деле я гуманитарий) сказать им что знаю виндовс как 5 пальцев и готов работать за еду первое время. Есть шансы что возьмут? Я ебаный гуманитарий и учу питон, так хоть погрузился бы в атмосферу айти и было бы проще и быстрее вкатываться..
>>1654218>готов работать за еду первое времяНе думаю, что это кому-то интересно. Вот реально, мало-мальски большим работодателям это не интересно. Интересно хороших людей найти, а не чуть-чуть сэкономить. Хотя если как-то вбросишь, что деньги не главное на начальном этапе, то может просто отношение лучше будет.>>1654218>А че если им напиздеть что я окончил техновышку (на самом деле я гуманитарий)Скорее всего с тобой начнут разговор с того, где ты учился, на каком факультете, тема курсовых и диплома и т.п. Не пытайся обманывать в таких вещах, это сразу вскроется и отношение будет соответствующее. Скажи просто из серии, что вот хоть и гуманитарий, но всё равно в первую очередь компы интересовали и вообще именно в айти хочешь.Вакансия смотрится интересной, но не факт, что попасть туда просто. Но попробуй, почему нет.
Захотел тут по человечески перекомпоновать проект - вынести весь свой говнокод в отдельную директорию и попробовать накатить докер заодно.Обесните, (на пике открыт bot.py) почему пичарм подсвечивает, что якобы некоторых модулей не существует? Хотя они всегда находились рядом, но сейчас их просто всех вместе перенесли из ./ в ./src/Более того, проект работает. Я где-то (да) объебался или пичарм бесноебит?
>>1653840Да, именно так. try except не всегда удобно.value1 = .first()value2 = .first()value3 = .first()if value1 and value2:elif value3 and value1:elif value2 and value3:Че-нибудь такого рода. Но тебе виднее, дело вкуса (а еще try except по производительности хуже:))
>>1654310>>1654288>>1654287Благодарю за оперативное пояснение. Все поправил, оптимизировал импорты, добавил __init__.pyА ещё я успешно собрал докер образ, запулил его на вдс и развернул помощью компоуза, оч все понравилось, ппц как удобно всё придумано блин.Мож нахуй ваще этого удава и попробовать вкатится в девопсы
Что такое аргумент self? Покажите на пальцах, а то везде слишком абстрактно описано. Нужен максимально понятный пример, а то я ебанусь и больше не встану.
>>1654396При вызове метода объекта ему автоматически передается сам объект первым аргументом. Это и есть селф.https://ideone.com/ECUTRqТ.е. ты вызываешь как в строке 10, происходит то что в строке 11.
>>1654396Есть class Dom.В нормальном доме у тебя будут атрибуты dweri, okna, sralnik и методы otktit_okno, smit_sralnik. Окна могут быть деревянными или пластиковыми, одннокамерными, двухкамерными, разного цвета и т.д. Self нужен для того, чтобы при изменении этих параметров или выполнении каких-то действий всё это происходило в конкретном доме, а не во всех домах вообще. Потому что окна есть и у машин и у твоих соседей в домах. Но ты-то создал свой Дом(экземпляр класса) и хочешь производить действия конкретно со своим эксземлпяром.
>>1654436Там есть довольно странные задачки. Например https://py.checkio.org/en/mission/unix-match-part-1/Хочется решить как-то просто базовыми средствами, но понимаешь, что придется городить огрод. Поэтому решение заключается в идиотской переделке в регексп.Не очень понимаю учебную ценность такого.
Я совсем новый ньюфаг в питоне, разбираюсь с черепахой. У меня встал вопрос: я пишу код, потом в командной строке запускаю его, черепаха идет по нужным координатам с заданными параметрами - ОК, получается. Вопрос - как мне менять ее положение уже во время выполнения программы? Я вижу, что в документации идет >>> приглашение к каждому действию, но не понимаю как совместить режим исполнения командной строки и режим питона.
>>1654479Если я правильно тебя понял - ты запускаешь файлы через cmd типа>python huepaha.pyА >документации идет >>> приглашение к каждому действиюЭто сам интерпретатор, просто напиши python в cmd или в папке найди исполняемый файл
>>1654455ага, это типа задачка для fnmatch или glob. ты можешь решить задачу за 30 минут базовыми методами, а можешь заюзать либу и за 30 секунд пройти все чеки. я считаю, проработать вопрос самому, а потом глянуть на солюшны других людей и увидеть более валидное решение - это довольно поучительно, и в этом один из главных приколов чекио лично для меня. а в данном случае импорт fnmatch запрещен чекером чекио, видимо, по причинам безопасности, и ты всё равно вынужден будешь напилить ненужный велосипед. кекну это чисто технопроблема, а вот что некоторые задачки без специального знания какого-то алгоритма решить почти невозможно - это конкретный проёб. там, где всякая комбинаторика, особенно сложно. ты или пишешь прикольный алгоритм на 10 строк, о котором автор задачи узнал в универе, или по хардкору хуячишь кучу солверов и решаешь задачу численно, если захочешь столько ебаться, конечно. но всё равно обсираешься, потому что ассерт на сервере проверяет какой-то корнер кейс, который справедлив конкретно для "красивого решения" и не приемлет альтернативных решений в принципе
Подскажите эффективный способ хранить данные типа ключ : значение, если ключ - интовый уникальный идентификатор, а - просто инт. { 123125 = 12, 12319023812= 1293812938912, ...} Я хотел хранить в дикте, но на стаковерфлоу сказали что это будет неэффективно при динамически меняемом наборе ключей.
>>1654489у тебя терабайты данных?если нет, то забей. там просто очкуют, что говноумник в комментах их "срежет", уровнив их авторитет, вынудив извиняться и дополнять, поэтому стараются охватить своим ответом ВСЁ
>>1654277>всем похуйНу-нуОдин раз пидором назовут и потом уже будет такая кличка. Меня батя предупреждал
>>1654491Не терабайты, но мне очень критична скорость обработки, очень.А именно итерироватие / поиск элемента.
хотя в новых йоба диктах cpython может быть какая-нибудь оптимизация, и всё будет работать с той же скоростью
>>1654390>пщ-тредеШо?>>1654493>dict>мне очень критична скорость обработкиНу почему никто не читает про алгоритмы и структуры данных?..
>>1654494Ты шутишь? Я пока буду к ней стучаться/получать ответ, я триcта раза смогу это все обойти.>>1654496Какой носклюль? Есть же примитивные типы в питоне, все что поверх этого - тормознутый оверхед>>1654497И чем в дереве плоха скорость обработки?В крестах std::map работает быстрее листа при достаточном количестве элементовЯ ж не знаю что у вас быстрее/что медленнее работает, поэтому сюда и пришел
>>1654501Хранить структуру данных состоящих из пары инт инт.Наиболее быстрый обход структуры и поиск элемента по значению.В плюсах это либо std::vector< std::pair<int, int> >, либо std::map<int, int>. Первое работает быстрее при небольшом количестве элементов.
>>1654499> Какой носклюль? Есть же примитивные типы в питоне, все что поверх этого - тормознутый оверхедНу какбе питон тоже не заточен под скорость.Я думаю та же редиска будет быстрее начиная с некоторого довольно небольшого объема.
>>1654502>std::map<int, int>Может быть unordered_map всё-таки? map же говно ебаное с плохой константой.Дефолтный словарь это unordered_map, время доступа константное.Попробуй from typing import TypedDict ещё. Я чёрт его знает что это, просто проверил если ли типизированные словари - и они нашлось.
>>1654507Для 100 элементов пока этот хеш вычислится я чай успею сделатьПри больше 1000-10000 да, решает.Мап еще и может оптимизировать поиск до логарифма, не знаю правда как.>import TypedDictНу очевидный оверхед над обычными типами, они то может удобнее и практичнее но точно не быстрее>Дефолтный словарь это unordered_mapДаже с интами, питон все равно хеш считает?
>>1654508Мап - сортированное дерево, вот тебе и логарифм для поиска в виде высоты дерева.Стоит его использовать, только если тебе эта сортировка нужна постоянно. Во всех остальных случаях как ты и сказал - вектор на малом количестве и хеш-таблица на большом. Мап на любом количестве проиграет вектору или таблице, скорее всего - ведь там даже доступ к элементу за логарифм, лол.>TypedDictДа я сейчас почитал, это вообще не то. Название обмануло меня.Просто в нумбе (http://numba.pydata.org/numba-doc/latest/user/jitclass.html#specifying-numba-typed-containers-as-class-members) typed-dict это совсем другое, там явно тип указывается, и потому я подумал что другой TypedDict это тоже что-то подходящее.
>>1654508>Даже с интами, питон все равно хеш считает?Да, конечно. Но подсчёт хеша очень быстр и о нём в принципе не нужно думать, актуальны могут быть вопросы дальнейшего поиска, добавления и удаления элементов.Я сейчас какие-то синтетические тесты проделал, с большими словарями и большим количеством операций, разные стратегии добавления элементов в словарь и удаления практически никак не влияют. Размер тоже никак не влияет, если словарь большой и в кеш процессора уже всё не влезает.Словари в питоне очень-очень быстры и не надо пытаться что-то придумывать вместо них в таком случае. Если ты пытаешься уже здесь оптимизировать, то тебе питон не нужен.Поиск-удаление это O(1) в норме. Но в плохом случае может доходить до O(N), это если неудачно дерево строится, из-за неудачного хеша это возможно. Но это надо специально под этот хеш программу строить. Рандом и "подряд" работают примерно одинаково в тестах.В питоне внутри всё реализовано через словари. Ты когда функцию вызываешь, в ней локальные переменные тоже в словарях. Всё в словарях. Поэтому работа с ними оптимизирована по-максимуму. И поэтому же пытаться тут что-то выиграть бесполезно. Объём занимаемой памяти можно выиграть, если специальные либы использовать.
Не могу найти в PEP8, надо ли юзать пробелы например при передаче аргументов в функцию?compute(img, kp)А если это цвета\точки? set_color(0,255,0)
>>1654523>Не могу найти в PEP8Это порево двадцатитетней давности, времён 15 дюймовых мониторов редакторов, работающих в текстовом 80-колоночном режиме. Не обязательно дрочить на него.>>1654523>надо ли юзать пробелы например при передаче аргументов в функциюПосле запятой - надо. PEP8 рекомендует НЕ ставить пробел тогда, когда присваивание в передаче параметров делается, вокруг знака равно. Но после запятой надо. func(par1, par2=2, par3=3)>А если это цвета\точки? Всегда, и в tuple тоже.Вообще здесь естьhttps://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statementsПросто посмотри описанные примеры. Без пробела после запятой очень неудобно читать, это вообще стандарт, и в программировании, и в оформлении текстов.
Помогите разобраться с iterator и iterable.iterable - это то, что имеет метод __iter__(), который возвращает итератор, а итератор - это то, что имеет метод __next__(), так? Правильно ли я понимаю,что когда я пишуl = [1, 2, 3]for i in l:...на самом деле неявно вызывается l.__iter__(), из которого потом берутся next?
>>1654574Да, всё именно так. Почти.Сначала вызывается l.__iter()__Он возвращает итератор, это этот итератор не обязательно тот самый l. Более того, скорее желательно, чтобы это был какой-то другой объект. Демо-примеры итераторов в этом плане не очень корректны (те, что возвращают self), они свалятся за примереfor i in L:___for j in L:______print(i, j)но не всегда это актуально.
>>1654574>>1654589https://treyhunner.com/2016/12/python-iterator-protocol-how-for-loops-work/Вот почитайте
Ясно понятно модер данной борды пидорас удалил мой тред. Дублирую сюда: За год собираюсь вкатиться в классический питон+маш об. Заниматься буду 8-12 часов 6-7 дней в неделю. Знаю основы прогерства, по вышмату и статистике 5. Планирую после вката съёбывать в Силиконовую долину, но вкатывать буду без диплома. В чём подводные и почему нет?
Помогите, как вывести множество - print(*sorted(VSEYAZIKI,key=str), чтобы они шли не в одну строку. желательно без циклов
>>1654653Забивал уже, но кидает на забугорные сайты, где все говорят исключительно про версию Питона...
>>1654641Ну да, это не стоит отдельного треда, спросил бы в общем ньюфаг треде.>по вышмату и статистике 5Имхо, никаких подводных и проблем не предвидеться. Если ты в самом деле понимаешь статистику и теорвер на отлично, то ты уже лучше половины машинлёрншиков, а подтянуть прогерство для питоновых либ маш-оба вопрос одного-двух месяцев в зависимости от степени знакомства с основами прогерства.
>>1654641>Планирую после вката съёбывать в Силиконовую долинуТам таких как ты пятачок за пучок, причём своих, которым визу делать не надо.
Парни, питон начал изучать недавно. В данный момент работаю с Pillow. Собственно столкнулся с проблемой: когда изменяю размер прозрачной гифки, а потом ее сохраняю, то у меня теряется ее прозрачность. Подозреваю, что проблема именно в save(), так как на всех этапах до сохранения каждый фрейм отображается прозрачным. Я думаю проблема в том, что параметр прозрачности в каждой картинки разный. Хелп!
>>1654769Да ладно, везде пишут что берут за знания а не за бумажку. + мне похуй будет даже если шарагу закончу ибо живу в ссаной лугандонии бумажкой которых я могу только подтереться. >>1654771Ну тервер подучу мальца и думаю ок будет, в остальном себя оцениваю как сильного студента. Сейчас вот это смотрю https://youtu.be/2XFaK3bgT7w?t=3152 потом по списку книжек думаю уже идти.>>1654802Значит выдрочусь на уровень знаний получше тех, которые там.
Тут в ЖС-треде мощные баталии за/против ООП, по питону тоже небольшие срачи есть: https://2ch.hk/pr/res/1651996.htmlИ заодно вопрос: насколько адекватно в питоне реализованы ООП-фичи и функциональные фичи?
>>1654840Более чем достаточно адекватно для полноценной работы.> ООП-фичиСейчас набегут адепты смоллтолка.> функциональные фичиИ хаскелля.
>>1654840>насколько адекватно в питоне реализованы ООП-фичиПростенько и хуёвенько.>функциональные фичиУчитывая, что все "функциональные фичи" — это три фичи (типизация, first class functions и паттерн матчинг), то примерно никак.
Хочу прикрутить форму загрузки файлов на сервер. Все сделал по докам и ошибка 404 при нажатии кнопки "загрузить". Что не так?
>>1654856Языки с чистой парадигмой никому не нужны. Путь то ООП, ФП или что-нибудь ещё. Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременноВ Питоне есть и основы ООП, и какой-то минимум ФП, и метапрограммирование, и параллельное, и асинхронное поддержали вполне достойно. В этом его сила. Свои слабости тоже есть, не без них.
Аноны, помогите, горю уже. Мне нужны байты файла, который я отправляю на апи через FileField, пытаюсь читать его в представлении из реквеста: request.FILES['file].read() и мне отдают b'', хотя size у него есть и он readable. Что я могу делать не так?
>>1654950>Языки с чистой парадигмой никому не нужны. Путь то ООП, ФП или что-нибудь ещё. Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременноДа не, похуй вообще на подходы, нужны языки которые требуют минимальной подготовки и позволяют пилить фичи как угарелому.> В Питоне есть и основы ООПЕсть.>и какой-то минимум ФПНету. Блять, в питоне даже лямбд нормальных нет, ты о чём вообще?>и метапрограммированиеВ питоне это тоже хуй пойми что, а не МП.>и асинхронноеНу хоть один поток полностью утилизировать сумели, ахуеть.В питоне, как в языке, толком-то нихуя и нет. Он простой как палка, и содержит 0 каких либо концепций, просто тупой как палка язык. За что и ценится.
>>1654950> Языки с чистой парадигмой никому не нужны.Всё-таки отчасти нужны, их используют как DSL, но для чего-то большего они не особо годятся.> Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременноГлавное при добавлении фич в язык не увлечься, а то получится C++. Тоже не сковывает, да и вообще язык универсальный, но сложноват в использовании.
>>1654962>Всё-таки отчасти нужныГде например? Для всяких декларативных UI-ев обычно на том же языке DSL и клепают. Больше той же чистой функциональщины нигде не видал.>Главное при добавлении фич в язык не увлечься, а то получится C++. Тоже не сковывает, да и вообще язык универсальный, но сложноват в использовании.Язык либо живёт и развивается, либо тухнет. Обрастание фичами — это вопрос времени, для того и нужны новые языки (или хотя бы версии, дропающие обратную совместимость), чтобы собирать все удачные идеи из старых и дропать лишнее. Правда бизнесу этого не объяснить, и легаси на каком нибудь втором питоне в каком нибудь фб так и будет жить как всякого банковское/военное говно на коболе/фортране, лол.
>>1654961Есть там всё, если не заниматься демагогией, но никто за простым синтаксисом не разглядит, ведь всем надо скобочки, сотню ёбнутых конструкций, синтаксиса в духе перла и прочих фишечек.
>>1654962C++ обрастал фичами во много слоёв, причём эти фичи костылями прикручивать приходилось, чтобы не ломать совместимость со старым языком. В результате какой-то адъ на выходе.И такое ощущение, что там идеологи об элегантности особо и не думали. Всё-таки система ценностей идеологов питона немного другая, это чувствуется. Хотя последнее время много какого-то говна принесли. f-strings на первый взгляд прикольно, но реально это шаг в сторону говнокода, такой php древних времён. Декларации какие-то дикие.
>>1654970Там нет нихуя по факту, мань. Я же говорю: он потому и ценится. Можно давать писать код людям, которые в программирование пришли вчера.>но никто за простым синтаксисом не разглядитА что разглядывать-то, мань? Это вполне конкретные вещи, которые в питоне нет. А как говорят гоферы — и не нужно.
>>1654966>и легаси на каком нибудь втором питоне в каком нибудьСейчас чуть проще, благодаря моде на микросервисы.Обратную совместимость надо дропать иногда, но и перекатывать на новые версии тоже надо адекватно. Гвидо тот ещё урод в этом смысле, выкатили третью версию, которую при всём желании нельзя было совместить со второй, поэтому много лет ключевые проекты на третий питон не переходили и вообще популярность просела языка.Вот банальные юникод-строки. Был префикс u"строка" во втором питоне, обязательный. Чего стоило оставить этот префикс в третьем, но объявить его obsolete, с обещанием убрать через несколько лет? Тогда можно было бы писать совместимый код и постепенно перекатываться. Одна эта мелочь ставила крест.
>>1654980Элегантность по отношению к питону, имхо, неверный термин. Всё же, он про эстетику. А если говорить про эстетичный (или красивый) код, то тут уже по возрастающей идут всякие руби...скалы...хаскелли.В питоне думают о простоте. В каком нибудь го о ней думают ещё больше.
>>1654485>Если я правильно тебя понял - ты запускаешь файлы через cmd типаДа, все так. Я думаю вот о чем - черепаха пошагала и остановилась, потом я ее не выходя из графического интерфейса (получается файл все еще исполняется, cmd не выдала приглашения) могу ли перемещать дополнительно? В общем, шизоидно получилось, суть - могу ли я дополнять уже выполненный код и получать сиюмитный результат? Вот прошла она у меня 50 пикселей и все, строки в файле .py кончились а я тут такой опа и дописал пиздуй еще 20 пикселей и она попиздовала?
>>1654988Сразу видно нюфага, лол.Нет ничего более постоянного, чем временное. Сегодня ты вставляешь костыль, завтра переходишь на другие таски, через пару месяцев ещё кто-то доложит туда свой костыль и пойдёт по другим таскам, а через пару лет в такой код никто даже залезать не захочет. И уж тем более в FAANG-ах, где кол-во программистов просто космическое и кодобазы на сотни гб.Это как с недавним дропом поддержки x32 битного софта на макоси. Внезапно оказалось, что куча даже нового софта написана криво и не умеет в x64 (с банальными ошибками, вроде кривого типа для индексации массива), просто из-за того что была такая возможность и все хуй ложили пока не пришёл эпл и не выебал всех в сраку.
>>1654989> хаскелли> эстетичныйУродливый язык, как ни посмотри. С одной только обработкой ошибок здесь всё в разы хуже, чем в Go. Функции, принимающие тип из 100500 полей. Лапша из рекурсий и лямбд, потому что нет циклов и переменных. Стиль именования идентификаторов из одной буквы. Нужно быть в конец матанутым, чтобы увидеть в этом красоту.
>>1654998Зато решить задачу неэлегантно, засрав всё вокруг стейтом нельзя, вот он и эстетичный, лол. Всё есть функция, без лишних сущностей, есть жи брат
>>1654961>Нету. Блять, в питоне даже лямбд нормальных нет, ты о чём вообще?Странно что ты еще Хаскель не притащил как образец на который маст хэв равняться иначе "не_ФП_яскозал">В питоне это тоже хуй пойми что, а не МПС метаклассами и дескрипторами пытался хоть раз разбираться? Я - да, достаточно мощная вещь но забил хуй на полпути т.к. это надо только красноглазым, пишущим фреймворки>Ну хоть один поток полностью утилизировать сумели, ахуетьАсинхронная работа в Питоне работает как надо, проблема лишь что приходится часто полагаться на сторонние либы ведь стандартная asyncio это просто каркас для других пакетов и не более. Многопоточность же не могут завезти в первую очередь из-за ограничений CPython которые хуй так просто наебнешь. Где хардкорная многопоточность все же нужна GIL внезапно таки освобождается и она работает, но это все под капотом ебошит и программер туда не залезет дабы ничего не наебнуть. numba тому пример
>>1655018>Асинхронная работа в Питоне работает как надоНедоделана. Например asyncio.wait_for()В теории должна прерывать выполнение по таймауту, однако реально этого не делает, если исполнение зависает на синхронной задаче, прерывания не происходит. Почему? Я ожидаю другого поведения. Это должно быть заложено в язык, но этого нет.При этом реализовать самому реально, используя библиотеку signal, системнозависимую правда. Но это неудобно.Ещё проблема с чтением stdout/stderr в запускаемых отдельных процессах. Нельзя читать данные, пока вызванный процесс не завершит исполнение. Это ни разу не асинхронное поведение, и хрен переборешь.
Пчелы, есть вот такой код парсера (он работает, с ним все хорошо), написанный с использованием aiohttphttps://pastebin.com/BELtEqvXИ есть модуль main, так же асинхронный, который вызывает в себе этот парсерhttps://pastebin.com/t6w3PHJyЛуп мейна крутится с условием run_until_disconnected()А луп парсера run_until_complete(). Иными словами, мне просто иногда из постоянно работающего мейна нужно вызывать метод из парсера, однако интерпретатор запрещает это делать с ошибкой пикрилПочему так получается? Как мне разделить эти тупые лупы?
Сап, прогроммач. Есть пикрелейтед окошко. Поля ввода пароля защищено заглушкой вида show='*'. Есть кнопочка show, на нее привязана функция, которая меняет параметр show поля ввода пароля на None. Тем не менее, пароль остается все в том же виде. Есть идеи, как это реализовать?
>>1655036Он кекается на bot.run_until_disconnected() или self.loop.run_until_complete(self._parse_content()) ?
>>1655088На втором.Если я правильно понимаю терминологию, то мейн поток спокойно крутится, пока не дисконнектА вот поток из парсера уже запустится не можетПолез в доки asyncio, похоже нужно вручную создавать новый таск
Подскажите, пацаны, в чем трабла может бытьhttps://stackoverflow.com/questions/61088634/docker-compose-up-path-does-not-exist?noredirect=1#comment108096767_61088634
Есть знакомый, средней руки кодер, написали ему с одной веб-студии, покодить на Джанге за 7 доллларов в час, ну он связался, подписал договор, дали доступ ко всему, он потыкал-потыкал, тоже с Докером проблемы возникли, там-сям поковырялся, толком не разобрался. Ну его через пару дней и отшили, сам оправдывается, мол и учеба, и опыта с подобным не было.Странный чел.
Что на рынке труда с питоном? Меньше работ стало или больше? Один челик сказал, что перекатился с крестов на питон в другом треде и я заинтересовался тоже.
>>1654993Через просто исполнение файла - вряд ли, а если просто код в интерпретатор ебанешь - скорее всего сможешь, поэтому и >>> у тебя в учебнике
>>1655161Понял, спасибо. Меня вот интересовало как раз пользуются ли люди в реальных коммерческих проектах возможностями интерпретатора? Или все ограничивается исполнением заранее прописанных .py файлов? Дело в том, что я еще пока не до конца понимаю саму парадигму кодинга на питоне(да и кодинга в целом). И когда ты начинаешь изучать подобные вопросы не поднимаются в литературе, а мне в голову засел такой, я считаю, фундаментальный по крайней мере на моем этапе развития в этой теме вопрос.
>>1655171Это одно и то же. Просто в одном случае интерпретатор читает ввод от тебя, а в другом из файла. Суть от этого не меняется.
Мммм, зачем нужны массивы, если есть списки? Погуглил немного и особой разницы между ними не обнаружил. Разве что ограничения на тип данных и размер для массива.
>>1655193Массив - static array С-господа пояснят"Список" - dinamic arrayList - linked list, нахуй ненужон кроме пары частных случаев
>>1655193Массивы ищутся в памяти быстрее всего, так как элементы идут друг за другом, можно сказатьКаждый элемент списка разбросан по памяти и поэтому этот элемент должен содержать в себе данные любого типа И указатель на следующий элемент. Поэтому также можно сказать, что массив это не набор указателей.
>>1655099Тебе не нужно внутри объектов пользоваться функциями вроде run_until_complete.Цикл обработки сообщений, Event loop который, в программе всегда один. Ты его стартовал и всё, дальше ты кидаешь в этот цикл свои задачи.вот такого у тебя не должно быть:def get_posts(self):____return self.loop.run_until_complete(self._parse_content())Код будет иметь другой вид, скорее async def get_posts(self):____return await self._parse_content()
>>1655317>Код будет иметь другой вид, скорееasync def get_posts(self):____return await self._parse_content()О господи, мне аж поплохело от того, насколько это очевидное решение.Вероятно я запутался из-за того, что много тестировал отдельно этот класс вне основного Event loopВ общем, теперь все работает, большое спасибо!
Сап. Есть фукнция а(x), в функции а есть функия b(c)Как вызвать функцию а, чтоб передать ей с (для функции b) ?
>>1655345def a(x, c):____b(c)Сформулируй вопрос нормально. Может быть ты даже сам придумаешь и ответ после этого.
В Джанге у меня есть обычные модели типа Post и модели Entry, которые связаны с постами через ForeignKey (пикрил)Надо намутить разграничение доступа между пользователями, чтобы только создавший эти instance мог их редактировать и смотреть. Мне надо поставить поле owner = ForeignKey(User) внутрь обоих: Post и Entry или достаточно будет поместить его только внутрь Post? Как обычно делается? Я канешн понимаю что Entry по-любому связан только с одним конкретным Post, но проблем с безопасностью так не возникнет?
>>1655647> Аноны, как проверить что список не пустой?Ну я и долбоеб. Уже нашел - пустой список - это False в питонеA = list()If not A:Print(pust)
Нужно проверить некоторое количество ссылок на присутствие кейвордов на странице.Понятно, что можно удалить теги и искать подстроки, но хочется что-то более сириус бизнесовое.
>>1655521А смысл дублировать поле в 2х моделях, если они связаны и так и ты можешь получить доступ в оба направления и посмотреть это поле?
Анон, привет, есть цель написать очень простое приложение на android, можешь описать буквально пару шагов которые нужно пройти чтобы написать его на чистом python?
>>1655746У тебя же не простые селекты, куда ты можешь что угодно поставить, так что какого-то омега-очевидного способа скорее всего нет. Хотя если авторизация через токен и кто-то спиздит чужой токен, то можно, но это уже проблема пользователя
Привет. В питоне есть какой нибудь таймер, фитиль? Сейчас попробую объяснитьВот у меня естьWhile True:----if событие происходит:--------time. sleep(10)-------- сделать так-тоЕсть ли какой-то способ заменить sleep таким образом, чтобы действие исполнилось через 10 секунд, но чтобы в эти 10 секунд код не простаивал в ожидании, а все так же отслеживал события, запуская в очередь новые таймеры, если события произойдут?
В жс можно написать for-цикл вроде этого:for (a = 1, b = 3, c = a * b; a < 10; a++) { ...}Как что-то подобное реализовать с питонухе?
>>1655827С словарях хитрее алгоритм. Хеш-поиск работает так, что у тебя есть линейный массив с прямой адресацией по хешуaddress = array[hash]Ты просто не можешь сделать такой массив из 2^64 элементов, памяти не хватит в принципе. Массив маленький, динамически расширяемый по мере разрастания словаря. И вот магия с тем, как вычислить этот маленький хеш, она есть. И как коллизии обрабатывать, там ещё больше магии.
>>1655907b = 3c = b * 1for a in range(1, 11):____...Не очень понял, зачем тебе действие, которое выполняется один раз, нужно запихивать в скобки, но ладно.
>>1655905> запуская в очередь новые таймеры, если события произойдутСкорее всего тебе понадобиться многопоточность.Либо ты можешь убрать свой sleep и во время отслеживания своих действий (точнее, между ними) и запуска новых таймеров время от времени запускать проверку не прошло ли 10 секунд и не произошло ли какое-то событие - но это утопия и подходит только для не очень сложных случаев.>>1655907В питоне только foreach цикл, такого for нету.Можешь записать свою фиготу через while, впрочем твой конкретный случай можно и через for записать - у тебя вроде бы только a изменяется.>>1655914Я в курсе же про всё это, и про коллизии тоже. Нет там никакой магии. Скорее хеш-функция выдаёт стандартный 64 битный результат, а словарь использует младшие n битов, удваивая и перестраивая массив при проценте заполнения больше определённого.
Как "перезагрузить" БД при работе с Джанго? Я тестирую приложение у себя на машине, поэтому часто приходится очищать БД (Postgres) и заполнять ее новыми данными. Раньше просто удалял модели и файлы миграций, теперь эта срань сыплет мне какими-то ошибками (django.db.utils.ProgrammingError: ОШИБКА: столбец "name" в таблице "django_content_type" не существует)Что делать? Стирать к херам вообще все что есть?
Аноны, посоветуйте плиз курсы для ньюфага1) онлайн2) без жесткого тайминга (сдай задание завтра или умрешь)3) с сертификатом4) можно на ингришеОчевидная Coursera очевидна?
>>1655788Никак ты этого на питоне не сделаешь, разве что консольный скрипт в каком-нибудь QPython запустишь.Андроид - это жаба и котлин. Даже попытки написать что-то на родном NDK на C++ приводят к тому, что шаг влево шаг вправо - и приходится возвращаться к жабе.Теоретически, возможен вариант с Jython, но вряд ли где-то есть нормальный пошаговый туториал, всё обрывками.
>>1655788kivyно пожалуйста, освой Kotlin, он не такой ебанутый как Жаба и даже сходства с Питоном там есть, не иди по тропе пизданутых жс-еров которые суют свой язык просто всюду (в том числе и на мобилки), уже засрали все что смогли
Так, блэт. Внутри одного из class-based CreateView в Джанге у меня крашился редирект, решил провести ахуительный дебагинг с помощью print и посмотреть какой url возвращается его методом get_success_url:print('URL:', self.get_success_url())По итогу увидел что собственно этот метод и крашится: AttributeError: 'NoneType' object has no attribute '__dict__' С хрена ли метод не возвращает мне тот success_url, который был определен в классе?
Пистоны, вопрос по pyqt5.Мне надо иметь возможность, сортировать результаты по нескольким значениям.Т.е. например, есть список категорий, пользователь может несколько раз из этого списка выбирать разные значения и они "суммируются", как например тэги или фильтры на некоторых сайтах.Какой виджет для этого лучше всего подходит?
>>1656104Дополнение: крашится он начал после того как я переопределил метод form_valid и стал сразу возвращать в конце return HttpResponseRedirect(self.get_success_url())Думал, что все должно нормально работать, но что-то идет не так
>>1655952https://docs.djangoproject.com/en/3.0/ref/django-admin/#flush это что ли?Для прогона тестов джанга создает отдельную бд и потом удаляет её, и если я правильно понял, что сомнительно, то вот здесь https://github.com/django/django/blob/master/django/test/utils.py есть функции setup_databases и teardown_databases, который смогут тебе помочь, если тебя надо снести базу и на ее руинах создать новую. А может лучше тесты написать и не страдать.>>1656104>AttributeError: 'NoneType' object has no attribute Либо не передал чего надо в метод, либо не вернул чего надо из метода. Если покажешь код, то будет проще тебя помочь.
конструктор ботов для телеграммаВсем привет. Нужно без знаний кода собрать бота для телеграмма. Его функционал как у тиндера, только на минималках:1. Зарегался, указал описание, фото, город2. Жмешь поиск и тебе профили таких же зарегавшихся показываетсяЯ смогу такое сделать на конструкторе? Или там только «если а то б»?
>>1648937Думаю об используемых сущностях всегда и везде, смотришь на дорогу, думаю о классах Транспорт, наследуемых от него классах Машина и т.д., и т.п. ООП про мышление, а не про дрочку. Старайся думать о логике приложений на смартфоне, какие классы реализовывали разработчики, по твоему мнению. Что-то в этом духе.
Бля челы как заставить себя развиваться дальше (зачем и куда)освоил удава (+ попутно жс (ес6 без фреймворков), жабу (в шараге) и всякие инструменты автоматизации типа баша, докера итд) на уровне "медиум++ задачек с литкода без гугла"Но стажировок щяс ни у кого нет; через шарагу можно только в вротенд вкатится, а я хочу в бекендЕсли своровать у кого-нибудь классный гитхаб и отрефакторить его под себя, это покатит на собесах?
>>1656102>освой KotlinБлять опять эти скобочки дрочить блядские, начал изучать python потому что нет этой бесящей хуйни, но все равно, спасибо, буду параллельно изучать еще kotlin
>>1656343Так вот почему здесь так любят делать ботов - потому что это гуманитарное занятие где-то на уровне вордпресса и макросов для экселя. Им дали простейший в использовании язык - нет, не хочу, хочу программирование мышкой.
>>1656430Вопрос вроде был "как писать для андроида на питоне", а не "как писать для андроида не на жабе".
>>1656343Конструкторы нужны для очень простых проектов уровня сайтов визиток. Сам понимаешь, какая там логика.Даже если и сможешь, это будет такое извращение, что проще самому выучить какие-то базовые штуки и накидать проект за пару часов.Тебе всего-то понадобится обертка для работы с апи телеграмма (советую telethon или, если туповат - телебот; у них у обеих шикарные доки с кучей примеров) и какая-то бдшка. Можно воспользоваться встроенной sqlite, если бот небольшой - для знакомств с одноклассницами, например.И в принципе все, это очень просто.
>>1656379>жабу (в шараге)Удачи придти на вотчину к жаба-бояринам, там ты будешь обоссан и скормлен очередной AbstractProviderActorFactory
>>1656398>https://en.wikipedia.org/wiki/Kivy_(framework)А кто-нибудь на нём писал что-то практичное, что именно на смартфонах работает?Жить с ним можно, нормально там по скорости, подводные камни и слабые места есть?С сетью нормально дружит? С asyncio можно подружить, или надо треды для сети делать, или как там вообще с этими вопросами принято?
>>1656466Так ладно. Я в качестве хобби когда-то только версткой и чуть js занимался. Я смогу эту хуйню на джаваскрипте сделать? Я не буду ради этой задачи питон изучать, лучше денег накоплю и фрилансеру задачу поставлю.
>>1656498Используй руководства, Люк:https://kivy.org/doc/stable/examples/gallery.htmlhttps://kivy.org/doc/stable/gettingstarted/examples.htmlhttps://kivy.org/doc/stable/examples/gen__application__app_with_build__py.htmlhttps://likegeeks.com/kivy-tutorial/
>>1656542Вау, и правда даже официальная поддержка asynio уже есть.https://kivy.readthedocs.io/en/master/api-kivy.app.html#async-configurationСпасибо, Юра Гагарин, ты подарил мне надежду на космос.
>>1656562Сомнительная штука на самом то деле.KivyMD забросили поддержку, в результате из ЛДНР какой-то петух взялся за это дело. Ему безусловно спасибо, но как бы на общий уровень намекает.Но идею внести это в шапку полностью поддерживию, тем более скоро перекот.
>>1656581>Ему безусловно спасибо, но как бы на общий уровень намекает.Ты всегда можешь ему помочь.Или найти того, кто сможет помочь.
>>1656599> Ты всегда можешь ему помочь.Угу, но мне совершенно не зашел подход киви в виде их файликов со стилями.Хотя на QT5 хуярю только так, странно.
>>1656105>>1656605Какой хитрец.Ну вообще, то что ты описал, больше похоже на действие при нажатии кнопки.1 кнопка - 1 тег. Кнопка ведь может быть задизайнена и так что не догадаешь что это кнопка, да?Жмякает юзер на тег-кнопку, а ты в память себе записуешь что за текст на кнопке был(напомню, ето тег).
>>1656683Я полагал что-то вроде либо кучи чекбоксов, либо выпадающего списка с возможностью отмечать пункты этого списка. Второе возможно?
>>1656684Ну я не спец по ЮИ/ЮХ и не скажу тебе как лучше, по возможно все из того что ты описал, да.Я на сайтах везде вижу кнопки и по этой причине их тебе и описал. Да и работать с ними проще, если честно, работа со списком мне не сильно зашла, но это я.
https://pastebin.com/p6wmdtPCДля своего хеллоуворлда нужно было реализовать вот такой класс, но чувствую, что в конструкторе у меня какие-то дикие костыли. Есть варианты получше? Наверняка же это какой-то популярный паттерн, но я не знаю, как он называется.
>>1656694Разве это singleton? У singleton'а может быть всего один инстанс на весь файл, а здесь ограничено количество инстансов с одинаковым значением атрибута. Или я не прав?
Мб это не по теме, но подскажите, как можно пофиксить следующее:Крутится у меня в консольном окне скрипт, который слушает вконтактик по АПИ. Когда окно долго не находится в фокусе или параллельно запускается какой-нибудь другой процесс, то скрипт как-будто останавливается - логи не пишутся и респонсы на ивенты не отправляются, пока консолька вручную не пробудится каким-либо действием. Как можно заставить окно со скриптом работать без перебоев?
>>1656752Возможно стоит запускать скрипт не ручками и поддерживать его работу открытым окном, а чем-то типа 'superviord',
Я вроде бы знаю про линеаризацию, но это вообще нормально, что поведение классов А/B изменяется (конструктор не вызывается) из-за изменения порядка родителей? Получается, super просто следующий элемент линеаризации выдаёт, потому что если одному классу нужны вызвать конструкторы классов 1 и 3, а классу 1 нужно вызвать конструктор класса 2 - то с каким угодно другим устройством super это будет невозможно сделать без ещё более тяжёлых костылей.Это как-то весьма неудобно получается, мягко говоря. Что делать если у меня __init__ с параметрами, которые я явно передаю и я хочу засунуть этот класс в множественное наследование? Там же (возможно) будет другой "родитель", и super вызовет конструктор какого-то левого класса с моими параметрами. А целевой класс наоборот останется без этих параметров.Хреновая какая-то концепция множественного наследования. Хуже неё только концепция исключений.
>>1656700>Разве это singleton? У singleton'а может быть всего один инстанс на весь файл, а здесь ограничено количество инстансов с одинаковым значением атрибута. Или я не прав?У тебя именно самый настоящий синглтон. Паттерн это идея проектирования. Идея синглтона в том, чтобы создавать только один объект определённого типа, по мере необходимости, и чтобы для пользователя работа выглядела так, как с обычным объектом.А если более общно, то синглтоны это просто "глобальные переменные". Со всеми их плюсами и минусами.
>>1656784>Хреновая какая-то концепция множественного наследования. Хуже неё только концепция исключений.Исключения в питоне очень хорошие, стройные и понятные, лучше, чем во многих других языках. Не понимаю, с чем там проблема.Наследование в питоне полное г-но, всё сделано криво и убого. Особенно множественное. То есть ни множественного наследования нормального нет, ни интерфейсов вместо него, всё через жопу.Я не понял точно, что хочешь ты, но может тебе надо просто явно вызывать конструктор нужного класса вместо super. Для множественного наследования это самый адекватный вариант.
>>1656784А вообще у тебя самого кривая архитектура. Множественное наследование не для этого. В наследовании ты переопределяешь класс на основе родителя.Если у тебя поведение родительских классов не согласовано друг с другом, у тебя могут быть проблемы. Ну банально в одном конструкторе ты делаешь переменную self.storage = {}, в другом self.storage = [] (для хранилища используются разные типы, но с одним именем. У тебя всё рухнет после этого. Аналогично с методами, может быть конфликт из-за этого.Поэтому во многих языках множественного наследования нет, вместо используются интерфейсы, mixin и прочее. Но вот в питоне по этой части всё очень невнятно и неудобно.
Посоветуйте материал для вката в питон для тех, кто знает другие языки. Работаю на жабе и котлине, вскоре может понадобиться питончик.