Это копия, сохраненная 12 июня 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>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
Анон, если ты можешь читать только из под прокси, но не можешь писать сюда из-за бана прокси, попробуй, например, вместо .hk домен .pm
>Текущая версия: https://ideone.com/lujiX5
Эти не дают ссылки нормально шарить.
Код шапки здесь: https://dumpz.org/agmQ3QZRZ8gA
Заценил нумбу на каком-то говне.
Если передавать список в аргументы функции - выполняется за 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
Так что одобряю, теперь питоном почти можно пользоваться.
Написал функцию подсчёта простых чисел до N, умеренно оптимизированную.
Делаю два запуска, первый до 13, для компиляции, второй до основного числа, уже на время:
Если до 100 тысяч, то время на первый запуск / основной:
ванилла 3.6, <1ms, 68ms
pypy3, <1ms, 39ms
numba (на 3.6) 242ms, 5ms
то есть очень долго компилирует, вся выгода улетает.
Если до 10 миллионов
ванилла <1ms, 24.5 секунды
pypy3 <1ms, 9.8 секунд
numba 0.24 секунды, 1.7 секунд
Никаких numpy не использовалось, чисто питоновский код.
Процесс компиляции реально долгий, но я потестировал, судя по всему, это время тратится за загрузку машины-компилятора numba, а не на саму компиляцию кода. Если сделать несколько функций немного разных и их скомпилировать, то разницы во времени почти нет, те же 0.24 секунды на компиляцию всех функций.
Реальная альтернатива тому, чтобы писать внешние модули на Си для вычислительных задач. Ещё есть возможности для оптимизации дополнительные.
Минусы: больше только для вычислительных задач. Не поддерживает асинхронный код, не совместимо с pypy. Даже классы ограниченно поддерживает.
Но, питонисту про существования модуля знать обязательно, может иногда пригодиться.
>то есть очень долго компилирует, вся выгода улетает.
Просто укажи типы и время компиляции становиться смешным.
По счастливой случайности я сейчас тоже балуюсь с простыми числами.
Получение первых 10000 простых чисел (с сохранением в список - пробую делить новое число на цифры из списка): ваниль - 1.862, нумба - 0.653, нумба у сказанием типа (@njit(int64[:](int64))) - 0.014.
100000: ваниль - 47.004, нумба - 0.830, нумба с типами - 0.217
1000000: нумба - 5.758, нумба с типами - 4.880
Хотя хуйню посоветовал, он при применении декоратора всё-равно виснет.
Энивей полезно, если функция работает меньше секунды за всё время работы, то это можно и не оптимизировать в общем-то.
Да.
Для начала ты должен понять, на что они у тебя уходят - на то, чтобы скачать страницы, либо на то, чтобы именно распарсить?
В каком смысле "скачать страницы"?
Скорее всего, второе. Может, это потому, что я путешествую по json'у get'ами?
Да, json там довольно здоровый.
У тебя есть строка
response = request.get(current_address)
Это ты скачиваешь страницу. Для этого ты лезешь в интернет, это занимает какое-то время, чтобы там соединение установить, запрос отправить и т.п. Легко может получиться, что основное время именно здесь расходуется.
Попробуй посчитать, сколько времени уходит на каждый запрос.
JSON в норме очень быстро обрабатывается. По крайней мере через библиотеку json, про этот способ не скажу, надо смотреть.
Ну и не советовал бы с сайтов качать с большей скоростью, лучше наоборот, задержки встраивать. Иначе легко можешь попасть в чёрный список сайта, иногда отслеживают активность.
1. Поставишь асинхронку или даже многопроцессорность для скачки данных - получишь елдой банхаммером по голове за спам запросами. Это я уже проходил много раз
2. Ты общаешься с местным api?
3. Какого размера у тебя выходит json? Посмотри с помощью __sizeof__
Попробуй спрофилировать и посмотреть, на какие функции основное время расходуется
python -m cProfile my_script.py
Из опробованного:
вим - перебор
Пайчармы - стойкая неприязнь ко всему, что делает джет брейнс.
Всякое говно на электроне - ВС код и Атом. Сейчас пользуюсь ими, но постоянный баги ужасают, особенно то, что переключаясь на окно редактора из какого-то другого, и пытаясь провернуть колесико мышки - само окно проматывается в неизведанные дали. Видимо запоминаются движение колеса вне самого редактора и потом разом применяются.
Спайдер - просто не понравился. Все неудобно, топорно, некрасиво, будто юпитер ноутбук вынесли в отдельный редактор.
Посовейтуйте что-нибудь.
Установить питон быстрее чем дождаться ответа на борде, кстати.
https://www.python.org/downloads/windows/
Ставишь, например 3.8.2 х64, запускаешь IDLE - открывается пикрелейтед (консоль). Всё, ты можешь писать код на питоне. Ещё можно нажать ctrl+n (чувствительно к языку раскладки, лол - на русской горячие клавиши не работают), вводить несколько команд сразу и запускать по f5. Или редактировать .py файл в любом блокноте и запускать как батник.
Платный, но после конца триала только бухтит и продолжает работать.
В питонухе, как я понял, массивов нет, есть только списки (list)? В массиве же доступ к любому конкретному элементу достигается за О(1), а вот в списке за О(n) кроме первого элемента - head, к нему канешн всегда О(1)
Есть ли сторонняя либа с массивами?
MySQL таблица вида (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 сижу, разобраться не могу
>с массивами?
numpy?
>в списке за О(n)
Уверен насчёт этого? Откуда ты это взял? Я очень-очень сомневаюсь, что в петухоне доступ к элементу за О(n).
Не интересовался как это внутри устроено, если бы я на крестах делал список, который может содержать произвольные типы - то я бы хранил это в виде массива (или дека, нужно проверять что будет лучше в общем случае) из пар (тип,указатель_на_данные). Там будет доступ за O(1), а всякие сортировки будут перемещать маленькую структуру с указателем, вместо реальных объектов.
Доступ к любому элементу списка O(1).
Удаление элемента из списка, поиск элемента в списке, то есть "element in list" - O(n)
Вот таблица, кстати
https://wiki.python.org/moin/TimeComplexity
>>48180
Палка на двух концах. Можно каждому элементу внутри List присвоить поле index - integer значение, которое показывает его порядковый номер в списке, тогда доступ по этому индексу будет за О(1), но вот незадача, при вставке/удалении, придется инкрементировать или декрементировать соответствующие индексы... И трудоемкость возрастает до О(n). Можно забить хуй на индексы и двигаться от head, в таком случае при удалении/вставке надо лишь переназначить смежные ссылки, но вот доступ к элементу уже будет за O(n)
Тут тебя выебут либо в рот, либо в жопу, задача программа лишь выбрать одну из двух дырок, расслабиться и наслаждаться процессом
API у них только для бизнеса, к сожалению.
С __sizeof__ странная штука получается: если применять его к переменной с json'ом в консоли, показывает 216 байт, а если сохранить этот самый json в текстовый файл, получается 67 килобайт. sys.getsizeof при этом возвращает 232 байта.
>>47927
Спрофилировал: больше всего времени уходит на вот эти штуки, получается.
Может быть, такое поведение и нормально, если учитывать, что эти товары могут быть распиханы на 30 страниц? При этом на каждой странице по 30 товаров, и у каждого нужно взять цену в этом огромном json'е.
Ты делаешь через prepared statements или просто хуяришь сформатированную строку?
Я пока не смотрел, как там сделано в питоне.
Вот значит у тебя вся задержка из-за сети, долго данные читаются, здесь надо разбираться почему.
Сто лет на request не смотрел, ничего не скажу. Возможно там надо как-то сначала целиком данные скачать, каким-нибудь одним запросом, а потом скормить его json. ХЗ. А может просто сервис медленно данные отдаёт.
На самом деле если ты говоришь 67 килобайт, и это за полсекунды, то это мегабит в канале. Это не так мало, ты же не один может эти данные запрашиваешь.
Возможно, у простого get нет keep-alive, так что кучу времени жрет ссл хендшейк. Попробуй через session.
Так и есть, тащемта. Там одноразовые сессии создаются на каждый запрос.
Мне кажется, тут скорее всего не та вещь, которую тебе нужно оптимизировать. Это ведь вопрос сети, а не твоего кода. Если ты будешь слишком агрессивно качать, рискуешь попасть в чёрный список. Это, конечно, от сервиса зависит. Не факт, то им жалко, и не факт, что обнаружат.
Апи оно на то и апи, что можно качать сколько влезет. Если есть какие-то лимиты, то они обозначены явно в документации.
У тебя на самом деле там не swap, а рандом время жрёт плюс сам цикл, вызов функции и т.п.
Угу, не удивительно. Замени рандом на c%1024, если хочешь.
Это не важно, рандом O(1) жрёт. O(30)==O(1). Если бы доступ был за линейное, то х20 размер массива дал бы вклад несмотря на тяжёлый рандом.
Что за хуета на пике? Тоже хочу такую.
Лайк
Это kcachegrind, профилировщик.
Ты собираешь профиль с помощью cProfile, например
python3 -m cProfile -o data.profile my_script.py
потом запускаешь скрипт, который конвертирует этот профиль в формат для kcachegrind
pyprof2calltree -k -i data.profle
kcachegrind надо предварительно поставить, а скрипт можно поставить через pip
"Сsv_write", если что, убирал - практически не снижает время исполнения.
>>48237
По профилю тут >>48195 видно, что основное время тратится на метод _read SSL сокета, а не на установление соединения.
Мне не понятно, почему этот метод, и некоторые другие, отвечающие за соединение (set_cypther и другие), вызываются 82 раза. Такое ощущение, что реально 82 соединения устанавливается, а не 20, как анон говорил.
150 миллисекунд на соединение и 67 килобайт данных это вообще прилично.
Ну хуй знает. Попробуй ещё гзип добавить, тоже частенько улучшает. Там вроде только хедер нужен, а разжимает автоматом.
Аналогии с хуями и жопоеблей мне больше всего нравятся
И какого хуя запрос
"INSERT INTO table (name, date_created, logo) VALUES (%s, %s, %s)"
При параметрах
(name, datetime, '')
Вместо пустой строки в последнем параметре вставляет ебучий апостроф в таблицу? У меня конечно мозг совсем от ORM размяк, но какого хуя оно не вставляет пустую строку как сказано?
root = 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))
вот какого хуя при нажатию на кнопку оно высирает последний элемент? как это предотвратить и выдавать то, что нужно?
надеюсь больше не возьму это говно. нелогичная хуйня, так собсна, ответ будет?
Не читай SICP, говорили они. Ничего из него в реальной жизни не понадобится, говорили они.
google://замыкание
Сервер уже есть?
Но на те же datetime, когда вставляешь отформатированной строкой, я так понял надо делать именно с кавычками.
А насчет >>48250 можешь подсказать? 3й параметр - пустая строка, через DataGrip я спокойно вставляю пустую строку, а тут оно хуярит 1 кавычку как бы я не делал: оставлял параметром, переносил эти кавычки в VALUES
Читай что-то другое.
дали им checkio.org, изучай, практикуй, разбирайся. нет, хотим просто читать, чтоб знания сами в голову залетали и там волшебно усваивались
Бля, брат, ты совсем тупой? Я понимаю, что это питон и он мозги размягчает, но что ты хочешь от питона? Ты в одну и ту же переменную весь цикл пихаешь разные значения. А потом вопишь, что питон тебе говна в жопу залил, ведь в это переменной теперь не тысяча значений, а ровно одно последнее.
Гугли 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, а оно меня нахуй шлет
>You have an error in your SQL syntax
Если тебе говорят об ошибке синтаксиса, значит ты клован, который не знает синтаксис (не важно чего: питонуха, sql или лиспа). Прими это как данность
Я бы принял это как должность, если бы тот же запрос, но с вручную подставленными данными
SELECT * FROM `users` WHERE login IN ('abc');
не выполнялся успешно без каких-либо ошибок
Ладно, я тупой
> Файлы __init__ то надеюсь замутил?
С питухона 3.3+ версий инит не нужон, держу в курсе.
> Ты в PATH пути добавил?
Уже бегу говнякать глобальную переменную своей машины, ага.
Не, брат, я эту тему глубоко копал, так как, во-первых, каждый раз, когда я делаю пет проект добавлять по 100-150 строк в пас то абсурд, во-вторых, это занимает миллиарды строк и я в рот ебал такие приколы. Про иниты я не до конца понимаю что в них нужно писать, но добавлять пустой инит ради того, чтобы питухон воспринимал папку как пакет не нужно уже как года два.
Решил побаловаться твоим checkio, а он какой-то сломанный. Неправильно работает проверка и дальше не пущает.
https://py.checkio.org/en/mission/acceptable-password-ii/
>И вот в чем вопрос, правильно ли я понимаю, что питон вообще не может импортить пакеты или файлы из директорий, который находятся выше, чем главный запускаемый скрипт?
Да, именно так. Всё остальное - обходные решения.
Я думаю это сделано специально, потому что такие схемы импорта очень грязны сами по себе. Это грязная архитектура. Не должно быть таких зависимостей сложных и неочевидных. У тебя или должен быть дочерний модуль, в подкаталоге, или глобальный, прописанный в твоём окружении, например.
Всё-таки от простоты пистона со временем деградируешь, не советую его учить как самый первый яп.
Хорошая попытка js-блядь, но нет.
Как мне понять и почувствовать ООП? Не могу разбираться в логике всякого кода нормальных людей, когда думаю сам о архитектуре, то от ооп в голову приходит только делать простейшие классы и получать профит только от простейшей инкапсуляции. А в нормальном коде даже у простых задач вообще всё через ооп работает. А ведь там дальше ещё паттерны всякие, и сложный нагруженный код.
В общем, помогите как-то влиться во всё это, только я книжки из-за сдвг не могу читать, мне лучше курсы какие-нибудь.
Начни писать регекспы, пойми, что там проблема прямо противоположная. Выработай промежуточный поход, пользуйся им в обоих дисциплинах.
Это стандартное плато, такое есть и в изучении иностранных языков например.
Надо продолжать, что ещё делать, лол.
Технический англиский несложный.
Алсо, нет такого, что вот охуенная литература или курс и ты всё поймешь, а остальная вообще ни о чем. В целом они перессказывают одно и то же, кроме всяких практических кукбуков.
Достаточно литературы по бидону 3+, т.е. примерно десятилетней давности. Новыми фичами можно догнаться позже, если до этого вообще дойдет дело.
Последний оригинальный Лутц 2013 года и он сам пишет, что обновление нинужно https://learning-python.com/about-future-eds.html
2011 это видимо переводное предыдущее издание. Так что есть вариант поновее, но и это сойдет.
[n for sub in a for n in sub]
Автор написал пикрил, не знаю на сколько инфа пересекается, но курс наверняка информативнее, чем книжка. Планирую изучить и то, и другое.
Думаю, практически повторяет книгу.
В принципе, я нахожу видеокурсы более продуктивным для хуя-прокрастинатора, легче удерживать внимание, чем читая пдфку. Потом можно уже углублятся в детали, почитывая документацию.
Но ведь логично все
Делай сам просто много простых задачек, похожих, по несколько раз. Чтобы вот ты себя в таких задачках свободно чувствовал. Вот такие, на несколько строк, на один-два экрана максимум, от твоего уровня зависит.
При этом ОБЯЗАТЕЛЬНО возьми за правило писать их с нуля, не пользуясь своими старыми решениями, не только копи-паст не надо делать, но и даже заглядывать в них.
Это всегда работает, довольно быстро и эффективно. Когда какие-нибудь новые технологии осваиваешь, тоже очень полезно.
В принципе для этого специальная функция в модуле itertools
import itertools
b =[*itertools.chain.from_iterable(a)]
https://pastebin.com/P63DBenC
включаешь транзакцию
@
хуяришь мильйон вставок
@
коммитишь
Это можно завернуть в try и делать роллбэк при ошибке.
Спасибо, значит я правильно понял, просто что транзакцию не включил, а так через трай сделал сразу
В общем, хочу пойти сложным путем, холст, рисование матрицы 3х3, обработка щелчка мыши на клетке, проверка, куда кликнул по координатам относительно окна.
Как рисовать, какой модуль юзать для холста?
Почему ты думаешь, что нельзя?
button = tkinter.Button(root, text="button")
button.place(x=200, y=100)
Использовать всё тот же модуль tkinter, из него брать Canvas.
Потому что я скачал дизайнер, чтоб расположить кнопки как матрицу и сука не смог их передвинуть. Согласен, это тупо, что в таком модуле нельзя было бы изменить положение, но все же. Может дизайнер есть более нормальный?
> дизайнер
Ну и смысл тогда идти "сложным путём"?
Гуй на питоне пишут редко, соответственно, предложение инструментов для этого куда меньше, а те, что есть, сосут в сравнении с тем же Qt Designer.
Так. Тогда какой гуй выбрать? кьюТи?
Я хочу написать ебаный тетрис, крестики нолики, еще какую-нибудь хуету.
На паскале писал, там есть событие онМаусМув, и в нем я считал, на какую ячейку наведена мышь для клика. Ну и так же можно привязать на стрелки переключение фокуса активной ячейки. Вот тут тоже хочу повторить.
Вообще хочется сделать полноценный вариант тетриса
Это всё можно сделать на ткинтере, и здесь тоже есть аналогичные эвенты. Вопрос в том, обязательно ли тебе нужен дизайнер для такой сравнительно простой задачи. Крестики-нолики и тетрис - это далеко не 3д макс или фотошоп по сложности, чтобы здесь был нужен дизайнер.
Да я просто на будущее хочу
А ведь можно напердолить интерфейс на сишарпе, охуенно напердолить, красивый, а работать с модулями питона. Или это совсем пиздец?
> пиздец
Мне ещё не попадались языки, где FFI был бы удобным и прозрачным, везде нужно писать кучу обёрток, конвертеров и проверок.
мимо
Если у тебя последовательные запросы, то примерно никак, с асинхронщенной ты получишь прирост только при множестве «параллельных» запросов.
Объявил переменную в начале кода со значением "Х"
Использую ее в функции. Из этой же функции пытаюсь переопределить ее значение, так как это как бы глобальная переменная, не?, получаю ошибку
local variable referenced before assignment
Не
Тебе надо её в функции как global декларировать.
Иначе ты её можешь или только как read-only, или как локальную переменную использовать.
Да. Если ты меняешь значение глобальной переменной, её обязательно надо сначала задекларировать, как глобальную.
у меня все работает. перезагрузи страницу, может?
мой солюшен:
len(password) > 6 and any(s.isdigit() for s in password)
а, наверное у тебя сломалось из-за того, что там от прошлого солюшна вставляет код, добавляя его к новой заготовке. просто почисти от всего кроме функции (можешь тесты удалить тоже, они чисто для тебя, чтоб локально проверять)
Хотя я посмотрел, оно тупо плейнтекстом шлет на сервер, нечему ломаться на клиенте, это что-то у них.
Пиздос, почему-то было две копии всей ботвы и эта нижняя с пустым решением.
Гениально, Холмс! Никогда бы не догадался.
да, там есть такие "серии" задач, когда твое старое решение может пригодиться, и движок чекио объединяет заготовочный файл с тем, что у тебя там раньше было. не очень продуманно, но, думаю, второй раз на эти грабли уже не наступишь
Спасибо, записался.
Еле как сделал 3 штуки, осталась последняя задача:
"#4. Счет в игре
А не добавить ли в игру подсчет очков? Каждый раз, когда мяч отскаки-
вает от ракетки, счет должен расти. Сделайте так, чтобы набранные очки
отображались в правом верхнем углу игрового экрана. Здесь вам приго-
дится функция itemconfi g (см. раздел «Для чего еще нужен идентифи-
катор» на стр. 186)."
Я в душе не ебу, что я делаю не так, я раз 8 переписывал код в попытках через "hit_paddle == True" заставить считать отскоки. Я не понял, я совсем дно ебаное или просто автор мудак?
Помогите с кодом, пожалуйста, нихуя же не понятно.
https://ideone.com/7KAorW
скорее, мудак автор, если вывалил кучу гуёвого кода без понятных объяснений
первый этап:
сначала создаешь переменную в ините (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-1
https://www.coursera.org/learn/interactive-python-2
Нельзя в тред зайти, то бишь - на архивач перенаправляет. Только ответы проходят почему-то.
До этого только куки потёр - не исправило. Сейчас нормально.
На сайте MIT лежит конспект очень хорошего курса "Математика для компьютерных наук. Наблюдал кто-нибудь его перевод или что то примерно такое на русском языке?
https://courses.csail.mit.edu/6.042/spring17/mcs.pdf
Заранее спасибо за ответы
P.S Ненавижу "Конкретную математику"
>первый этап:
сначала создаешь переменную в ините (self.hits = 0)
где детектируется хит, увеличивай её (self.hits += 1)
далее можешь принтить в консоль и убедиться, что всё работает
Вот это я и делал, собственно и оно не работало. Но спасибо, перечитаю
Дискретку и теорвер почитать не можешь?
да
Посмотрел твой код, теперь я понял, что шел примерно в верном направлении. Просто я пытался строки
self.hit_counter = canvas.create_text((50, 50), text='Лох')
text = f'Есть отбитие №{self.hit_count}' # text = 'Есть отбитие №%d' % self.hit_count
canvas.itemconfig(self.hit_counter, text=text)
вынести за пределы функции в самый низ, как завещал автор и сталкивался с тем, что не засчитывались очки. Ты сделал все намного проще. Я теперь хоть понял, что я Лошара, спасибо, хых.
Везде работает на самом входе и на самом выходе.
Уже несколько раз слышал что питон медленный. но не ясно где эта медленность проявляется и какой гемор она приносит.
Как в реальном мире мешает скорость питона? Можно живых примеров?
"говорят, экскаватор меденно ездит, и ни одну гонку формулы 1 не выиграет, это правда?" с одной стороны - чистая правда, с другой - у экскаватора нет задач выигрывать гонки. понятно, что у новичка, который ещё не определился, что ему в будущем захочется - строить дома или в гонках участвовать, такие вопросы всегда будут возникать
там, где нужна скорость вычислений, и индустрия развита, написано дохуя низкоуровневых либ: numpy, tensorflow, etc.
там, где нужна скорость вычислений, но интерес публики слишком мал, денег нет, либ нет, жизни нет, питон просто не используется - нет коммерческих рейтрейс-рендеров на питоне, нет почти игровых ЙОБА движков с пбр-графонием, с 3д графикой ситуация пососная
короче, где этот язык неуместен, он не используется, и поэтому задач не возникнет (говоря простым языком: >НИНУЖНА)
в остальном скорость исполнения не является ключевым вопросом. большинство типовых программ на питоне выполнится достаточно быстро, чтобы никого не ебало, сколько там миллисекунд это заняло. при этом существенно проще синтаксис и проще разработка. в результате большая экономия человеческого времени, меньше багов, меньше отладки, выше читаемость
как-то так
помогите а?))
Мне помогает говорить с собой я говорю себе тааак сейчас надо то сделать потом то и тд.
За маму, за папу...
Тебе уже хороший коммент дали: >>50152
В основном тебе производительность не актуальна, тебе надо решить задачу, а не заставить комп расходовать 0.1% вычислительных ресурсов на неё вместо 1%.
Чаще больше мифы и какие-то цифры на синтетических тестах. Про какие задачи конкретно ты говоришь?
Питон, впрочем, в первую очередь про задачи со сложной логикой, он на это заточен, а не на числодробилку и супер хайлоад.
Если у тебя hui = (pizda, ), тогда является
main((hui,)) нужно.
>>50285
Моя обезьянка в голове не хочет общаться)
Двачую. Понимание порой аж со скрипом приходит.
Бухарик али нарк ?
Потому что приоритет операций такой, что сначала выполняется степень, и только потом унарный минус. Прям как в математике,
Что за задания на ооп?
И второй вопрос - что почитать миддлу? Язык уже знаю хорошо, хочется больше практики и реальных кейсов.
Сделай упаковку и распаковку зип-архивов, мидл.
Струкртура там несложная, компрессия есть в модуле zlib.
Спасибо, читал недавно на Хабре про архиваторы как раз
typing
Type hinting.
Петушня должна была запилить ворнинги из коробки, но не парится. Поэтому приходится полагаться на IDE
Такими темпами скоро питон превратится в жабу, на которой ни строчки без иде не написать.
from com.palletsprojects.flask.web.application import FlaskApplicationContextConfigurer
Предположу, что чувак говнокодит
from statistics import mean
res = {}
for d in numbv:
----res[d["city"]] = mean(d["b"]) # если ключи уникальны
А насколько выгоднее будет сделать так?
res = {d["city"]:mean(d["b"]) for d in a}
Везде пишут, что компрешеншены выгоднее, но насколько?
Джанго это максимально удобный и медленный фреймворк, на реальных проектах будет какой нибудь форк асинхронного фреймворка и низкоуровневый апи к базе. Вот там ты и охуеешь.
Нет, просто Джанго хуета. Там изначально был допущен ряд конструктивных решений, который в общем-то предопределило его судьбу. Короче, пайтон и веб - это такое себе.
Ну так и заебись, проще баги отлавливать.
А знаешь, в этом что-то есть.
Очень стройный и хороший движок, с одной проблемой, архитектурно он синхронный, все решения заточены под запрос-ответ.
Встроена масса возможностей, при этом ими не обязательно пользоваться, если они не нужны, от них можно отказаться. Встроенные решения несложно заменить на альтернативные. Далеко не везде так.
Может тебе действительно какой-то базы не хватает, чтобы освоить, что зачем нужно и почему сделано так.
А асинхронные не заточены под запрос-ответ, норкоман?
Работает, но спроектирован местами немного убого. Чего вебсокеты стоят, куда более кривые, чем вебсокеты обычные, не из aiohttp. И возможностей из коробки мало.
Совсем-совсем не джанго. Но зато асинхронный.
Можно узнать какие конкретно конструктивные ошибки?
Он нихуя не знает, чмо
Ты еблан, твой обычный вызов возвращает объект запроса в орм. First() возвращает первый объект соответствующий запросу. All() вернёт все варианты. Дно ебаное
Эта стрелочка показывает тип данных, которые возвращает метод. Полезно для ридблсти и автодокументирования кода.
Блять ты знаешь как пишутся sql запросы? Так вот, тут ты можешь делать выборку элементов, в ней делать опять выборку и т.д.. Только ормка защитит тебя от багов, скл инъекций и десериализации
Вебсокетами из websockets удобно пользоваться. А как сделали в aiohttp совсем нет. Я имею в виду серверную часть.
++ Такой же опыт, когда пытаешься "понять" паттерны проектирования, в итоге ния не понимаешь. Я себя доводил даже до ощущения что схожу с ума. В общем лучше всего, думаю, ознакомится с теорией основных 5-7 паттернов (погуглить, есть сайтик с подробной инфой и примерами для пайтона), почитать про них в вики, тоже разобрать примеры (но не тратить на каждый больше 5-10 минут, лучше забить на такие) и попробовать, не особо увлекаясь почитать примеры на других языках, яваскрипт,или ява.
Ну и потом изучить какой-нибудь лёгкий фреймворк, типа aiogram, scrapy, или небольшие рест при какие-нибудь, написать пару проектов, заюзав как можно больше функций и потом почитать исходники фреймворка, осознать паттерны в исходниках, осознать говно в твоём коде и наконец написать ещё один проект. Поздравляю, теперь ты понимаешь ООП чуточку лучше.
Есть мнение, что учиться изучая код чужих людей очень хуево влияет на новичков
Прикол в том, что ты не должен смотреть как это сделать, ты должен узнать столько, чтобы самому знать ответ на этот вопрос. Так обучение происходит намного быстрее и качественнее.
Надо совмещать, и самому писать, и читать.
Если ты будешь только сам писать, ты в пионерство ударишься, в клепание велосипедов, не будешь знать многих паттернов и подходов, решений, которые активно используются. И вообще, не разовьёшь важный и нужный навык, разбираться в чужом коде.
malenki_pisya = OCHE_BOLSHA_PISYA
for stroka in stroki:
....if chetni_stroka:
........continue
....for element in elementi:
........if chetni_stolbets:
............continue
........if element < malenki_pisya:
............malenki_pisya = element
m = [[], [], []] - список списков, типа двумерный массив
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)
Почитай где-нибудь, как найти самый маленький элемент в простом списке, тогда псевдокод станет понятен.
Короче, обходишь циклом. Что тебе нужно знать:
enumerate(m)
встроенная функция питона, которая возвращает пару номер элемента и сам элемент
проверяешь, входит ли нужный элемент в множество, если да, используешь его.
Всё остальное совсем тривиально, ты должен сам это знать и уметь.
Условно нужно прикрутить адекватный вротенд к новостному парсеру, а пользоваться встроенным шаблонизатором фласка как-то уже стремно; хочется полноценное приложение для гитхаба
Соре за шакальное качество
pygame.org до кучи еще упал, блин.
Майкл Бей из мира Питон
У меня на винде 3й Питон (3.8 и 3.7), всегда писал pip install и все было норм. Установил на еще один комп Убунту, там терминал почем-то отказывался понимать команду pip и требовал только pip3. Почему так?
Там какие-то анальные пляски с названиями на фоне смены версий. python, python3. С пипом то же самое, надо думать.
Я сначала подумал, что в питоне вовсе отказались от этого и поддерживается только в си — но нет, через % работает, через f-строку - не работает.
В первом случае ф-строка отрабатывает без результатов, и потом отрабатывает %.
Во втором случае ты ломаешь ф-строку синтаксисом, который она не понимает.
Всё логично.
В первом случае там не ф-строка, я просто f забыл удалить.
>который она не понимает.
Почему не понимает? Я вот как раз про это спрашивал. Разве ф-строка не подразумевается как синтаксический сахар для форматирования через %?
Нашёл, что можно написать f"{23: >6d} {34: <6d} {'ab': >6s} {'ba': <6s}", кстати.
Хуйня "явное лучше чем неявное" никакого отношения к этому не имеет.
На линуксах долгое время был и есть второй питон. И тысячи скриптов, которые никто не хочет переписывать, вызывали его именно через python и pip. При миграции на третью версию понадобилось одновременно держать две версии питона. Чтобы не сломать старые скрипты, второй питон называют просто питоном, а чтобы юзать третий, нужно добавить 3. Это не проблема именно питона, она общая для всего линукса все эти убогие "2", ".so.2", "-ng" не от хорошей жизни появились.
А идея изначально хорошей казалась - не тащить десяток копий одной либы для разных прог. Теперь же это всех настолько заебало, что придумывают даже уже не в снап, а в докер-образы оборачивать каждую утилиту. Так и живём.
а когда второй питон умерт, будем переобуваться обратно, пока 4й не появится к которому прихуячим новые значения, кек
Нет, это разные синтаксисы. Для спринтф-подобного остается %.
В ф-строки можно даже код внедрять. Читай документацию, в общем.
Что нужно знать, чтобы работу джуну найти?
Блять ну посмотри вакансии браток
f строки это развитие str.format()
вместо '{}{}{}'.format(foo, bar, baz)
пишешь f'{foo}{bar}{baz}'
и охуеваешь, как раньше без этого жил
Сап, петонач.
Каков порог вхождения, тяжело ли даётся писать веб-говно — нужно ли оно, если есть желание стать жуниор-питонистом?
Опишите петон тремя словами.
порог вхождения в питон довольно низкий, но если совсем новичок, то лучше поизучать алгоритмы и всякое разное, используя какие-нибудь Си.
Веб-говно, если ты имеешь в виду бекенды, то пишется отлично, это одно из частых применений питона.
"нужно ли оно" хуй знает что ты тут хотел сказать
Описал тебя двумя словами двачер калоед
> Каков порог вхождения
Очень низкий, считай псевдокод.
> тяжело ли даётся писать веб-говно
Легко.
> нужно ли оно, если есть желание стать жуниор-питонистом?
Нужно, но имей в виду, что из-за лёгкости питона конкуренция ебически высокая.
> моржами
Нужно в одном случае из ста.
> слэшами в аргументах
Не нужно. Как и keyword-only. Жду, когда ещё добавят хуиты типа spaceship <=> operator.
бомбануло, что они при этом еще и засрали интуитивный синтаксис, типа "as" вместо моржа и тупль для позишн-онли аргументов вместо слэша между запятых
Да не, тут по-моему извечная борьба интеграции и разбиения.
Можно каждый ls выделить в отдельный микросервис, но ему надо взаимодействовать с внешним миром всё равно. Вот сейчас его помещают в его маленький уютный мирок в зафиксированном намертво окружении, но потом окажется, что с внешним миром он взаимодействует через API, а API, сюрприз, тоже может меняться в зависимости от версии. А внутри окружения могут быть какие-то модули с критическими уязвимостями. И так вернёмся к тому, с чего начинали.
Примерно как динамическую линковку делали для того, чтобы избежать дублирования и чтобы можно было независимо править баги в библиотеках. Но в итоге начался гемор с совместимостью версий.
Нет универсальной пилюли.
Даже внутри третьего питона не всё так очевидно. Его постоянно дорабатывают, появляются новые фичи, а некоторые старые объявляются как depricated. И вот ты пишешь софт, используешь фичу, а ещё потом объявляют
> Deprecated since version 3.7, will be removed in version 3.9
(особый лес такого с 3.10)
То есть у тебя даже при вызове python3 нет гарантии, что код всегда работать будет.
кто объяснит почему вывод
Calling method on Base Class
Calling method on Right Subclass
Calling method on Left Subclass
Calling method on Subclass
[Finished in 0.1s]
пиздец меня бомбит от этой хиуты
в книжке написано, что МРО идет слева направо, а в реале справа налево
>>52373
class 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'>)
а в реале справа налево
т.е. первым ищется метод в Райт класс
читай книжки вумные
https://dropmefiles.com/UNVJ0
я сам сквозь эту поеботу с огромным трудом иду
блять сколько всякой хуиты придумали
Эх, помню как на работе, недо-ждун с пеной у рта мне доказывал что "а чо тут такова, один раз жи, всё норм будет", после того как заменил логику без глобала на глобал.
Получилось выиграть аж 2 строчки кода.
Результат такой
Calling method on Base Class
Calling method on Right Subclass
Calling method on Left Subclass
Calling method on SubClass
[Finished in 0.1s]
Получается, что SubClass.call_me() всегда вызывает указанный метод у всех суперклассов (при его наличии)? А как же правило лишь о первом найденном совпадении? Разве SubClass.call_me() не должен вызвать лишь первый найденный у своих суперклассов метод, считая слева направо (здесь: LeftSubClass)
К тому же непонятен порядок печати. Получается такой порядок исполнения кода, из дебаггера https://www.onlinegdb.com/online_python_debugger
16 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() у BaseClass
12 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"?
Результат такой
Calling method on Base Class
Calling method on Right Subclass
Calling method on Left Subclass
Calling method on SubClass
[Finished in 0.1s]
Получается, что SubClass.call_me() всегда вызывает указанный метод у всех суперклассов (при его наличии)? А как же правило лишь о первом найденном совпадении? Разве SubClass.call_me() не должен вызвать лишь первый найденный у своих суперклассов метод, считая слева направо (здесь: LeftSubClass)
К тому же непонятен порядок печати. Получается такой порядок исполнения кода, из дебаггера https://www.onlinegdb.com/online_python_debugger
16 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() у BaseClass
12 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"?
Можно попробовать написать свой декоратор, который будет проверять, что тип параметра не является текущим классом (каким-нибудь inspect.isclass). Ну и кидать какой-нибудь TypeError.
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 словарь, а ключи "с", которые от словаря к словарю разные - склеить в лист?
Нет, ключи повторяются, но встречаются различия
>{'a':'foo', 'b':'bar', 'c':1}
>{'a':'hui', 'b':'pizda', 'c':1}
Так что так не выйдет
Ну тогда так 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 и 472
https://github.com/vanyasem/VK-Scraper/blob/master/vk_scraper/app.py
Анон, подскажи позязя
В какие строки в итоге вписывать свой айди и пасс, а в какую - айди владельца альбомов с фото? И как правильно прописать destination для винды?
Переставил себе ось, все почитил, июо чувствовал себя за ПК как ОКРщик, быдто даже дышал этой пылью. Ну и соотвественно проебал кряк пичарма ну не плотить же, так вот, помогите с кряком ибо где его искать, один бог знает, а как мы знаем, он уже умер и убили его мы. С меня как обычно человеческое спасибо
Плати за контент сам и тебе будут платить другие, дилетант блять
Поставь бесплатный комюнити. Лишь би пиздануть какой-то йоба ультимейт 9000.
Кстати, как сделать, чтобы в саблайме код не в новой вкладке каждый раз запускался?
Cап! Помогите с count():
Допустим, мне нужно найти "near" в тексте. При использовании count("near") также засчитает все производные слова - nearly и прочее. Как без регулярок решить эту проблему? в голову приходят только колхозные варианты - добавить пробел в конец поискового паттерна но тогда слова в конце строк считать не будет
Я ещё пизже способ придумал - через str.find пройтись по строке, и края найденного слова проверять на isalpha.
Хочу переписать парсер с обычных реквестов с пул экзекутером под aiohttp и посмотреть как оно ваще. Но пока тупо не понимаю че за корутины, как они друг с другом взаимодействуют и почему это работает так быстро даже с наличием GIL'а
Асинхронщина работает просто - ты запускаешь какое-то действие и коллбек для него, который надо выполнить, когда оно отработает.
В хттп реквесте 99% времени это ожидание данных, так что можно ждать много ответов одновременно.
Вот и всё.
> пытаться деструктурировать строку
> написать if с большой буквы
> не поставить двоеточия
> не поставить отступы
> IDLE
у тебя внутри живет дед в курсе???
invalid syntax потому что If с большой
обрати внимание на использование input - там должен быть .split, так как на вход ты пишешь строку и функция input возвратит тебе строку (а не 3 элемента)
а также отступов нет - программа даже визуально красивее смотрится когда есть отступы
двоеточий нет после if-else-elif - в пайтоне это надо делать
желательно a==b и тд ставить в () - так будет красивее
Целую в щечку, спасибо, все работает, как надо
36 часов и 47 минут.
Немного трогал голый питон, по работе пишу на нем всякие простенькие скрипты для аналитики, также по работе делаю несложные запросы к бд на 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! Какого хуя вообще происходит? Откуда оно там взялось блять?
Сейчас набегут пердоли и скажут, что нужно запускать на правильной ОС.
А схуя ли у тебя питон в програм файлс? Вот и нет прав туда писать.
Ищи в программах и удаляй. И path надо будет подправить, там должно быть.
Очевидно что он крашнулся не на нулевой строке этой template (я даже примерно догадываюсь где), вопрос в том, почему он мне пишет об этом?..
ну это ж 3я версия джанги блин, ну как такой уебищный дебаг вообще возможен?
Допустим, есть строка с предложением без знаков препинания.
Какими способами можно расставить в нём запятые по заданной грамматике?
Первое, что пришло в голову, это сделать список слов и предлогов, чтоб в цикле искать по ним подстроки и подставлять запятые по индексам, но мне кажется, что существует подход получше.
Невозможно.
Почему предложение без знаков препинания читать сложно? Потому что способов их расставить много, и от них сильно меняется смысл. И читающему приходится догадываться о смысле по контексту.
Самый реалистичный вариант - машинное обучение. Там, может, что-то да получится.
Вангую, для того чтобы не ебаться с экспешенами Model.DoesNotExist или как там в джанге.
Это и так понятно, я и не ставлю целью воспроизвести синтаксис целиком, только отдельные правила вроде "..., a ...", "например, ...", "... потому, что ..." и так далее.
Мой вопрос был только в способе поиска и подстановки таких паттернов в строке.
>не ебаться с экспешенами
То есть вместо того чтоб адекватно получить эксепшн и обработать его, мы условно ставим self.value = None? Совет на все времена нет Осталось только из каждой функции None возвращать, когда получаем непредвиденное значение (и заодно проверять результат каждой функции на None)
Очень нравятся отличия между ситуациями "2" и "3"
я понимаю что класс наследуется от object
но ...
if word == 'near'
>Как без регулярок решить эту проблему?
Но это же типичный вопрос именно для регулярок. Они идеально для этого подходят, быстрые и оптимизированные.
> re.compile
Кстати, интересно, почему так до сих пор пишут, если, вроде как, пайтон их всё равно на ходу компилирует и кеширует. Разве что, чтобы паттерн в какую-нибудь красивую переменную засунуть.
>там 90% ебанутых HRш, лепящих всё подряд
сильно преувеличил, поскроллишь штук 10 и найдешь вполне адекватные требования
вообще это классный двачевский для оправдания самого себя, я так понимаю ты даже не открывал вакансии
миф для
Существуют, ведь до мидла надо ещё вырасти, и это не 1-2 месяца занимает.
Зря ты так к вакансиям относишься, читай только требования(технологии именно) и поймёшь что те е надо учить.
Мало кто напишет "Джуниор", сразу ломанутся те, кому ещё в стажёры рано.
И не понятно, почему считается, что джуниор это тот, кто совсем чего-то знает. Вообще, на других квалифицированных специальностях после ВУЗа (4-6 лет!) ты идёшь на работу и тоже на младшего. А двочеры почему-то считают, что вот можно полгода поучиться и сразу идти работать.
Вообще, может стоит поискать вакансии в QA на какое-то время, но это именно в фирму к разработчикам идти надо. Так будет реальный опыт работы на реальном производстве.
Скажем, я хорошо разговариваю по английски и дружу с грамматикой, но говорю с дичайшим руснявым акцентом, отчего все на меня будут косо смотреть. Что аналогия для этого в Пистоне?
Игнорирование PEP8, например.
Спасибо! а если нужно применить функцию к каждому отдельному объекту в матрице? Например: создать из 2-х мерной матрицы чисел, матрицу из этих же самых чисел но типа str?
Уже прочел укус питона, щас читаю грокаем алгоритмы
Все разобрался сам, оказывается все просто, через list(map())
А че если им напиздеть что я окончил техновышку (на самом деле я гуманитарий) сказать им что знаю виндовс как 5 пальцев и готов работать за еду первое время. Есть шансы что возьмут? Я ебаный гуманитарий и учу питон, так хоть погрузился бы в атмосферу айти и было бы проще и быстрее вкатываться..
>готов работать за еду первое время
Не думаю, что это кому-то интересно. Вот реально, мало-мальски большим работодателям это не интересно. Интересно хороших людей найти, а не чуть-чуть сэкономить. Хотя если как-то вбросишь, что деньги не главное на начальном этапе, то может просто отношение лучше будет.
>>54218
>А че если им напиздеть что я окончил техновышку (на самом деле я гуманитарий)
Скорее всего с тобой начнут разговор с того, где ты учился, на каком факультете, тема курсовых и диплома и т.п. Не пытайся обманывать в таких вещах, это сразу вскроется и отношение будет соответствующее. Скажи просто из серии, что вот хоть и гуманитарий, но всё равно в первую очередь компы интересовали и вообще именно в айти хочешь.
Вакансия смотрится интересной, но не факт, что попасть туда просто. Но попробуй, почему нет.
Благодарю. Добра тебе.
Обесните, (на пике открыт bot.py) почему пичарм подсвечивает, что якобы некоторых модулей не существует? Хотя они всегда находились рядом, но сейчас их просто всех вместе перенесли из ./ в ./src/
Более того, проект работает. Я где-то (да) объебался или пичарм бесноебит?
опыт програмирования со временем прийдет
Лучше создай пакет с __init__ файлом, и да скачай isort, а то глаза болят от этих импортов.
Тебе, долбоебу, написали - без регулярок. Нет, надо высраться
Да, именно так. try except не всегда удобно.
value1 = .first()
value2 = .first()
value3 = .first()
if value1 and value2:
elif value3 and value1:
elif value2 and value3:
Че-нибудь такого рода. Но тебе виднее, дело вкуса (а еще try except по производительности хуже:))
>>54288
>>54287
Благодарю за оперативное пояснение. Все поправил, оптимизировал импорты, добавил __init__.py
А ещё я успешно собрал докер образ, запулил его на вдс и развернул помощью компоуза, оч все понравилось, ппц как удобно всё придумано блин.
Мож нахуй ваще этого удава и попробовать вкатится в девопсы
При вызове метода объекта ему автоматически передается сам объект первым аргументом. Это и есть селф.
https://ideone.com/ECUTRq
Т.е. ты вызываешь как в строке 10, происходит то что в строке 11.
Есть class Dom.
В нормальном доме у тебя будут атрибуты dweri, okna, sralnik и методы otktit_okno, smit_sralnik. Окна могут быть деревянными или пластиковыми, одннокамерными, двухкамерными, разного цвета и т.д. Self нужен для того, чтобы при изменении этих параметров или выполнении каких-то действий всё это происходило в конкретном доме, а не во всех домах вообще. Потому что окна есть и у машин и у твоих соседей в домах. Но ты-то создал свой Дом(экземпляр класса) и хочешь производить действия конкретно со своим эксземлпяром.
Там есть довольно странные задачки. Например https://py.checkio.org/en/mission/unix-match-part-1/
Хочется решить как-то просто базовыми средствами, но понимаешь, что придется городить огрод. Поэтому решение заключается в идиотской переделке в регексп.
Не очень понимаю учебную ценность такого.
Вопрос - как мне менять ее положение уже во время выполнения программы? Я вижу, что в документации идет >>> приглашение к каждому действию, но не понимаю как совместить режим исполнения командной строки и режим питона.
Если я правильно тебя понял - ты запускаешь файлы через cmd типа
>python huepaha.py
А
>документации идет >>> приглашение к каждому действию
Это сам интерпретатор, просто напиши python в cmd или в папке найди исполняемый файл
ага, это типа задачка для fnmatch или glob. ты можешь решить задачу за 30 минут базовыми методами, а можешь заюзать либу и за 30 секунд пройти все чеки. я считаю, проработать вопрос самому, а потом глянуть на солюшны других людей и увидеть более валидное решение - это довольно поучительно, и в этом один из главных приколов чекио лично для меня. а в данном случае импорт fnmatch запрещен чекером чекио, видимо, по причинам безопасности, и ты всё равно вынужден будешь напилить ненужный велосипед. кек
ну это чисто технопроблема, а вот что некоторые задачки без специального знания какого-то алгоритма решить почти невозможно - это конкретный проёб. там, где всякая комбинаторика, особенно сложно. ты или пишешь прикольный алгоритм на 10 строк, о котором автор задачи узнал в универе, или по хардкору хуячишь кучу солверов и решаешь задачу численно, если захочешь столько ебаться, конечно. но всё равно обсираешься, потому что ассерт на сервере проверяет какой-то корнер кейс, который справедлив конкретно для "красивого решения" и не приемлет альтернативных решений в принципе
Я хотел хранить в дикте, но на стаковерфлоу сказали что это будет неэффективно при динамически меняемом наборе ключей.
у тебя терабайты данных?
если нет, то забей. там просто очкуют, что говноумник в комментах их "срежет", уровнив их авторитет, вынудив извиняться и дополнять, поэтому стараются охватить своим ответом ВСЁ
>всем похуй
Ну-ну
Один раз пидором назовут и потом уже будет такая кличка. Меня батя предупреждал
Не терабайты, но мне очень критична скорость обработки, очень.
А именно итерироватие / поиск элемента.
Ты шутишь? Я пока буду к ней стучаться/получать ответ, я триcта раза смогу это все обойти.
>>54496
Какой носклюль? Есть же примитивные типы в питоне, все что поверх этого - тормознутый оверхед
>>54497
И чем в дереве плоха скорость обработки?
В крестах std::map работает быстрее листа при достаточном количестве элементов
Я ж не знаю что у вас быстрее/что медленнее работает, поэтому сюда и пришел
Хранить структуру данных состоящих из пары инт инт.
Наиболее быстрый обход структуры и поиск элемента по значению.
В плюсах это либо std::vector< std::pair<int, int> >, либо std::map<int, int>. Первое работает быстрее при небольшом количестве элементов.
> Какой носклюль? Есть же примитивные типы в питоне, все что поверх этого - тормознутый оверхед
Ну какбе питон тоже не заточен под скорость.
Я думаю та же редиска будет быстрее начиная с некоторого довольно небольшого объема.
>std::map<int, int>
Может быть unordered_map всё-таки? map же говно ебаное с плохой константой.
Дефолтный словарь это unordered_map, время доступа константное.
Попробуй from typing import TypedDict ещё. Я чёрт его знает что это, просто проверил если ли типизированные словари - и они нашлось.
Для 100 элементов пока этот хеш вычислится я чай успею сделать
При больше 1000-10000 да, решает.
Мап еще и может оптимизировать поиск до логарифма, не знаю правда как.
>import TypedDict
Ну очевидный оверхед над обычными типами, они то может удобнее и практичнее но точно не быстрее
>Дефолтный словарь это unordered_map
Даже с интами, питон все равно хеш считает?
Мап - сортированное дерево, вот тебе и логарифм для поиска в виде высоты дерева.
Стоит его использовать, только если тебе эта сортировка нужна постоянно. Во всех остальных случаях как ты и сказал - вектор на малом количестве и хеш-таблица на большом. Мап на любом количестве проиграет вектору или таблице, скорее всего - ведь там даже доступ к элементу за логарифм, лол.
>TypedDict
Да я сейчас почитал, это вообще не то. Название обмануло меня.
Просто в нумбе (http://numba.pydata.org/numba-doc/latest/user/jitclass.html#specifying-numba-typed-containers-as-class-members) typed-dict это совсем другое, там явно тип указывается, и потому я подумал что другой TypedDict это тоже что-то подходящее.
Дампани запрос в логи или принтом и посмотри, где ошибка.
>Даже с интами, питон все равно хеш считает?
Да, конечно. Но подсчёт хеша очень быстр и о нём в принципе не нужно думать, актуальны могут быть вопросы дальнейшего поиска, добавления и удаления элементов.
Я сейчас какие-то синтетические тесты проделал, с большими словарями и большим количеством операций, разные стратегии добавления элементов в словарь и удаления практически никак не влияют. Размер тоже никак не влияет, если словарь большой и в кеш процессора уже всё не влезает.
Словари в питоне очень-очень быстры и не надо пытаться что-то придумывать вместо них в таком случае. Если ты пытаешься уже здесь оптимизировать, то тебе питон не нужен.
Поиск-удаление это O(1) в норме. Но в плохом случае может доходить до O(N), это если неудачно дерево строится, из-за неудачного хеша это возможно. Но это надо специально под этот хеш программу строить. Рандом и "подряд" работают примерно одинаково в тестах.
В питоне внутри всё реализовано через словари. Ты когда функцию вызываешь, в ней локальные переменные тоже в словарях. Всё в словарях. Поэтому работа с ними оптимизирована по-максимуму. И поэтому же пытаться тут что-то выиграть бесполезно. Объём занимаемой памяти можно выиграть, если специальные либы использовать.
compute(img, kp)
А если это цвета\точки?
set_color(0,255,0)
>Не могу найти в PEP8
Это порево двадцатитетней давности, времён 15 дюймовых мониторов редакторов, работающих в текстовом 80-колоночном режиме. Не обязательно дрочить на него.
>>54523
>надо ли юзать пробелы например при передаче аргументов в функцию
После запятой - надо. PEP8 рекомендует НЕ ставить пробел тогда, когда присваивание в передаче параметров делается, вокруг знака равно. Но после запятой надо.
func(par1, par2=2, par3=3)
>А если это цвета\точки?
Всегда, и в tuple тоже.
Вообще здесь есть
https://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements
Просто посмотри описанные примеры. Без пробела после запятой очень неудобно читать, это вообще стандарт, и в программировании, и в оформлении текстов.
iterable - это то, что имеет метод __iter__(), который возвращает итератор, а итератор - это то, что имеет метод __next__(), так? Правильно ли я понимаю,что когда я пишу
l = [1, 2, 3]
for i in l:
...
на самом деле неявно вызывается l.__iter__(), из которого потом берутся next?
Да, всё именно так. Почти.
Сначала вызывается l.__iter()__
Он возвращает итератор, это этот итератор не обязательно тот самый l. Более того, скорее желательно, чтобы это был какой-то другой объект. Демо-примеры итераторов в этом плане не очень корректны (те, что возвращают self), они свалятся за примере
for i in L:
___for j in L:
______print(i, j)
но не всегда это актуально.
Забивал уже, но кидает на забугорные сайты, где все говорят исключительно про версию Питона...
ето сам экземпляр класса
Ну да, это не стоит отдельного треда, спросил бы в общем ньюфаг треде.
>по вышмату и статистике 5
Имхо, никаких подводных и проблем не предвидеться. Если ты в самом деле понимаешь статистику и теорвер на отлично, то ты уже лучше половины машинлёрншиков, а подтянуть прогерство для питоновых либ маш-оба вопрос одного-двух месяцев в зависимости от степени знакомства с основами прогерства.
>Планирую после вката съёбывать в Силиконовую долину
Там таких как ты пятачок за пучок, причём своих, которым визу делать не надо.
Да ладно, везде пишут что берут за знания а не за бумажку. + мне похуй будет даже если шарагу закончу ибо живу в ссаной лугандонии бумажкой которых я могу только подтереться.
>>54771
Ну тервер подучу мальца и думаю ок будет, в остальном себя оцениваю как сильного студента. Сейчас вот это смотрю https://youtu.be/2XFaK3bgT7w?t=3152 потом по списку книжек думаю уже идти.
>>54802
Значит выдрочусь на уровень знаний получше тех, которые там.
И заодно вопрос: насколько адекватно в питоне реализованы ООП-фичи и функциональные фичи?
Более чем достаточно адекватно для полноценной работы.
> ООП-фичи
Сейчас набегут адепты смоллтолка.
> функциональные фичи
И хаскелля.
штоб умереть надо жить для начала, оба этих языка не жили
>насколько адекватно в питоне реализованы ООП-фичи
Простенько и хуёвенько.
>функциональные фичи
Учитывая, что все "функциональные фичи" — это три фичи (типизация, first class functions и паттерн матчинг), то примерно никак.
Языки с чистой парадигмой никому не нужны. Путь то ООП, ФП или что-нибудь ещё. Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременно
В Питоне есть и основы ООП, и какой-то минимум ФП, и метапрограммирование, и параллельное, и асинхронное поддержали вполне достойно. В этом его сила. Свои слабости тоже есть, не без них.
>Языки с чистой парадигмой никому не нужны. Путь то ООП, ФП или что-нибудь ещё. Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременно
Да не, похуй вообще на подходы, нужны языки которые требуют минимальной подготовки и позволяют пилить фичи как угарелому.
> В Питоне есть и основы ООП
Есть.
>и какой-то минимум ФП
Нету. Блять, в питоне даже лямбд нормальных нет, ты о чём вообще?
>и метапрограммирование
В питоне это тоже хуй пойми что, а не МП.
>и асинхронное
Ну хоть один поток полностью утилизировать сумели, ахуеть.
В питоне, как в языке, толком-то нихуя и нет. Он простой как палка, и содержит 0 каких либо концепций, просто тупой как палка язык. За что и ценится.
> Языки с чистой парадигмой никому не нужны.
Всё-таки отчасти нужны, их используют как DSL, но для чего-то большего они не особо годятся.
> Нужны языки, которые не сковывают и позволяют разные подходы применять, причём одновременно
Главное при добавлении фич в язык не увлечься, а то получится C++. Тоже не сковывает, да и вообще язык универсальный, но сложноват в использовании.
>Всё-таки отчасти нужны
Где например? Для всяких декларативных UI-ев обычно на том же языке DSL и клепают. Больше той же чистой функциональщины нигде не видал.
>Главное при добавлении фич в язык не увлечься, а то получится C++. Тоже не сковывает, да и вообще язык универсальный, но сложноват в использовании.
Язык либо живёт и развивается, либо тухнет. Обрастание фичами — это вопрос времени, для того и нужны новые языки (или хотя бы версии, дропающие обратную совместимость), чтобы собирать все удачные идеи из старых и дропать лишнее. Правда бизнесу этого не объяснить, и легаси на каком нибудь втором питоне в каком нибудь фб так и будет жить как всякого банковское/военное говно на коболе/фортране, лол.
Есть там всё, если не заниматься демагогией, но никто за простым синтаксисом не разглядит, ведь всем надо скобочки, сотню ёбнутых конструкций, синтаксиса в духе перла и прочих фишечек.
C++ обрастал фичами во много слоёв, причём эти фичи костылями прикручивать приходилось, чтобы не ломать совместимость со старым языком. В результате какой-то адъ на выходе.
И такое ощущение, что там идеологи об элегантности особо и не думали. Всё-таки система ценностей идеологов питона немного другая, это чувствуется.
Хотя последнее время много какого-то говна принесли. f-strings на первый взгляд прикольно, но реально это шаг в сторону говнокода, такой php древних времён. Декларации какие-то дикие.
Там нет нихуя по факту, мань. Я же говорю: он потому и ценится. Можно давать писать код людям, которые в программирование пришли вчера.
>но никто за простым синтаксисом не разглядит
А что разглядывать-то, мань? Это вполне конкретные вещи, которые в питоне нет. А как говорят гоферы — и не нужно.
>и легаси на каком нибудь втором питоне в каком нибудь
Сейчас чуть проще, благодаря моде на микросервисы.
Обратную совместимость надо дропать иногда, но и перекатывать на новые версии тоже надо адекватно. Гвидо тот ещё урод в этом смысле, выкатили третью версию, которую при всём желании нельзя было совместить со второй, поэтому много лет ключевые проекты на третий питон не переходили и вообще популярность просела языка.
Вот банальные юникод-строки. Был префикс u"строка" во втором питоне, обязательный. Чего стоило оставить этот префикс в третьем, но объявить его obsolete, с обещанием убрать через несколько лет? Тогда можно было бы писать совместимый код и постепенно перекатываться.
Одна эта мелочь ставила крест.
Элегантность по отношению к питону, имхо, неверный термин. Всё же, он про эстетику. А если говорить про эстетичный (или красивый) код, то тут уже по возрастающей идут всякие руби...скалы...хаскелли.
В питоне думают о простоте. В каком нибудь го о ней думают ещё больше.
>Если я правильно тебя понял - ты запускаешь файлы через cmd типа
Да, все так. Я думаю вот о чем - черепаха пошагала и остановилась, потом я ее не выходя из графического интерфейса (получается файл все еще исполняется, cmd не выдала приглашения) могу ли перемещать дополнительно?
В общем, шизоидно получилось, суть - могу ли я дополнять уже выполненный код и получать сиюмитный результат?
Вот прошла она у меня 50 пикселей и все, строки в файле .py кончились а я тут такой опа и дописал пиздуй еще 20 пикселей и она попиздовала?
Сразу видно нюфага, лол.
Нет ничего более постоянного, чем временное. Сегодня ты вставляешь костыль, завтра переходишь на другие таски, через пару месяцев ещё кто-то доложит туда свой костыль и пойдёт по другим таскам, а через пару лет в такой код никто даже залезать не захочет. И уж тем более в FAANG-ах, где кол-во программистов просто космическое и кодобазы на сотни гб.
Это как с недавним дропом поддержки x32 битного софта на макоси. Внезапно оказалось, что куча даже нового софта написана криво и не умеет в x64 (с банальными ошибками, вроде кривого типа для индексации массива), просто из-за того что была такая возможность и все хуй ложили пока не пришёл эпл и не выебал всех в сраку.
> хаскелли
> эстетичный
Уродливый язык, как ни посмотри. С одной только обработкой ошибок здесь всё в разы хуже, чем в Go. Функции, принимающие тип из 100500 полей. Лапша из рекурсий и лямбд, потому что нет циклов и переменных. Стиль именования идентификаторов из одной буквы. Нужно быть в конец матанутым, чтобы увидеть в этом красоту.
Зато решить задачу неэлегантно, засрав всё вокруг стейтом нельзя, вот он и эстетичный, лол. Всё есть функция, без лишних сущностей, есть жи брат
>Нету. Блять, в питоне даже лямбд нормальных нет, ты о чём вообще?
Странно что ты еще Хаскель не притащил как образец на который маст хэв равняться иначе "не_ФП_яскозал"
>В питоне это тоже хуй пойми что, а не МП
С метаклассами и дескрипторами пытался хоть раз разбираться? Я - да, достаточно мощная вещь но забил хуй на полпути т.к. это надо только красноглазым, пишущим фреймворки
>Ну хоть один поток полностью утилизировать сумели, ахуеть
Асинхронная работа в Питоне работает как надо, проблема лишь что приходится часто полагаться на сторонние либы ведь стандартная asyncio это просто каркас для других пакетов и не более. Многопоточность же не могут завезти в первую очередь из-за ограничений CPython которые хуй так просто наебнешь. Где хардкорная многопоточность все же нужна GIL внезапно таки освобождается и она работает, но это все под капотом ебошит и программер туда не залезет дабы ничего не наебнуть. numba тому пример
>Асинхронная работа в Питоне работает как надо
Недоделана. Например asyncio.wait_for()
В теории должна прерывать выполнение по таймауту, однако реально этого не делает, если исполнение зависает на синхронной задаче, прерывания не происходит. Почему? Я ожидаю другого поведения. Это должно быть заложено в язык, но этого нет.
При этом реализовать самому реально, используя библиотеку signal, системнозависимую правда. Но это неудобно.
Ещё проблема с чтением stdout/stderr в запускаемых отдельных процессах. Нельзя читать данные, пока вызванный процесс не завершит исполнение. Это ни разу не асинхронное поведение, и хрен переборешь.
https://pastebin.com/BELtEqvX
И есть модуль main, так же асинхронный, который вызывает в себе этот парсер
https://pastebin.com/t6w3PHJy
Луп мейна крутится с условием run_until_disconnected()
А луп парсера run_until_complete(). Иными словами, мне просто иногда из постоянно работающего мейна нужно вызывать метод из парсера, однако интерпретатор запрещает это делать с ошибкой пикрил
Почему так получается? Как мне разделить эти тупые лупы?
А, я уже сам разобрался. Надо менять не на None, а на ''
Он кекается на bot.run_until_disconnected() или self.loop.run_until_complete(self._parse_content()) ?
На втором.
Если я правильно понимаю терминологию, то мейн поток спокойно крутится, пока не дисконнект
А вот поток из парсера уже запустится не может
Полез в доки asyncio, похоже нужно вручную создавать новый таск
https://stackoverflow.com/questions/61088634/docker-compose-up-path-does-not-exist?noredirect=1#comment108096767_61088634
Странный чел.
бамп
даун я бы на его месте, со всем этим кризисом, жопу рвал бы как мог
Бывает
Через просто исполнение файла - вряд ли, а если просто код в интерпретатор ебанешь - скорее всего сможешь, поэтому и >>> у тебя в учебнике
Понял, спасибо.
Меня вот интересовало как раз пользуются ли люди в реальных коммерческих проектах возможностями интерпретатора?
Или все ограничивается исполнением заранее прописанных .py файлов?
Дело в том, что я еще пока не до конца понимаю саму парадигму кодинга на питоне(да и кодинга в целом). И когда ты начинаешь изучать подобные вопросы не поднимаются в литературе, а мне в голову засел такой, я считаю, фундаментальный по крайней мере на моем этапе развития в этой теме вопрос.
Это одно и то же. Просто в одном случае интерпретатор читает ввод от тебя, а в другом из файла. Суть от этого не меняется.
Массив - static array С-господа пояснят
"Список" - dinamic array
List - linked list, нахуй ненужон кроме пары частных случаев
Они быстрее и оптимальнее по памяти, потому что нет этой универсальности.
Массивы ищутся в памяти быстрее всего, так как элементы идут друг за другом, можно сказать
Каждый элемент списка разбросан по памяти и поэтому этот элемент должен содержать в себе данные любого типа И указатель на следующий элемент.
Поэтому также можно сказать, что массив это не набор указателей.
Не нужны, нужна повсеместная иммутабельность и бесконечный ряд факториалов на хаскелле.
Тебе не нужно внутри объектов пользоваться функциями вроде 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()
>Код будет иметь другой вид, скорее
async def get_posts(self):
____return await self._parse_content()
О господи, мне аж поплохело от того, насколько это очевидное решение.
Вероятно я запутался из-за того, что много тестировал отдельно этот класс вне основного Event loop
В общем, теперь все работает, большое спасибо!
Как вызвать функцию а, чтоб передать ей с (для функции b) ?
def a(x, c):
____b(c)
Сформулируй вопрос нормально. Может быть ты даже сам придумаешь и ответ после этого.
Уже понял. Нужно вызывать a(x)(c).
Надо намутить разграничение доступа между пользователями, чтобы только создавший эти instance мог их редактировать и смотреть. Мне надо поставить поле owner = ForeignKey(User) внутрь обоих: Post и Entry или достаточно будет поместить его только внутрь Post? Как обычно делается? Я канешн понимаю что Entry по-любому связан только с одним конкретным Post, но проблем с безопасностью так не возникнет?
> Аноны, как проверить что список не пустой?
Ну я и долбоеб. Уже нашел - пустой список - это False в питоне
A = list()
If not A:
Print(pust)
Понятно, что можно удалить теги и искать подстроки, но хочется что-то более сириус бизнесовое.
А смысл дублировать поле в 2х моделях, если они связаны и так и ты можешь получить доступ в оба направления и посмотреть это поле?
У тебя же не простые селекты, куда ты можешь что угодно поставить, так что какого-то омега-очевидного способа скорее всего нет. Хотя если авторизация через токен и кто-то спиздит чужой токен, то можно, но это уже проблема пользователя
Вот у меня есть
While True:
----if событие происходит:
--------time. sleep(10)
-------- сделать так-то
Есть ли какой-то способ заменить sleep таким образом, чтобы действие исполнилось через 10 секунд, но чтобы в эти 10 секунд код не простаивал в ожидании, а все так же отслеживал события, запуская в очередь новые таймеры, если события произойдут
?
for (a = 1, b = 3, c = a * b; a < 10; a++) {
...
}
Как что-то подобное реализовать с питонухе?
С словарях хитрее алгоритм. Хеш-поиск работает так, что у тебя есть линейный массив с прямой адресацией по хешу
address = array[hash]
Ты просто не можешь сделать такой массив из 2^64 элементов, памяти не хватит в принципе. Массив маленький, динамически расширяемый по мере разрастания словаря. И вот магия с тем, как вычислить этот маленький хеш, она есть. И как коллизии обрабатывать, там ещё больше магии.
Просто хеш инта равен этому инту
Никак. Этот тип цикла не поддерживается.
Тебе надо открыть для себя асинхронное программирование. Да, в питоне это есть.
b = 3
c = b * 1
for a in range(1, 11):
____...
Не очень понял, зачем тебе действие, которое выполняется один раз, нужно запихивать в скобки, но ладно.
> запуская в очередь новые таймеры, если события произойдут
Скорее всего тебе понадобиться многопоточность.
Либо ты можешь убрать свой sleep и во время отслеживания своих действий (точнее, между ними) и запуска новых таймеров время от времени запускать проверку не прошло ли 10 секунд и не произошло ли какое-то событие - но это утопия и подходит только для не очень сложных случаев.
>>55907
В питоне только foreach цикл, такого for нету.
Можешь записать свою фиготу через while, впрочем твой конкретный случай можно и через for записать - у тебя вроде бы только a изменяется.
>>55914
Я в курсе же про всё это, и про коллизии тоже. Нет там никакой магии. Скорее хеш-функция выдаёт стандартный 64 битный результат, а словарь использует младшие n битов, удваивая и перестраивая массив при проценте заполнения больше определённого.
Что делать? Стирать к херам вообще все что есть?
1) онлайн
2) без жесткого тайминга (сдай задание завтра или умрешь)
3) с сертификатом
4) можно на ингрише
Очевидная Coursera очевидна?
Никак ты этого на питоне не сделаешь, разве что консольный скрипт в каком-нибудь QPython запустишь.
Андроид - это жаба и котлин. Даже попытки написать что-то на родном NDK на C++ приводят к тому, что шаг влево шаг вправо - и приходится возвращаться к жабе.
Теоретически, возможен вариант с Jython, но вряд ли где-то есть нормальный пошаговый туториал, всё обрывками.
kivy
но пожалуйста, освой Kotlin, он не такой ебанутый как Жаба и даже сходства с Питоном там есть, не иди по тропе пизданутых жс-еров которые суют свой язык просто всюду (в том числе и на мобилки), уже засрали все что смогли
print('URL:', self.get_success_url())
По итогу увидел что собственно этот метод и крашится: AttributeError: 'NoneType' object has no attribute '__dict__' С хрена ли метод не возвращает мне тот success_url, который был определен в классе?
Мне надо иметь возможность, сортировать результаты по нескольким значениям.
Т.е. например, есть список категорий, пользователь может несколько раз из этого списка выбирать разные значения и они "суммируются", как например тэги или фильтры на некоторых сайтах.
Какой виджет для этого лучше всего подходит?
Дополнение: крашится он начал после того как я переопределил метод form_valid и стал сразу возвращать в конце return HttpResponseRedirect(self.get_success_url())
Думал, что все должно нормально работать, но что-то идет не так
https://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, который смогут тебе помочь, если тебя надо снести базу и на ее руинах создать новую. А может лучше тесты написать и не страдать.
>>56104
>AttributeError: 'NoneType' object has no attribute
Либо не передал чего надо в метод, либо не вернул чего надо из метода. Если покажешь код, то будет проще тебя помочь.
Всем привет. Нужно без знаний кода собрать бота для телеграмма. Его функционал как у тиндера, только на минималках:
1. Зарегался, указал описание, фото, город
2. Жмешь поиск и тебе профили таких же зарегавшихся показывается
Я смогу такое сделать на конструкторе? Или там только «если а то б»?
Думаю об используемых сущностях всегда и везде, смотришь на дорогу, думаю о классах Транспорт, наследуемых от него классах Машина и т.д., и т.п. ООП про мышление, а не про дрочку. Старайся думать о логике приложений на смартфоне, какие классы реализовывали разработчики, по твоему мнению. Что-то в этом духе.
освоил удава (+ попутно жс (ес6 без фреймворков), жабу (в шараге) и всякие инструменты автоматизации типа баша, докера итд) на уровне "медиум++ задачек с литкода без гугла"
Но стажировок щяс ни у кого нет; через шарагу можно только в вротенд вкатится, а я хочу в бекенд
Если своровать у кого-нибудь классный гитхаб и отрефакторить его под себя, это покатит на собесах?
>освой Kotlin
Блять опять эти скобочки дрочить блядские, начал изучать python потому что нет этой бесящей хуйни, но все равно, спасибо, буду параллельно изучать еще kotlin
JS - для пидоров-смуззихлёбов.
Так вот почему здесь так любят делать ботов - потому что это гуманитарное занятие где-то на уровне вордпресса и макросов для экселя. Им дали простейший в использовании язык - нет, не хочу, хочу программирование мышкой.
Вопрос вроде был "как писать для андроида на питоне", а не "как писать для андроида не на жабе".
Конструкторы нужны для очень простых проектов уровня сайтов визиток. Сам понимаешь, какая там логика.
Даже если и сможешь, это будет такое извращение, что проще самому выучить какие-то базовые штуки и накидать проект за пару часов.
Тебе всего-то понадобится обертка для работы с апи телеграмма (советую telethon или, если туповат - телебот; у них у обеих шикарные доки с кучей примеров) и какая-то бдшка. Можно воспользоваться встроенной sqlite, если бот небольшой - для знакомств с одноклассницами, например.
И в принципе все, это очень просто.
>жабу (в шараге)
Удачи придти на вотчину к жаба-бояринам, там ты будешь обоссан и скормлен очередной AbstractProviderActorFactory
А кто-нибудь на нём писал что-то практичное, что именно на смартфонах работает?
Жить с ним можно, нормально там по скорости, подводные камни и слабые места есть?
С сетью нормально дружит? С asyncio можно подружить, или надо треды для сети делать, или как там вообще с этими вопросами принято?
Так ладно. Я в качестве хобби когда-то только версткой и чуть js занимался. Я смогу эту хуйню на джаваскрипте сделать? Я не буду ради этой задачи питон изучать, лучше денег накоплю и фрилансеру задачу поставлю.
Да.
Отступы неправильные.
На синтаксис.
Отступы.
Вау, и правда даже официальная поддержка asynio уже есть.
https://kivy.readthedocs.io/en/master/api-kivy.app.html#async-configuration
Спасибо, Юра Гагарин, ты подарил мне надежду на космос.
Сомнительная штука на самом то деле.
KivyMD забросили поддержку, в результате из ЛДНР какой-то петух взялся за это дело. Ему безусловно спасибо, но как бы на общий уровень намекает.
Но идею внести это в шапку полностью поддерживию, тем более скоро перекот.
>Ему безусловно спасибо, но как бы на общий уровень намекает.
Ты всегда можешь ему помочь.
Или найти того, кто сможет помочь.
> Ты всегда можешь ему помочь.
Угу, но мне совершенно не зашел подход киви в виде их файликов со стилями.
Хотя на QT5 хуярю только так, странно.
где n?
Я полагал что-то вроде либо кучи чекбоксов, либо выпадающего списка с возможностью отмечать пункты этого списка. Второе возможно?
Ну я не спец по ЮИ/ЮХ и не скажу тебе как лучше, по возможно все из того что ты описал, да.
Я на сайтах везде вижу кнопки и по этой причине их тебе и описал. Да и работать с ними проще, если честно, работа со списком мне не сильно зашла, но это я.
Для своего хеллоуворлда нужно было реализовать вот такой класс, но чувствую, что в конструкторе у меня какие-то дикие костыли. Есть варианты получше? Наверняка же это какой-то популярный паттерн, но я не знаю, как он называется.
Разве это singleton? У singleton'а может быть всего один инстанс на весь файл, а здесь ограничено количество инстансов с одинаковым значением атрибута. Или я не прав?
Крутится у меня в консольном окне скрипт, который слушает вконтактик по АПИ. Когда окно долго не находится в фокусе или параллельно запускается какой-нибудь другой процесс, то скрипт как-будто останавливается - логи не пишутся и респонсы на ивенты не отправляются, пока консолька вручную не пробудится каким-либо действием.
Как можно заставить окно со скриптом работать без перебоев?
Возможно стоит запускать скрипт не ручками и поддерживать его работу открытым окном, а чем-то типа 'superviord',
Это как-то весьма неудобно получается, мягко говоря. Что делать если у меня __init__ с параметрами, которые я явно передаю и я хочу засунуть этот класс в множественное наследование? Там же (возможно) будет другой "родитель", и super вызовет конструктор какого-то левого класса с моими параметрами. А целевой класс наоборот останется без этих параметров.
Хреновая какая-то концепция множественного наследования. Хуже неё только концепция исключений.
>Разве это singleton? У singleton'а может быть всего один инстанс на весь файл, а здесь ограничено количество инстансов с одинаковым значением атрибута. Или я не прав?
У тебя именно самый настоящий синглтон. Паттерн это идея проектирования. Идея синглтона в том, чтобы создавать только один объект определённого типа, по мере необходимости, и чтобы для пользователя работа выглядела так, как с обычным объектом.
А если более общно, то синглтоны это просто "глобальные переменные". Со всеми их плюсами и минусами.
>Хреновая какая-то концепция множественного наследования. Хуже неё только концепция исключений.
Исключения в питоне очень хорошие, стройные и понятные, лучше, чем во многих других языках. Не понимаю, с чем там проблема.
Наследование в питоне полное г-но, всё сделано криво и убого. Особенно множественное. То есть ни множественного наследования нормального нет, ни интерфейсов вместо него, всё через жопу.
Я не понял точно, что хочешь ты, но может тебе надо просто явно вызывать конструктор нужного класса вместо super. Для множественного наследования это самый адекватный вариант.
А вообще у тебя самого кривая архитектура. Множественное наследование не для этого. В наследовании ты переопределяешь класс на основе родителя.
Если у тебя поведение родительских классов не согласовано друг с другом, у тебя могут быть проблемы. Ну банально в одном конструкторе ты делаешь переменную self.storage = {}, в другом self.storage = [] (для хранилища используются разные типы, но с одним именем. У тебя всё рухнет после этого. Аналогично с методами, может быть конфликт из-за этого.
Поэтому во многих языках множественного наследования нет, вместо используются интерфейсы, mixin и прочее. Но вот в питоне по этой части всё очень невнятно и неудобно.
Это копия, сохраненная 12 июня 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.