Вы видите копию треда, сохраненную 7 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2412543 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://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/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
Блять, всё зеленое, а Cloudflare все-равно не пропускает. Сука, пидорасы...
Я дид и всегда хуярю процедурщину, если кто-то до меня не насрал ооп. Глобальные переменные, пробрасывание в десять функций, хули ты мне сделаешь?
Двачую эстета
Что означает эта запись, а точнее многоточие в объявлении функции? Почему если присутствует многоточия, я не могу прописывать операторы функции?
def func(x): ...
В качестве наглядного примера:
Словарь: {'m': 3, 'a': 3, 'y': 1, 'r': 1}
Что хочу получить на выходе: {'a': 3, 'm': 3, 'r': 1, 'y': 1}
https://www.google.com/search?q=python+sort+dict+by+values+descending&sxsrf=ALiCzsYwF749406GuDtOsK9uuiT1UyMRsw%3A1660065744303&ei=0JfyYrqPEoWurgTbqJToAQ&oq=python+sort+dict+by+values+&gs_lcp=Cgdnd3Mtd2l6EAEYADIFCAAQywEyBggAEB4QFjIGCAAQHhAWMgYIABAeEBYyBggAEB4QFjIICAAQHhAWEAoyBggAEB4QFjIGCAAQHhAWMgYIABAeEBYyBggAEB4QFjoHCAAQRxCwAzoHCAAQsAMQQ0oFCDwSATFKBAhBGABKBAhGGABQ3wVY3wVgmg1oAXABeACAAYABiAGAAZIBAzAuMZgBAKABAcgBCsABAQ&sclient=gws-wiz
Покурил документацию, погуглил, написал говнокод, который работает. Всем спасибо, извините за беспокойство
Бля, пол дня ебался, а оказывается в нем и так есть русский, поставил ленгвейдж код в настройках и он стал слать на русском.
Да бля ну первый же ответ на оверфлоу по запросу how to sort python dict
Всю программу скидывать не буду, вот кусок, где идет сортировка(сортируемый словарь в переменной "unique", результат пишется в .txt файл в папке с программой):
lst = []
for _, value in enumerate(unique.items()):
lst.append(value)
lst.sort(key=lambda x:(-x[1], x[0]))
output_file = open('analysis.txt', 'w')
for i in lst:
print(*i, file=output_file)
Помидорами не забрасывайте, я в программировании полный ноль
ыыы, а про функцию sorted я совсем забыл. помнил что у списков метод .sort есть и нагородил хуйни. Спасибо
только если исходный словарь отредактировать, там в 1м ключ 3 - значение пизда, а во 2м ключ пизда - значение два. и в 1м 2: "vzxcv", во 2м "vzxcv": "tri". Вот если это местами поменять изначально, то получится. Хз правильно или нет, но можно типа так сделать:
dc1 = {1: "hui", 3: "pizda", 2: "vzxcv", 62634: "fsfs", 4231: "fasfscv"}
dc2 = {"vzxcv": "dva", "hui": "odin", "pizda": "tri"}
result = {
(key, dc2.get(value, value)) for key, value in dc1.items()
}
print(dict(sorted(result)))
Вопрос: могу ли я устроиться питон разработчиком? А удалённо? Как вообще это происходит? Где искать работу? Как проходят собесы? Как определить мой уровень программирования, достаточный для работы?
Проблема в том, что 1) я боюсь работать и никогда не работал 2) живу в мухосрани и тут программисты только на завод на С++ нужны с опытом
С меня сотни нефти и картинки с Курису
>Могу немного писать на питоне, хорошо знаю за линекс, гит, протоколы и прочее говно. Из опыта писал сайт для одногрушников для решения говнотестов через уязвимость на одном говносайте и еще по мелочи скрипты для себя. Писал интерпретатор брейнфака, еще автопостинг для двача
Ты шутишь? Это уже уровень крепкого джуна.
Посмотри, что там у тебя в мухосрани требуется, это и подучи.
> 1) я боюсь работать и никогда не работал
Так и говори на собесе, врать не надо.
>живу в мухосрани и тут программисты только на завод на С++ нужны с опытом
удаленка, либо переезд из мухосрани в город.
Я ходил устраиваться на работу сисадмином в одну геймдев конторку по советам психологини из птк. Пик - то, что написала психологиня. Если честно, не очень уверен в навыках своих.
>удаленка
А как это происходит? Мне надо резюме выложить на hh?
>либо переезд из мухосрани в город
Ну, город это областной центр. Это между дс1 и дс2, но и там, и там дорого жить
>Ты шутишь? Это уже уровень крепкого джуна.
Мне кажется, ты шутишь. Аноны говорят, что джунов никто не ждет, всем нужны мидлы
>Я ходил устраиваться на работу сисадмином в одну геймдев конторку по советам психологини из птк. Пик - то, что написала психологиня. Если честно, не очень уверен в навыках своих.
А нафига сисадмином-то, если ты разработчиком хочешь стать? Или ты еще и в сетях и линуксах шаришь? Тогда дополнительный + тебе. Тоже говори об этом на собебе, ИТ бэкграунд тоже решает, даже если ты из сисадминов в разрабы идешь.
>А как это происходит? Мне надо резюме выложить на hh?
Ну да. На работу ру, на хабр карьеру. Везде резюме выкладывай и стучись в вакансии, где требуют год опыта. Говори, что опыта нет, но умеешь то, то и это, для себя писал такую штуку (можешь на гитхаб выложить, показать). Говори, что ты обучаем, умеешь работать с инфой. Не вымаливай собеседование, просто продавай себя как перспективного чела, из которого компания может слепить джуна.
Алсо, некоторые компании просто мониторят резюме, а вакансии не выкладывают, т.к. дорого. Вроде читал об этом на Хабре, могу ошибаться. Т.е. вакансий по факту больше, чем на хх.ру.
>Ну, город это областной центр. Это между дс1 и дс2, но и там, и там дорого жить
Тогда только удаленка. Или можешь съездить в ДС на собес, вдруг они тебе удаленку разрешат. Вряд ли, конечно, но попытаться подать резюме в ДС и ДС2 стоит.
>Аноны говорят, что джунов никто не ждет, всем нужны мидлы
Меньше слушай, что тут пишут. После февраля они нужны меньше, но все равно потребность есть. Из кого-то же надо миддлов делать, кто-то же должен делать мелкие таски.
Советую тебе качественно оформить резюме, чтобы херки тебя заметили. Погугли, как это делается.
И почему именно питон? Куда хочешь? В веб, датасаенс, нейронки?
>А нафига сисадмином-то, если ты разработчиком хочешь стать?
Ну я по образованию техник. А так, да, вообще сетевик. Занял даже первое место на говноконкурсе по сисадминству. После часто там был экспертом на этих конкурсах. Немного за сети шарю, сервера там, пачкорды обжимаю. Блочный ремонт техники еще по мелочи. Паял. Ну это хуйня
>И почему именно питон? Куда хочешь? В веб, датасаенс, нейронки?
Ну, я питон давно начал учить для себя чисто, потому что название понравилось. Я много языков пробовал, понимаю сишный синтаксис, но питон знаю лучше и был опыт. Я вообще люто по линуксам угарал, поэтому как-то втянулся в сети. Но мне хотелось еще пентестить вебприложухи, а для этого надо писать скрипты. Это было интересно. Например, засрать один дочерний сайт вуза гифками с гомонигграми, вот это охуенно. А для этого надо автореггер написать и чтобы оно как-то куки держало, а еще и впн протянуть, чтобы не спалили. Короче весело. Нейронки и датасайснюс это мб и интересно, но, наверное, не для меня. А веб это куча говнокода и ебли. Но я бы, наверное, хотел бы писать бэк, обрабатывать запросы и такую хуйню. Это я немного понимаю
>>29402
>для себя писал такую штуку (можешь на гитхаб выложить, показать
Я говорил на собесе, что писал, но одно название брейнфак их походу смутило. Да и вообще говорить,что я что-то там через уязвимость делал такое себе. Хотя хз, тебе виднее
>сисадминов в разрабы идешь.
Я ниоткуда не иду. Я хуй с горы. У меня нет опыта
Спасибо. Так это что-то типа комментария? Ну то есть если комментарий программа не видит и пропускает, то тут видит и тоже пропускает?
И еще вопрос. Мы можем перебирать многомерные/вложенные списки циклами? Или для этого только рекурсия подходит?
Я обязательно вкачусь в ОЙТИ!
Я еще молод!
Я СДЕЛАЮ ЭТО! ТАК И БУДЕТ!
Звучит сочно, анончик. Шансы есть, походи по собесам, ничего не теряешь ведь. Англицкий выучи если не занешь.
Отправляй резюме, доставай херок по телефонам/почте.
Навыков у тебя хватает, ты не нулевой вкатыш с курсов уже.
Рано или поздно работу найдешь.
Если есть время - сделай пет. Апи какое-нибудь или приложуху.
Ну, тщемта, асинкио это инородное образование в питоне, выходит за рамки базовых либов.
Я не читал и не щнаю кто такой луц, но наверняка он описывает только базу языка, без фреймворков и уж тем более вряд-ли описывает различные подходы у разработке
Это просто константа https://docs.python.org/3/library/constants.html#Ellipsis
Можешь в своем примере написать def f(x): None или def f(x): 42 с тем же эффектом (т.е. никаким). В таком контексте это часто используется с той целью, чтобы указать, что код предстоит дописать. Ну а так можно использовать как синтаксическую примочку для своих классов, реализующих доступ по ключу (https://ideone.com/QZdkVM) или по хитрым слайсам (как в numpy).
Начиная с версии 3.5 уже полноценно интегрированное, есть операторы async/await, есть куча других асинхронных операторов, которые просто так не прикрутишь.
Луц просто говно мамонта, очень объёмное и устаревшее.
Сам питон изменился, когда его придумывали, была идея сделать максимально простой язык для непрограммистов, однако по мере развития от становился всё более сложным и инженерным.
Плюс для изучающих только в том, что никто не заставляет писать сложно, можно писать просто и это будет работать.
это не принципиально
doom emacs
Можно сделать файл условно main.py в корневой папке, запуская который будут запускаться все скрипты с этих папок?
VScode
Саблайм с анакондой.
pyCharm
я бы баш скриптом сделал:
#!/bin/bash
python folder1/script1
python folder1/script2
python folder1/script3
python folder2/script1
python folder2/script2
....
Можно сделать и чисто на питоне. Просто найти все файлы, через glob.glob, и запускать субпроцессы. Можно при этом менять рабочий каталог на каталог файла со скриптом.
Йеа, то что надо.
Джанго-дебилы, почему вы такие конченные?
вы чо охуели там вкрай что лей???
быдло щемит учоных
немыслима!
но почему перестали вылетать оба
Может можно как-то с помощью панды задать несколько примеров вин-кода и чтоб оно само там отсеяло лишнее? Это был бы идеальный вариант
>>30245
>>30246
Спасибо. Бат-файлом не хочется делать, я недавно тут и вообще не понимаю мульки в 2022 возиться в командной строке (хотя выглядит это прикольно иногда).
Нашёл модуль subprocess, попробую через него.
Кстати, как научиться читать без попаболи оригинальные доки? Я про
subprocess.run(args, , stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, *other_popen_kwargs) п, мне прям фул хуёво и непонятно от такого. Меня одного это демотивирует читать? Документация на BeautifulSoup нормально читается/воспринимается, а такой формат...
>вообще не понимаю мульки в 2022 возиться в командной строке
Чел... много чего можно про это сказать конечно, но советую заскринить тебе этот твит пост и пересмотреть через полгодика. Ты небось и поделки свои через F5 в идешке запускаешь?
>через F5 в идешке запускаешь?
Я макрос на клавиатуре сделаль😳
Будет интересно, как мнение поменяется. Точнее что его поменяет.
>Я про
>subprocess.run(args, , stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, *other_popen_kwargs) п, мне прям фул хуёво и непонятно от такого.
Это одна из крутых фишек питона, которая есть не во всех языках. В ЖС нет, например. Называется "именованные аргументы со значениями по-умолчанию".
В данном случае тебе только первый аргумент указывать обязательно, все остальные параметры это возможность дополнительной настройки тогда, когда потребуется. Читается легко и непринуждённо в основных доках.
Хотя вокруг субпроцессов есть какая-то магия по части блокирующего ввода-вывода и т.п. Но это актуально, когда тебе необходимо интерактивно взаимодействовать с субпроцессом, читать в реальном времени его вывод и т.п. Когда не надо, тогда всё тривиально.
То есть там, где параметру присваивается значение через "=" - это всегда необязательные параметры?
Да. Причём в любом порядке можно переменные указывать.
вопрос не совсем по питону, но
есть питон 3.10, есть пайчарм.
клонирую проект с гитлаба, настраиваю интерпритатор для проекта - всё работает, но.
работают только базовые пакеты. если я ставлю условный termcolor pysimplegui или типа того - в проект я из просто не могу импортировать, пайчарм их не видит. если я напрямую обращаюсь через консоль к питону, он говорит что пакеты установлены. я уже не знаю на что грешить, подмывает форматнуть ноут и накатить линукс, ибо под линуксом у меня такой хуйни нет.
>питон стоит только один
Смелое заявление, учитывая, что юзаешь пч, который любит создавать венв на каждый проект.
старый венв я удалял вместе со старыми проектами. сейчас есть венв текущего проекта и всё.
Ну так какие тогда вопросы, если ты пакеты глобально ставишь, а пч венв юзает? Ставь в венв или ищи там в настройках галку наследования глобалов.
Например, есть while, который переворачивает произвольное число, и проверяет, что на выходе оно получается упорядоченное по неубыванию.
Моя реализация - два if которые проверяют, что прошлое число больше нынешнего. Второй if используется для остановки цикла, если нынешнее число больше прошлого, приравнивая число к условию остановки, то есть нулю.
Как улучшить эту хуйню, чтоб флаг заменил второй if и условие остановки, например.
если я правильно понял
после первого иф
елсе
бреак
если хочешь с флагом то в объявление цикла флаг == труе, в елсе флаг = фолс
Чтоб не ебать мозги моим кривым описанием - скрины говнокода в визуализаторе.
Уже подумал, и заменил второй иф эльсом, сократив исполнение на 10 шагов, относительно двух иф
Рано или поздно придётся укатиться на вскод, если не хочешь вечно сидеть джуном, ну либо накатывай кучу других иде для других языков
Чтобы не возиться с флагами в таких ситуациях, есть конструкция while/else.
https://ideone.com/usFePW
Господь, жги не жалей, их с таким кодом уже не спасти.
num = input()
print('YES' if all(int(y) >= int(x) for x, y in zip(num[1:], num[:-1])) else 'NO')
Индус, ты? Не нравится в одну - раздели на 2-4 строки. Но не 14 же, в самом-то деле.
ну и что ты сделаешь? заплачешь?
>>32294
Да был бы ещё однострочник нормальный.
>int(y) >= int(x)
Не нужно конвертировать. Цифры в ascii уже упорядочены как надо (y >= x).
>zip(num[1:], num[:-1]))
Создаётся два (ненужных) новых списка. Вместо num[:-1] можно оставить num (зип сам остановится, где надо), а вообще уже давно есть https://docs.python.org/3/library/itertools.html#itertools.pairwise
Потому что сама конструкция int(input()) это ебантизм невероятный.
Соответственно вы решаете случай которого вообще не должно быть.
Ну и нахувертил. Твоя хуйня ищет в любом месте, а не в начале.
Это однострочник вообще. Есть str.startswith, там можно много вариантов проверить сразу. Ну или re.match('^[rR]').
Алсо, надо returnить эту строку, а не принтить.
>Создаётся два (ненужных) новых списка
Каких списка, наркоман, слайс от строки теперь списки производит?
>itertools
Хрр-тьфу тебе в ебало.
Итерационные приблуды можно использовать только если они код сокращают хотя бы втрое, понятно? Для однострочника даже не вздумай, используй старый добрый zip.
Изучаю питон год и вот понял, что программирование это не мое. Слишком я тупой для этого. Прощайте, больше не буду вам досаждать глупыми вопросами.
мужик хуярит код в блокноте
впрочем, если пойти дальше, мужик не пишет на черве пидоре, настоящий мужик пишет на С кернигана-ритчи, ассемблере и фортране66
что ты такое несёшь, больной ублюдок?! они же дети
на пикче однозначно ява
Наткнулся на видос, где проводится mock-собес с выпускницей скилл фактори или типа того https://youtu.be/nq3ki32aHWY?t=1127
Там чел ее просит написать функцию по развороту стринги, а слайсы она забыла и решила нагородить через for цикл. Самому стало интересно, как это можно было бы реализовать.
Нахрена вообще это делать в цикле?
Строку переворачивать больше одного раза не имеет смысла,
получается обратно та же строка
После скриптовых языков в это сложно поверить, но неявные приведения типов существуют далеко не везде. На фото - жаба, нелюбитель таких оладий приведений, там ифы строго с булеанами работают.
Не пойдет. Мне для ТДД нужно крутить сразу в терминале, при изменениях, а не коммитах. Идеально чтобы лишних действий не делать. Пример: jest в js
Есть потребность написать бота, который бы принимал вебхуки с моего сервера и отправлял уведомления в discord.
Хотел я значит заюзать flask для вебхуков и discord.py для самого бота. Но мне не удаётся скрестить это говно. Там или бот работает, или вебхуки
Можете кто-нибудь ткнуть в статью/пример, как их скрестить или что использовать вместо них
Вложенные циклы нужны вообще? Чет на курсе заставляют рисовать треугольники-квадратики. И хуйню вроде пика.
В прошлых уроках хоть применение на примерах с матешой были, а тут чет совсем поебень. И что-то мне подсказывает, что все вот это делается быстрей и эффективней одной встроенной командой.
Вот мой код:
url = 'адрес api'
response_url = requests.get(url)
items = response_url.json()
item = items[10]['last_price']
Где цифра 10 - это ID монеты в json. Но оно может внезапно стать другим для нужной монеты. Сегодня это 10, а завтра 15 и т.д. Как тогда дёргать значение нужной монеты, чтобы постоянно не править значения нужных id?
Вроде есть. Но тогда получается, мне придётся несколько запросов делать, на каждую монету. Не слишком ли это расточительно? Сейчас всего 1 запросом получаю сразу все монеты с данными, оттуда беру нужные.
Нет. У каждой монеты своё ID. Но оно меняется иногда. Сегодня я дёргаю допустим по id = 1, а завтра нужно уже код править, т.к. id стал внезапно например 3.
Тогда почему ты за один запрос по айди можешь дергать несколько монет, а по названию не можешь?
Там просто получаю сразу все монеты в json. И оттуда по id смотрю нужные мне монеты.
А как примерно это в коде будет?
Вот например кусок json:
"
1:
trading_pairs"USDT_USD"
base_currency"USDT"
quote_currency"USD"
last_price"1.0628589"
..."
"
есть переменные b и c
В зависимости от разных условий b = None, с = какое-то значение, и наоборот
Как проще всего (по размеру написанного в основном) присваивать переменной a не-None значения этих переменных? Через if понятно что можно, но вдруг как-то еще?
как я делал:
качал "react.js" и "react-dom.js" кидал их в static ну и просто подключал как и другие js. но все работало пока я в основном js файле не юзал import. как только мне потребовалось импортировать хуки django начинает ругаться что react.js нет.
я пробывал указать что это модуль, но оно его всеравно не видит.
хелп как это пофиксить?
Ты путаешь идентификатор и индекс в списке. Биржа тебе отдает неупорядоченные данные, и ты с чего-то решил, что этот порядок постоянный, что очевидно не так. Вытаскивай данные из этого списка в словарь, где ключом клади что-то действительно уникальное, в твоем случае trading_pairs, значение - весь объект с инфой. Дальше работаешь только с этим словарем, достаешь нужную инфу по нужному тебе уникальному ключу trading_pairs.
логично, спасибо
>если не хочешь вечно сидеть джуном
Вы поглядите, джун будет учить какую IDE накатывать
Мимо-сенька из Сбера. Поссал на тебя
Они умные хотя бы потому что используют удобные инструменты, которые позволяют сделать в 20 раз больше за тоже самое время.
В любом более-менее большом проекте обмазка типами и проверки mypy обязательны
Пишу на питоне как на джаве, используя строгий mypy, из плюсов можно часть модулей откомпилировать в .so файлы
Двачую mypy + минимум динамики + грамотный DI когда зависимости не объявляются внутри кода приложения. Код гораздо чище и нет глупых ошибок когда мы обращаемся к None или непонятно что приходит строка или число.
Можно ли использовать т.н. list comprehension для создания переменной как-то иначе, кроме как на пикриле? Выглядит как говнокод, но я не нашёл других способов
О, спасибо!
Проблема решена. Надо было в настройках Ран Конфигурейшона выбрать стандартный интерпретатор Питона из ц/питон, вместо какого-то левого интерпретатора, который ПайЧарм сам создаёт
Всё правильно. Виртуальные среды нахуй не нужны. Лчше просто засрать глобальный интерпретатор
Тоже так думаю.
Накодили виртуальных окружений каких-то.
Нужно как диды. Один компьютер - один проект.
Если нужно другую версию взять, то просто переустанавливаем ОС.
Так победим.
>>35486
Здесь есть какая-то подъёбка, но я не вкуриваю в чём она
На том этапе на котором я щас пишу код смысл в этих виртуальных средах мне максимально непонятен. Если мне от них будет какая-то польза — начну использовать. В данный момент благодаря виртуальной среде получилось только испытать баттхёрт. Как глобальный интерпретатор может засраться я тоже не ебу
Но про дидов смешно
Гугли pipenv, там изи.
Суть в чем:
У тебя есть несколько проектов, один на джанге и питоне 3.8, другой нейронка какая-нибудь.
Чтобы не сваливать все пакеты и зависимости в кучу (в глобальное окружение твоего компа), можно для каждого создавать отдельное виртуальное окружение (папочку).
Т.е. у тебя для проекта 1 будет свой набор пакетов и своя версия питона, для проекта 2 другой набор пакетов. И они не будут друг другу мешать.
Это как докер, но для питоньего интерпретатора.
Засраться может легко - несовместимые версии зависимостей и прочая хуита.
> есть какая-то проблема
Пока нет.
Это просто удобнее.
Виртуальными окружениями несложно пользоваться. Написал в requirements.txt нужные пакеты и ты сможешь на любом компе собрать такое же окружение, что у тебя дома.
Есть еше докер, он вообще позволяет ОС "экспортировать".
Объясните популярно нахуя нужны переменные? Зачем нужен всратый геморр с их объявлением, прописыванием и проверкой? Сколько я ни пытался найти ответ, в ответку было лишь "переменные очень важны потому записываем их в память и проверяем каждый раз при запросе пользователя", а на кой хуй оно мне сдалось ни сука слова нигде никогда не пишут. Я могу и без памяти с переменными это сделать, так нахуй оно мне тогда нужно?
Объясните популярно нахуя нужны замки в дверях? Зачем нужен всратый геморр с их изготовлением, установкой и ключами? Сколько я ни пытался найти ответ, в ответку было лишь "запирать дом на замок очень важно потому запираем их и отпираем каждый раз при входе и выходе", а на кой хуй оно мне сдалось ни сука слова нигде никогда не пишут. Я могу и без ключей с замками это сделать, так нахуй оно мне тогда нужно?
простите, не мог пройти мимо пастопотенциала этой тупости
Можно срать, не снимая сессию.
Да что тут спрашивать, тут одни тролли с опухшим эго отвечают. Лучше спроси у любой домохозяйки или бухгалтерши, сидящих в векашечке, что происходит после очистки кукисов, они объяснят доступно.
Пустая строка прийти может?
Где в github посмотреть шаблоны таких проектов?
Нет, идея сделать изолированный пакет и заставлять пользователей устанавливать из pip мне как-то не нравится, хотя как запасной вариант сойдет.
wheels
Виртуальными окружениями проще пользоваться, чем тебе сейчас кажется.
В вводных доках обычно предлагают делать активацию среды, какие-то мутные лишние действия, это когда ты через консоль работаешь, но проще просто пользоваться полным путём до интерпретатора, вроде
~/virtualenvs/python3.10/bin/python moya_proga.py
Придумали окружения в первую очередь для легкой портируемости. Чтобы удобно контролировать зависимости разных проектов, удобно было воспроизводить окружение на других компьютерах и т.п. Это довольно ценный плюс.
Плюс это позволяет работать с разными версиями питона одновременно.
Бля при этом если сделать generator comprehension, то некстом все нормально перебирается.
Мне надо извлечь каждый 30й кадр из видео. Я посчитал по длительности на калькуляторе выходит +- 30000 кадров. Однако, сам скрипт выходит за эти рамки, я где-то на 45000 остановил. ЧЯДНТ?
Реализацию подглядел на стэковерфлоу
Ты каждый раз заново инициализируешь итератор, потому что вызываешь card()
попробуй сделать
x = cards()
и дальше
print(next(x))
print(next(x))
print(next(x))
Я долбаеб, все правильно работает, я считать не умею.
Гугли ffmpeg, когда в сбере на Visper работал, там все им было обмазано, как с видео так и с аудио работает. Вызывается простым os.subprocess
сформулируй задачу для начала
Есть разные способы для взаимодействия между процессами. Зависит от того, как ты запускаешь процесс, какая операционная система.
Unix сокеты только под юникс-системами. Это для случаев, когда тебе надо коммуницировать с сервисным процессом каким-то, который запущен постоянно, или он запускается из другого процесса. Точно так же ты можешь через TCP соединение коммуницировать, это работает и под виндой.
Ещё есть разные mmap, shared memory, ещё есть pipe и mp.Queue, но это когда ты запускаешь процесс из своего процесса (кроме mmap).
Короче большая тема.
ffmpeg по-моему покадрово не очень работает, плюс он будет сохранять в файлы картинки, а не в виде общекта в память. Потому что внешнее приложение.
А зачем оно в сбере нужно было?
Это называется IPC, так и гугли. Способов дохуища.
Пожалуйста без тролинга я новичок и я тупой
Ты тупой, слепой или неграмотный?
https://hyperskill.org
Python for beginners + python core
Дальше придумывай себе петы, решай реальные задачи типа парсингов скрапингов хуяпингов итд
Я со знакомым челом вкатываюсь по этой хуйне, а он по степику
У меня прогресса в ххх раз больше
А всякие курсы с видосами это вообще кал имхо нереальный. Видос может помочь только специфик топик разжевать если понадобится.
Nfa dyor
Держи, книга для начинающего питон разработчика
Работодатель сказал писать на питоне банковскую систему, понятное дело надо было брать нормальный язык.
бля, реал, проебался, вот именно из-за такой хуйни я уже год как кончивший питон-разработчик
Что-то давно джангу не трогал, забыл уже.
Ты миграцию делал после изменений?
И, главное, почему ты добавляешь пустую строку, а не None? У тебя ссылка на другой объект, а не поле-строка. Тебе надо добавлять None.
При обращении к классу выдает: TypeError: object of type 'FramesDataset' has no len()
Но в классе есть метод __len__. Что ему надо то?
нет не закрыт нахуй, хуле ты анонов тревожишь?
Не видишь, где линия нарисована, пиздоглазая ты скатина?
Сколько платят?
Евгений Ваганович, там досыпали костылей уже давно для даунов, именно в таком виде не запустится.
Механизм работы ООП, анончик.
Допустим:
class test:
----def __init__(self, x, y):
--------self.x = x
--------self.y = y
----def get_sum():
--------return x +y
object = test(10, 20)
print(object.get_sum())
self = это ссылка на созданный объект.
Если мы пишем просто x = x и y = y, то эти переменные существуют только внутри функции __init__ и удаляются, когда эта функция заканчивает работу?
Чтобы привязать переменные железно к объкту, мы юзаем self, чтобы в памяти были переменные
<адрес объекта>.x и <адрес_объекта>.y
То есть, если мы где-то объявим в классе x = 5 y = 50, то это будут уже переменные, привязанные к классу, а не к объекту?
Вроде я все понял, но все равно нету ясности. Если несложно, анончики, можете объяснить еще раз, для хлебушков?
Ну например объект картинка.
Тогда х и y это к примеру координаты её расположения на экране. То есть не просто числа, а некие свойства объекта.
Да, селф это ссылка на конкретный объект. Когда ты вызываешь его методы, то он подставляется первым аргументом. Это называется биндинг.
Вот тебе поясняющий пример.
https://ideone.com/9mCJof
Вызываем функцию класса с передачей объекта первым параметром. Стандартным способом это работает так же, но неявно.
То есть везде нужно писать picture.x, чтобы вывести эти координаты?
Питон это интерпретирует как
obj.<addr_obj>.x?
Если мы в классе картинки объявим
x = 10
и self.x = 15, то
picture.x выведет именно 15? А чтобы вывести 10, нужно уже будет к аттрибуту класса обращаться?
Т.е. picture_class().x выведет 10?
test_obj = test(10, 15)
То есть вместо того, чтобы писать
print(test.get_sum(test_obj) придумали писать
print(test_obj.get_sum())
В этом вся суть? В лучшей читаемости?
В целом да. Класс это набор функций, объект это структура данных, привязанная к этому набору функций. (можешь думать, что словарь для простоты, зачастую так и есть).
Тебе что в консоли не проверить?
В общем есть задача затестить апишку.
Эндпойнт добавляет картинку к посту.
Картинка добавляется в формате base64.
В переменной контент уже хранится строка в этом формате и собственно передается в запрос.
Руками тестил - с этой строкой нихуя не работает.
Если просто пидорить туда че то, не base64 строку, то все норм, код 200. Если же добавляю base64, то вылетает ошибка, хотя в доках к апи, сказано, что формат должен быть base64.
Че я могу делать не так?
В соседнем треде как раз скрин с движка на питоне был.
Сокращения очень важны для читаемости кода, иначе всё заполонят дичайшие многоэтажные конструкции.
Часть полей класса иногда делают приватными и ты их значения никак почти, кроме изнутри объекта через селф не получишь, и эта фича инкапсуляция очень помогает не обсираться, особенно в больших проектах.
Иди на хуй, я этот код спиздил, сразу в глаза не бросилось, что табуляция проебана.
там уот так уот надо вывести.
>>33149
Вкалтун. Дошел наконец до строк и методов. Кмк она пыталась через фор перевернуть строку как обычный инт
фор _ ин рейнж(х)
хуй = x // 10
x % 10
принт(хуй)
или чета такое.
А надо было
хуй = Хуйня
(хуй[::-1].капиталайз())
Это чему их такому на курсе учат, что они не могут базу?
Ролик дальше условий не смотрел.
Ты эту строку точно куда надо добавляешь? Судя по сообщению об ошибке - нет.
Ну собес на то и собес чтобы на нём тупить. Не так-то просто думать когда тебя оценивают.
Надо перед этим не мыться месяц или нажраться чего-то и пердеть, чтобы противостоять давлению.
В питоне нет обычных форов, это ссаный итератор. Делай через вайл тогда, чтобы тру было.
Лол, это не в прямом смысле было, просто ты придумываешь какие-то условия, вот я и подъебнул для смеху.
А вообще, эта отрицательная индексация строк дохуя где есть.
Можно и через счетчик.
Можно создать вложенный цикл который будет трансформировать переменную первого цикла в отрицательную.
Только нахуя, лол.
А что будет, если в строке не йцукен, а хуйня на три экрана 8 кегелем?
480x480, 0:15
Нет. "Только нахуя, лол" было в контексте зачем.
Дано:
из Кошка сделать Акшок.
Считай что вместо кошки произвольная строка с произвольным количеством символов. Иначе можно ручками переписать и будет норм.
НО! Мы не помним, не только срезы, но и отрицательную индексацию.
Задача:
Вычислить индекс последнего символа произвольной строки, и начать принт с него, и чтоб первый, и только первый, символ новой строки был заглавным.
Просто перевернуть строку даже такой вкалтун как я может. И даже поучаствовать в соревновании на самую уёбищную конструкцию. Мои заявки - вложенный цикл и счетчик.
А тебе нормально рытся в любой функции что бы понять что именно она возвращает? Ладно когда небольшой пет делаешь в одиночку, но когда кодовая база становится такой, что к некоторым модулям могут по несколько месяцев не притрагиваться + кто-то другой может смотреть твой код это прям в микроадок превращается.
Если ты месяцами чем-то не пользуешься то сам бог велел посмотреть и освежить память.
Зачем делать бессмысленные задачи которые никогда не пригодятся? Лучше оттачивать реальные задачи по примерам профи, иначе окажешься в ситуации, когда кроме велосипедов на бесполезные такски ничего не можешь.
- Давайте на секунду представили что мы забыли как есть через рот и попробуем есть через зад. Как бы вы это сделали?
Скорость вспоминания увеличивается на порядок с типами. Особенно если есть получение данных извне.
Перегоняет в лист, делаешь реверс, собираешь строку обратно, делов то
Да ты вкатун, через кафку надо.
Динамическая типизация на порядке удобнее и составляет основу кодинга на питоне. Та же работа с числами и строкой.
Попал в просак когда решил сделать базовый класс (это aiohttp) от которого будут наследоваться все другие и просто передавать ему в параметры класса service_entrypoint - асинхронная функция без аргументов которая потом будет вызываться.
При вызове:
asyncio.create_task(self.service_entrypoint())
он мне выкидывает:
takes 0 positional arguments but 1 was given
То есть эта падла передает ему self, т.к. считает это не какой-то левой функцией а полноценным методом класса. Как фикситься? Из того что вижу пока - надо мутить с метаклассами
нет, в __init__ передавать функцию не могу, т.к. это класс-вьюха и она не предназначена для прямой инициализации
Она удобнее ровно до того момента как ты перестаешь помнить что ты написал какое-то время назад, после этого ты не можешь просто взять и заюзать какой-то модуль проверив нужные сигнатуры у возвращаемого объекта в IDE и разработка замедляется. Ты не представляешь какой ад вычитывать динамикодрисню другого разработчика, когда тебе нужно дернуть буквально один метод из его кода.
как типы мешают динамической типизации?
ну вообще то да, он умный
Если не нужно чтобы прокидывался self, то метод нужно пометить как @staticmethod
в твоем случае
@staticmethod
def service_entrypoint():...
Имеется конструкция с двумя декораторами, верхним и нижним параметрическим, который вызывается многократно с различными параметрами.
@top-decorator
@decorator(z)
@decorator(y)
@decorator(x)
...
@decorator(a)
def funcname()
Как самый верхний декоратор может получить доступ к списку всех значений переменных a, x, y, z и т.д., которые были переданы вот в эту стопку параметрических декораторов, лежащих под ним?
Или же - как перебрасывать вверх значения переменных между параметрическими декораторами, точнее, по сути между одним декоратором с многократным вызовом?
каждый извращается как хочет. питон этому не мешает.
Пишу бота, надо чтобы он каждую секунду выполнял функцию creation(). Она не принимает аргументы.
Если делаю
if __name__ == '__main__':
schedule.every(1).seconds.do(creation())
То файл создается, но скрипт сразу крашится с ошибкой the first argument must be callable
Нагуглил решения только с функциями принимающие какие-то аргументы. Как это исправить можно?
Читай traceback. Я че Ванга угадывать что у тебя там callable а что нет
Бот синхронный что ле?
Что ты там запомнить и узнать всё не можешь? Меньше говнокода писать не пробовал?
Ты понимаешь что любая сложная архитектура на питоне в разы проще создаётся, поэтому его используют везде. Иначе бы как деды ебались с указателями и ручной адресацией памяти.
Ребенок, переставай хлебать борщи и пиздуй искать работу. Вот как поработаешь на реально проекте - приходи назад, плакаться, насколько ты был не прав.
Проектор угомонись уже. Кроме тебя шизика про типы никто не ноет, ведь это одно из преимуществ питона.
Нужна статика пиздуй в другие яп.
Мы тебя тут в 2 смычка ебем, шизло.
Очнись, статическая типизация - маст хев на любом крупном проекте в беке. Случайно спизданешь обратное среди Уважаемых Людей - быстро отправишься в петушиный угол картриджи заправлять и никто тебя к коду больше не допустит.
Скобочки после creation убери
Повернитесь спиной.
именно поэтому в питон и ввели type hinting и постоянно его расширяют с каждой версией
чтобы показать, насколько не нужно типоуказание и что динамика рулит
логично же
Просто статико калеки не могут перестроится под новую парадигму. Помогают в адаптации.
именно так.
а если видите, что какая то либа отказавшись от поддержки пи2 вдруг начала вовсю тайпхинтить, так это разрабов комары покусали (комары переносят желание указывать типы)
с меня как обычно - нихуя
к чему этот высер? сдуру можно и х.. сломать, но зачем?
Доказывать полезность type hinting это как доказывать что в мороз шуба лучше голой жопы - то есть ОЧЕВИДНО
Наличие функционала лучше его отсутствия. Однако сам я ни разу тайпхинтом не пользовался, поэтому мне трудно понять почему тут истерят от динамики.
боятся что на их любимый язык покушаются и заставляют писать в каком то особом стиле, что противоречит каком то там духу
вот только это тупо подсказки для IDE, чтобы работал автокомплит
Язык никак не навязывает их писать (ибо это не статическая типизация, да вообще никакая не типизация - это подсказки). А значит внедрение онных в либе питона и в других любых либах - просто показатель полезности подсказок
Да тут статикошиз вернулся, давно его не было, а теперь в нескольких тредах опять про свою статику.
Интерфейсам и библиотекам нужны тайпхинты. Реально удобно. Это работает как документирование кода дополнительное.
Динамика как была, так и остаётся.
Ты можешь сделать
def foo(x: Union[int, str, Callable[[int], int]]
то есть одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно. Конечно шиза в таком виде, просто для примера
Но более практически примеры тоже бывают.
Всё-таки хорошо тогда, когда ты можешь прописывать ограничения там, где надо, и как тебе надо, а не когда ты вынужден делать всегда и везде и только в одном виде.
>Ты можешь сделать
более того, можно прописать overload и прописать разные возвращаемые значения в зависимости от параметра
такое перебор в рабочем коде. но в либе самое место
>такое перебор в рабочем коде.
Когда жсоны перекладываешь, то самая обычная история. Одно свойство жсона в одном случае может быть одного типа, в другом совсем другого, в зависимости от значения какого-то параметра. Или вообще просто так. И это нормально даже.
На таких задачах начинаются проблемы у статико-языков, а динамо языки отрабатывают хорошо. При этом параметризации всё поддаётся, пидантики всякие есть много чего ещё.
Я чет не осилил. Где там кнопка запустить епта? Задеплоил, а дальше что делать хз.
Нет такой кнопки. Это такой же кампуктер как и твой, соответственно запускать нужно так же как ты у себя зупкскаешь.
Это ты на какой платформе сейчас пытаештся деплоить?
Ну на хероке чуть другой подход на самом деле - там предполагается иметь в корне гит репы Procfile в котором записаны все комманды, которые нужно выполнить при запуске машины. Тогда ты в этом файде пишешь что-то типа "python main.py" и тогда не нужно подключаться
>тогда не нужно подключаться
Не понял. Я этот прокфайл создавал, но способ был максимально ебанутый, предполагающий установку heroku cli. Можно было просто в проект сунуть и работало бы?
>то есть одна переменная может быть нескольких совершенно разных типов, и это норм
Хватит писать говно
Имею базовые знания математики, логики, информатики на уровне первого года вуза CS направления да и было это давно и неправда, так что для вкатуна желательно.
Бля я вообще с сосаенсом никогда не соприкасался. На хх нашел стажку в компанию говна разрабатывать анал компутер вижн. Нашел 15минутную видяшку типа как сделать нейросеть которая отличает кошек от говна. Посмотрел, скопипастил, чуть изменил под себя, попутно гугля интересные для себя вещи в коде. Сходил на собес, где тимлид пахан рассказывал что они мастерят. Как я понял всех все устроило и меня уже берут а я к ним не пойду, она не оплачиваемая, а опыт в рогах и копытах ну такое Дело было неделю назад.
>одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно
Бля, охуительные истории, ща Object instanceofить буду. Саму идею интерфейсов, которая из статики пришла - тоже нахуй, переменная строго одного типа теперь может быть. Сращу видно эксперта, который увидел код laba2.cpp, где компилятор запрещает переписывать переменную другим типом, и сразу познал дзен.
Вранье гринтексте не видишь даже после того, как кто-то на него указал, зато априори "все верно" там. Хорошо тобой быть - все вокруг, с кем ты согласен, никогда не врут.
Для самых маленьких: я не участвую в том споре про правильную типизацию - это сугубо вкусовщина, ешьте любую каккя нравится, а лишь указываю на ущербность аргумента, фактически не соответствующего действительности.
ну ты ОЧЕНЬ непонятно написал где там не соответствует действительности. Абсолютно непонятно написал.
Перепиши текст в понятные аргументы и я разобью его в пух и прах
но поскольку ты не участвуешь. значит аргументов вменяемых нет (или тебе лень) ну значит мимо проходим.
>Саму идею интерфейсов, которая из статики пришла - тоже нахуй, переменная строго одного типа теперь может быть
ну а это вообще из разряда "сам придумал - сам обосрал"
Ты глупенький?
>А в статике невозможно
Object a;
a = 5;
a = "string";
a = new Nebo();
a = Allah.getInstance();
Вот тебе переменная, которая может быть совершенно разных типов в статике. Ровно так же как и в динамике, если надо дальше с ней работать, а тип не известен точно, ты будешь городить isinstance/instanceof, чтобы ублажить в первом случае иде, во втором - компилятор.
>ты не участвуешь. значит аргументов вменяемых нет
>я не участвую в споре, а лишь указываю на кривой аргумент
Алсо, подтяни навыки чтения, пригодится в жизни. А пока давай на аналогиях: два чела спорят про то, какой самовар купить - дровяной или электрический. Один из них заявляет, что надо непременно электрический, потому что в дровяном нельзя сварить пельменiв. На что любой мимоадекват скажет, что это чушь собачья, но тут приходишь ты и отвечаешь, что тебе тоже нравятся электрические, поэтому они неправы и вообще из дровосекты.
>Ты глупенький?
лол. ты указал базовый тип и такой "смотрите можно"
давай посмотрим на "что можно"
>если надо дальше с ней работать
попробуй сделать а+а
и если ты сделаешь isinstance, то это тебе не поможет. тебе сначала нужно сделать cast в другую переменную потому что финт ушами вида
object a = (int)5;
a = (int)a;
a+a;
попросту не работает
компилятор благодаря статической типизации (не путать со строгой) не дает тебе работать с этой переменной иначе как с объявленным первоначальным типом. И плевать что ты туда кладешь - компилятор волнует именно объявленный тип, который ты не можешь сменить и поэтому вынужден подключать другие переменные. В динамических языках ни других переменных, ни каста не нужно.
То есть внутри может лежать быть содержимое любого типа. но тип самой переменной не изменить. гринтекст прав.
все проще. ты очень невнятно выражаешь мысли. пока не попросят перефразировать
>>одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно
повторю гринтекст. тип переменной не сменить. содержимое да. но сам тип нет.
>>39091
>ты указал базовый тип и такой "смотрите можно"
Ну да, извините, там синтаксисом надо какой-то тип да указать. Или что, в динамике это как-то по другому работает? Тот же object уже не базовый тип для всего? Не надо делать проверки типа в этой ситуации?
>гринтекст прав.
А теперь читаем тот самый гринтекст
>Ты можешь сделать
>def foo(x: Union[int, str, Callable[[int], int]]
>то есть одна переменная может быть нескольких совершенно разных типов, и это норм. А в статике невозможно.
Аналог в статике сам сообразишь какой.
>То есть внутри может лежать быть содержимое любого типа. но тип самой переменной не изменить
Тут ты прав. Ок, значит гринтекст просто криво пример привел, который не отражает сути того, чего сказать хотел.
>Или что, в динамике это как-то по другому работает?
да. не нужно. может ты и не можешь сделать x+x (вернее ты можешь так то)
но ты изи можешь доложить эту переменную в список интов
>Аналог в статике сам сообразишь какой.
никакой. x: object не является аналогом ибо на вход придет именно обжект, а не число, строка или calable
и поскольку это совершенно левый тип от ожидаемых 3х, то я не могу его положить в список интов
мне не нужен обжект, а я вынужден!!! делать каст.
В питоне же instanceof нужен лишь иногда.
>положить в список интов
Если ты положишь в список интов юнион из аргумента, то у тебя уже не список интов будет, а список юнионов, правда? Тайпхинт это, конечно, не перепишет, но тем хуже - он теперь тебя будет дезинформировать. Чтобы гарантировать, что ты только инты кладешь, тебе как ни крути придется делать проверку типа.
>то у тебя уже не список интов будет, а список юнионов, правда?
>Чтобы гарантировать, что ты только инты кладешь
И вот еще одного понесло в дебри. Какие еще гарантии? какая проверка типа?.
Это язык с динамической типизацией. Можешь класть что угодно и не проверять типы.
Пишите код, как писали. Что вы фантазируете то блин
твой метод может проверять is None и передавать дальше. потому что ему плевать на тип и всем плевать
суть отдельным постом ниже
Прямо посягают на бедную несчастную динамику питона злые любители компилируемых языков
(питон кстати тоже компилируется, но то такое)
абстрактные классы были и в пи2. тайпхинтинг был на уровне докстринга (пусть даже не пепно это - я честно хз)
питон 3 со своими тайпхинтами всего сделал хинты стандартом и усилил их.
Ради улучшения ситуации с автокомплитом IDE, статической проверки и рабочими авторефакторингами
ну и ошибками вида "хз че там" (ковыряние в чужом коде ради "да бля что там в итоге а и что у него есть" - радость то какая)
И ни в какие "писать как в языках со статической типизацией" никто не залезал.
Разница в том, что тайпхинты это описание контракта, а не описание сигнатуры (ака интерфейс) которую потом нужно реализовать
И плевать на типы в рантайме.
Тут можно сказать "а как же пидантики всякие"?
А никак -пидантик это лисапед на тему "а почему бы и нет".
Было обновление питона, которое ломало фастапи с пидантикоми (а заодно мою петовую либу орм)
ответ разрабов питона был прост - типы не для рантайма, если вы полагаетесь на них в рантайме, то ссзб
А раз это всего лишь подсказки по контрактам то
1 можно указаь несколько типов для параметра. и сделать @overload для удобства выведения типа
2 Есть понятие Protocol, где описываешь контракт и класс подпадающий под контракт про него знать не знает
3 И даже не просто класс. Можно и модули описать. Вот у меня плагины тупо файлик подкинул и заработало - описаны через протокол. IDE довольна
4 TypedDict проходим мимо. очевидно что словари от него не наследуются. потому что это описание контракта
5 помимо Union для типов есть еще NewType, который использовать как описано в доке хз зачем, но как подсказка для НЕсуществующего типа вполне можно
Также можно даже сделать родителем класс чтобы он считал дочерним класс, который от него даже не наследуется. Сила питона. Так то хинтинт тут не причем - просто вспомнилось
В общем основная сила хинтов - подсказки для IDE, анализторов и так далее. Но поскольку это подсказки, то они никак не требуют что то там наследовать, рализовывать или даже прописывать эти подсказки
Прямо посягают на бедную несчастную динамику питона злые любители компилируемых языков
(питон кстати тоже компилируется, но то такое)
абстрактные классы были и в пи2. тайпхинтинг был на уровне докстринга (пусть даже не пепно это - я честно хз)
питон 3 со своими тайпхинтами всего сделал хинты стандартом и усилил их.
Ради улучшения ситуации с автокомплитом IDE, статической проверки и рабочими авторефакторингами
ну и ошибками вида "хз че там" (ковыряние в чужом коде ради "да бля что там в итоге а и что у него есть" - радость то какая)
И ни в какие "писать как в языках со статической типизацией" никто не залезал.
Разница в том, что тайпхинты это описание контракта, а не описание сигнатуры (ака интерфейс) которую потом нужно реализовать
И плевать на типы в рантайме.
Тут можно сказать "а как же пидантики всякие"?
А никак -пидантик это лисапед на тему "а почему бы и нет".
Было обновление питона, которое ломало фастапи с пидантикоми (а заодно мою петовую либу орм)
ответ разрабов питона был прост - типы не для рантайма, если вы полагаетесь на них в рантайме, то ссзб
А раз это всего лишь подсказки по контрактам то
1 можно указаь несколько типов для параметра. и сделать @overload для удобства выведения типа
2 Есть понятие Protocol, где описываешь контракт и класс подпадающий под контракт про него знать не знает
3 И даже не просто класс. Можно и модули описать. Вот у меня плагины тупо файлик подкинул и заработало - описаны через протокол. IDE довольна
4 TypedDict проходим мимо. очевидно что словари от него не наследуются. потому что это описание контракта
5 помимо Union для типов есть еще NewType, который использовать как описано в доке хз зачем, но как подсказка для НЕсуществующего типа вполне можно
Также можно даже сделать родителем класс чтобы он считал дочерним класс, который от него даже не наследуется. Сила питона. Так то хинтинт тут не причем - просто вспомнилось
В общем основная сила хинтов - подсказки для IDE, анализторов и так далее. Но поскольку это подсказки, то они никак не требуют что то там наследовать, рализовывать или даже прописывать эти подсказки
>Какие еще гарантии? какая проверка типа? Можешь класть что угодно и не проверять типы
Ну да, но это только если в твоей ситуации норм неоднородный список. Как-то на практике их встречается на порядок меньше, чем однородных. Оно и понятно, поймать через х часов работы рантайма на другом конце проекта в каком-нибудь цикле по этому списку TypeError int object has no method strip или как оно там крашится, как-то не очень интересно, и иди ищи кто туда чего клал. Отсюда и желание иметь инструментарий для отлова таких говен. Опциональный, надо заметить, кому-то и так норм.
>ответ разрабов питона был прост - типы не для рантайма, если вы полагаетесь на них в рантайме, то ссзб
Ага, а потом они сделали functools.singledispatch.
так об этом и речь. никто динамику не трогает. просто добавили опциональную возможность сильно облегчить себе жизнь хинтами. И именно хинтами, а не статической типизации, которой тут не лежало.
>>39120
ну им то можно. это ж встроенный модуль. идет с дистрибутивом, а значит у него нет задачи "нам нужно поддерживать и старые питоны".
Heroku CLI тебе действительно понадобится чтобы пушить локальные измения кода в репу с которой хероку запускается, чтобы запускать, останавливать сам сервер и ещё для чего-нибудь такого. Для администрирования в общих чертах короче.
Чтобы после каждого запуска/перезапуска сервера вручную не лазить в него и не запускать бот вручную, можно нужно в прокфайле прописать нужные комманды. Если всё что тебе нужно это стартовать бота то прокфайл будет выглядеть плюс/минус как пикрил (https://towardsdatascience.com/how-to-deploy-a-telegram-bot-using-heroku-for-free-9436f89575d2). Прокфайл должен лежать в корне гит репы. Ещё там же можно создать runtime.txt где можно конкретную версию питона указать. Переменные окружения не забываем настраивать.
Если кроме бота нужно ещё нужно запустпть базу данных/селери/кролика то это отдельная ёбля. Если нужно что-то на диск сохранять то хероке такое не нравится и нужно использовать облачные сервисы хостинга файлов типа AWS S3.
Есть графики и схемы в matplotlib, на них поверх рисуются дополнительные стрелочки вручную.
Как правильно перерисовать их при изменении масштаба, чтобы обновление картинки не лагало настолько безбожно? Фоновый график такой же, там просто с учётом xlim/ylim поверх рисуется ещё несколько стрелочек и надписей.
Через canvas.mpl_connect('draw_event'...) всё очень медленно работает, и перерисовывается не всегда...
Может быть есть какой-то режим работы matplotlib, который лучше подходит для не оффлайн отрисовки, чтобы и на нажатия мышкой можно было прикрутить реакцию?
Проиграл
и кидает мою говноигру в карантин. Это в pyinstaller вирус был чтоли? Устанавливал через консольку командой pip install pyinstaller
Например, взять aiohttp. Есть core.py, в котором описаны методы получения сессии, с параметрами урл, хедера, коннекторов и пр. Есть request который проверяет ответы, ошибки и делает пару повторных запросов при разрыве соединения, паузы при превышении лимита и прочих http факапах.
Рядом с ним есть уже модули к конкретным апи, в каждом лежит request.py и models.py. В первом лежат методы для различных запросов, во втором лежат пидантик модели для чтения ответов. Классов нигде нет.
Так нормально? Или лучше без пидантик моделей?
>Где можно посмотреть хорошую организацию кода
>Например, взять aiohttp.
Давно не заглядывал в код туда... Светлов няша и всё такое, но код в его творениях иногда такой, что даже мне за свой уже не так стыдно становится
Ну, у меня asyncio, сама либа устраивает. Да в питоне все async либы это костыли разной степени паршивости, но раз так то уж хотя бы в коде хотелось бы порядок иметь! Спросить не у кого, знакомых питонистов, а уж тем более коллег нет совсем. Сам себе ревьюер, тестер и всё остальное, 4 небольших проекта на проде висят по 2.5-3к строк, хочу красоту навести.
Я выяснил что там есть терминал, имхо проще через него делать как обычно. правда хз, может бот будет падать после выхода оттуда, не проверял
Только начинаю осваивать джангу, на 4.1 можно начинать лепить или лучше 3.2 установить?
Владимир Дронов это разве не хуйлован, который про всё подряд графоманит? Я бы такое не читал.
я пока 1 главу осилил, пока легко заходит без занудства
from time import perf_counter, sleep
from random import random
print("Press Enter to play")
input()
print("Ok, get ready!")
sleep(random() 5 + 1)
print("Go!")
start = perf_counter()
input()
end = perf_counter()
print(f"You reacted in {(end - start) 1000:.0f} milliseconds!\nGoodbye!")
В 2-2,5 раза больше, чем на сайтах проверки (например https://humanbenchmark.com/tests/reactiontime). Скрипт показывает неадекватные цифры, мне интересно почему он врёт и как это исправить?
>В 2-2,5 раза больше, чем на сайтах проверки
А сколько у тебя показывает?
У меня показывает 250-300мс, что лишь немного дольше, чем если другим способом заменять.
Есть небольшие нюансы с тем, что у тебя вывод текста на консоль может не моментально срабатывать.
Ты запускаешь из консоли? Или из IDE? Не надо из ide, это точно
>>41046
Хм, у меня скрипт показывает примерно 500, сайт 200.
Это я проверял в pyCharm.
Запустил скрипт в повершелле - там примерно 250 мс.
Запустил в wsl2 убунту - на 10% быстрее чем в PowerShell, но всё же не так как на сайте.
Мне интересно, а как можно реальные цифры организовать на питоне, а не вот это?
Ну это очень разные способы. Там терминал и клавиатура, там мышка и жабаскрипт в браузере. Может у тебя какая-то игроёбская мышка с разгоном опроса юсб, что тоже даст отличие.
Сделай в виде графики, как на сайте, это будет работать уже адекватно.
Проблемы две. Первая человеческая, скорость реакции на печать текста может быть хуже, чем реакция на смену фона-цвета-яркости.
Вторая техническая. Между тем, как ты вызываешь функцию print(), и тем как на экран что-то выводится, может пройти определённое время, не самое маленькое. Скорее всего это в pycharm и происходит.
Возможно из-за этого разница в ОС.
Я так понимаю, что это должно быть равносильно такому?:
print("Press Enter to play", flush=True)
Если да, то цифры не изменились.
>>41082
Даже с игроёбской мышью не могу представить такой разницы
>>41089
Хм, вот это вероятно и есть причина. 30-50 мс за счёт текстового аутпута, а не цветового.
Выглядит говном ситуация, нафига тогда точность в наносекундах у модуля time, если в зависимости от среды выполнения нельзя даже адекватно разницу посчитать между perf_counter()?
Пойду читать про буфер в print(). А ведь начиналось всё с Regex, после перекинулся на субпроцессы, ща из-за примера на это. Хочется всё узнать, хз как учить что-то конкретное, когда как в вики по ссылкам скачешь читаешь.
>Выглядит говном ситуация, нафига тогда точность в наносекундах у модуля time, если в зависимости от среды выполнения нельзя даже адекватно разницу посчитать между perf_counter()?
perf_counter() и monotonic() для других целей
Они корректно изменяют. Просто ввод-вывод в консоль не в реальном времени происходит, это же тоже не главная задача, реальное время обеспечивать?
Адекватность браузерных замеров тоже под вопросом. Потоу что и браузер не предназначен для вывода чего-то в реальном времени, там тоже есть время реакции на события, чистка мусора и т.п.
>Мне интересно, а как можно реальные цифры организовать на питоне, а не вот это?
Консолька на реалтайм не рассчитана, там буферизации, задержки, брр - полный рандом в зависимости от платформы. По хорошему raw input, но (на виндоус) это будет проще на си написать, чем на питоне найти либу с winapi и там все те же строчки написать но с замороченным синтаксисом. Стандартные события виндоус, которые скорее всего во всех pygame и аналогах используются добавляют задержку.
Возможно короткая виндоус-реализация будет, если есть либа для directinput под питон. И ещё картинку-текст лучше аппаратно тоже выводить...
Pygame это sdl, а она на С. Да и очевидно для игр даже 200мс ужас как много для таких простых функций. Там в 100 раз большие объёмы надо за 1 кадр высчитывать.
>>41310
Консоль это консоль, там свои буферы, там вероятно специально сделано так, что данные чуть накапливаются, а потом скопом выгружаются.
Графические оболочки работают адекватно. Я сам такую штуку просто по фану делал на wx. Можно скорее всего кучу вариантов найти на всех оболочках.
Погрешность измерения в большинстве случаев будет на уровне продолжительности одного кадра, 1/60 секунды условно.
Всё ещё нужно отключать двойную буферизацию - и вообще я имел ввиду, что не нужно через условный tkinter что-то перерисовывать, лучше что-то вроде pygame.
Делаю либу для того чтобы аудикокниги через silero генерить, вот пришёл к тому что очень требуется либка которая помогала бы форматировать текст. Убирать лишние пробелы, и вайтспейсы (табуляции, лишние переводы строки и т.д.)
Если доставать на сухую контент из epub он выглядит как срака полная. Есть что на примере?
Может через какой-нибудь текстовый движок пропускать и всё?
>попробуй ретерн вместо принт
я немного этим занимался, пиши @Obre4en1
Вот допустим в той же pandas/numpy вроде всё и так есть. Но это на мой нубасовский взгляд.
Сравнил теплое с мягким
Достаточно часто, пандасы это большущие комбайны, которые нужны для специфических случаев и нужно тащить их в зависимости если точно не уверен.
Очень часто использую itertools.count
Замена трёх строчек кода, но тут вопрос стиля больше
Другие какие-то штуки оттуда как-то разово использовал, но по факту редко.
Из collections ChainMap довольно практичная и полезная штука, остальным по-моему не пользовался на практике.
Сравнивать с numpy и подобными неправильно. Не помню такого функционала там, во-первых, во вторых хорошая практика в том, чтобы пользоваться функционалом из стандартных библиотек, чтобы не привязываться к зависимостям.
Конечно, это если твой код не полностью построен на какой-то библиотеке.
functools ещё есть, есть рекомендации использовать partial оттуда, но лично я это чаще игнорю и делаю люмбды или же стои локальные функции.
Очень часто датаклассы использую, второй по популярности - functools.wraps, иногда использую всякие вещи из functools и collections, itertools почти не пользуюсь.
itertools достаточно часто.
collections не использую совсем, сейчас посмотрел - вроде бы и нет особо полезных штук, а если и есть, будет несложно написать что-то своё поверх стандартных типов. А если код про скорость, то это не про питон, и либо через извращения с numpy делать, или с numba, либо, да я не знаю..
Почему numpy до сих пор не стандартная библиотека - не очень понятно, он же чаще того же itertools используется.
Сделать сайт, конструктор форм для компании, на 7 экранов где-то.
Анальник, пытающийся казаться Мужиковым Мужиком, это то еще зрелище
>не очень понятно, он же чаще того же itertools используется.
у кого чаще? пока не понадобилось всякие там научные штуки - и не использовал даже.
Это в демке дело, или у меня руки из жопы?
Не тот тред, сорре.
У меня. А что, питон для чего-то ещё используют? Ну, я математик, питон - вспомогательный язык, у меня три без половины программы без numpy, если не считать небольший файлов-скриптов, которые вместо батников.
это язык общей направленности. на нем пишут все что не лень
Кто-то может представить больших куколдизм чем разработка с flake и ему подобными "слишком умными" линтерами?
Found too many `elif` branches
High Jones complexity
Found negated condition
Found upper-case constant in a class
Какая-то скриптовая чмонька, указывает тебе как писать код? Пиздец, все равно что бабу ебать, когда над тобой мамка стоит и говорит что и как делать. Тут уж лучше и правда другого ебаря пригласить чтоб все за тебя сделал.
Зависит от того где, как и кем запускается скрипт. Наколеночный glue скрипт я могу и без внешних библиотек написать, ибо чинить по патчноутам ваши йоба-комбайны при обновлении питона сил никаких нет.
ну так то все эти претензии нормальные
код должен читаться легко.
А если ты пишешь чисто для себя, то и линтеры ни используешь же.
>too many `elif` branches
Ебать, давай-ка расскажи мне сколько в моем коде должно быть ветвей)) Что сам-то бдешь делат ькогда поймешь что кондишенов уже больше 3?
>High Jones complexity
Вообще пук в лужу
>negated condition
Безусловно, раз скриптик спизданул что "нидолжно" то так и делаем, похуй что в таком случае когнитивная нагрузка меньше
>upper-case constant in a class
Ору вместе с моими enum-ами
Там еще есть такой ништяк как "used 'in' not with set container" - скриптопетух не в курсе как set/dict работают
>Что сам-то бдешь делат ькогда поймешь что кондишенов уже больше 3?
возьму match или выделю метод где заменю на return
>High Jones complexit
это как я понимаю когда засилье скобочек в одной большой длинной строке?
>negated condition
а вот за это на кол. такие вещи трудно читаются, особенно если они среди многих or/and
>upper-case constant in a class
питон это язык где форматироанием занимается автоматика. если она форматирует по разному, то будет беда.
>скриптопетух не в курсе как set/dict работают
зачем тогда используешь линтер
>зачем тогда используешь линтер
Может потому что петухи в тиме прикрутили его гитлабовскому пайплайну?
ну видимо им не нравится читать любителей "выражаться затейливо"
Да забей, через некоторое время код будет сохраняться в промежуточном представлении, и каждый разработчик будет видеть код со своими отступами и настройками стиля, и возможно даже с другими именами переменных.
Не могу понять почему превышен лимит времени. До этого думал, что создал вечный вайл, пару раз его переработал, не помогает. Наверное дело в том, что использую поиск в ширину вместо в глубину. Но в графе все вершины, кроме одной обходятся единожды и оба поиска по сути идентичны. Или в глубину обработает все быстрее? Или проблема в чем-то другом?
пик 1 - задача
пик 2 - попытки
https://pastebin.com/M98ZqAPg - код
Адепты Чистого Кода это опущенные, с ними даже общаться не нужно. В их "Библии" указано даже число строк сколько максимум может быть тело функции. Как, думаете сколько это? Воздуха в грудь набрали? 8, ага
хах, да ты заебал)
Ну, ставить пробелы вокруг операторов - не такая плохая идея (я ставлю вокруг ==, = и подобных, и не ставлю вокруг +, *), но вот с количеством строк - я тут показывал код, где функция на 113 строк длинная - но она выполняет одну логическую функцию, и кому я показывал сказали что всё понятно в коде сразу.
>>42697
А дашь ссылку на задачку, хочу сам потыкать. Так без цифр вообще не хочется пробовать написать или изучать твой код...
не путай адептов чистого кода с адептами читаемого кода
вон с моржовым оператром можно так замутить что хрен распарсишь, а работать будет
Читаемый код очень важен в больших проектах, иначе скролинг этих слепленных портянок превратится в настоящий ад где захочется убить автора.
Папка пишет код читаемым несмотря на линтеры. Линтеры лишь ограничивают Папку.
В тему идут только линтеры форматирования вроде black или mypy для типов, если ты сумел его нормально прикрутить, а не через жопу (как чаще бывает). flake - нахуй
Чет этот папка вместо того, чтобы быть гигачадом и отказаться работать в тиме с неудобным ему линтером / продавить свои правила для линтера, тихо ест что дают в тиме и изливает свое нытье на двачах.
Проект может быть интересным, но 23-х летний тимлид услышал что-то про хорошие практики и решил внедрить на проекте самые лучшие техники.
Задача в том, чтобы убедить не увлекаться слишком сильно.
Разрабы этих флаков реально какие-то пидорасы неадекватные.
Я за то, чтобы код был читаемый и чтобы за некоторые практики по рукам давать, но должна быть адекватность.
В сухом остатке чед папка работает гребцом по правилам, писанным вирджин лидом-зумером.
Тащемта хлопья и настроить можно, что считать ошибками, а что нет.
Спасибо! Это всё же немного не то. В моем случае там именно сирена с определенными частотными характеристиками, которые в остальном потоке не встречаются.
Штош, попробую поработать с исходниками на С, а там глядишь кто-то ещё что-то посоветует.
Ах да, у меня ещё и не веб-поток, а аудиопоток, которые исходит от другого приложения.
кажется я нашел в жс-дрисне превосходящий функционал!
нужно срочно разобраться в это вопросе
а именно - найти шорткат для булевой инверсии с присвоением. то что имеется ебанная простыня
и самое главное - как организовать няшный рефакторинг без ЗЛОПИДАРСКИХ КЛАСОВ С ОБОССАННЫМ БОЙЛЕРПЛЕЙТОМ СУКА !?
чето пиздец я разволновался, надеюсь на твою скорую помощь анончик!
наркоман штоле?
осталось дождаться пока проснуться ФП господа и пояснят как обойти ботлнек со стейтом
Мда. Этот теперь в две жопы срет сразу и в питон-тред и в жс-тред.
Мань, что ты ерзаешь туда-сюда? Нахера ты учишь, будучи вкатышем, язык для фронта И язык для бэка? Ты определись уже.
А то так и будешь сидеть лаба1.руjs в треды постить.
Почему шнобель?
Давно этого анона тут вижу. Мне кажется, у него от длительного вката немного кукуха барахлить стала
Щенок, хоть в курсе, с кем базаришь?
Ну мне ничего в голову, кроме такой кринжы не приходит:
for index, value in (enumerate(array):
____if value == 1 and array[index+1] == 1:
...
Пиздец, ебло, ты до сих пор работу что ли не нашло?) Сколько уже блять месяцев прошло а ты до сих пор тут срешь?
что за нелепая и неэффективная хуета на 1м скрине? ничего удивительного что ты нахуй на рынке никому не нужен
Пиздец, ебло)
Я имею ввиду почему у этого шизоида погремуха Шнобель?
Жид что ли? Так они не тупые, а этот прям даун.
несколько тредов назад сдианонили, и оказалось, что пациент - обладатель греческого профиля огромного жидовского шнобеля то есть
Или выскажите мнение по лутцу(начал с него).
Меня впринципе не пугает стиль лутца, всё ок. Вопрос больше в актуальности того, что он там рассказывает.
>выскажите мнение по лутцу
5 из 10. Много воды, но сам язык он разбирает по косточкам.
Смысла не вижу его именно читать. Лучше держать его под рукой и обращаться к нему время от времени.
И еще вопрос, что действительно пишется на питоне и за что деньгу иметь можно на практике?
По запросам в гугле там целый набор, от игр до космолётов, но я же понимаю, что игры там 1 из миллиона делается на питоне, а космодесантом мне не стать.
>МЛ
Это у которого на бекенде все на сишке?
>бекенд
ну что то сложнее запросов к бд нахуй надо, не осилит с нормальным перфомансом...
Может найдешь наконец работу, чтоб поскорее выбраться из манямирка?
https://ideone.com/yTs8Xv
Где можно спиздить про пайчарм для линуха?
Раньше был ресурс который выдавал ключи для продуктов жидбрейнс, но его прикрыли
Вот скрин для тех кому лень переходить.
Класс Б ничего не знает про 2 других класса. И делая класс Б ожидаю, что и методы будут из класса Б вызываться
>А хули из класса А вызывается метод если из класса Б его вызываю
>вызывает метод из А по правилам mro
>...
Я как разрабодчик класса Б и подумать не мог, что кто-то захочет унаследоваться от него и от ещё какого-то класса, у которого будет метод с таким же именем. Как мне такое надо было нормально делать чтобы не словить такой нежданчик?
Мог бы и сам попробовать-догадаться.
А теперь догадайся что будет, если снизу ты объявишь классы E(C,D) и F(D,C)
А вот это никак. Я помню наследовался от класса, и создал сложную переменную, по типу urllib3_client - и всюду ошибки высыпались. Оказывается, по какой-то случайности в родном классе была такая же переменная, лол.
Я даже не могу уловить что ты спрашиваешь. \n - символ переноса строки.
Если ты выведешь строку, он тебе может так и написать с \n и другими спецсимволами. Если ты напишешь print, то он будет переносить строку, но это потому что в print есть специальный код для этого (скорее всего не в ней, а ниже, ну да не суть)
>>43472
>самый эффективный способ
В плане кода или в плане производительности?
https://ideone.com/Ao5iKb
Быстрее всего через нумбу будет, второе по скорости извращение вроде моего на нумпи. Да, преобразовать лист в нумпи-массив, посчитать, и потом обратно в лист будет быстрее, чем что угодно с листом бесполезным и тормозным.
Замечание правильное. В других языках есть и private-члены, и protected-члены и слово virtual.
В питоне можно использовать двойное подчеркивание
__hello() или вызывать нужную версию B.hello(self)
>Где можно спиздить про пайчарм для линуха?
нет разницы линукс это или винда. решение одинаковое
мб за год что-то поменялось и теперь надо удалить 3 файла а не 2? не думал, долбоеб?
Вот у меня есть страница и там значит такая структура
div class = content inner
<section>
<table>
<tbody>
<tr>
<td>
<section>
<table>
<tbody>
<tr>
<td>
<section>
</section>
Вот я хочу с помощью бьютифулсупа получить содержимое второго section -> tr
а я как не подступлюсь к этому говну с .find или .find_all я или получаю огромную кучу несортируемой хуйни либо упираюсь в первый section/первый table итд
как выцепить-то бля!
Уже нашел но спс
А, так там задача не только под питон, и можно си выбрать.
Может, эм, язык говно просто тормозное, не? Там же натурально даже в простом коде разница в сотню раз с си.
Я написал вроде как быстрый код, но тесты крупные скопировать не могу, а на сайте пишет "вердикт: RUNTIME_ERROR" без объяснения причин.
Если написать другой, потупее и в лоб, то, ну вот: https://pastebin.com/2h9BFeGq
Не знаю ничего про графы и что это такое, и откуда они тут берутся, просто написал как решал бы такую задачу. Графы это разве не про нахождение кратчайшего пути, если у тебя карта есть в виде графа?
У тебя какая-то хуета со словарями и deque, я даже не знаю что это в питоне. У тебя же обычного массива достаточно для решения такой задачи, который (по крайне мере в с++) на порядок быстрее любого ассоциативного, который тут совсем не нужен. Там короче цифры к кольцам сходятся, я нахожу кольца и нумерую их - ученики из кольца останавливаются на себе же, ученики присоединяющиеся к кольцам останавливаются на первом ученике попавшем в кольце. А у тебя хуета с полным перебором, где ты дублируешь вычисления многократно с каким-то хреновым асимптотическим временем вычисления - боюсь представить как твой код на 100к учениках заработает...
Блэ, вот норм мужицкий ответ. А не невнятные виляния очком что делал анон пару постов назад. Сам нихуяшеньки не знал но корчил из себя дохуя умудренного
Это называется C3-линеаризация. Почитай, как в питоне работает множественное наследование.
Ответ: если человек хочет множественно наследоваться от классов, которые для множественного наследования не предназначались - это его проблемы. По-хорошему, множественное наследование должно выглядить как "1 основной класс плюс миксины к нему".
Также можно использовать __ перед названием функции, это специально предназначено для избегания конфликта при наследовании (в pep8 так написано).
русификатор
А там одинаковое количество точек, или может быть такое, что в одной в десять раз больше, и в каких-то местах сгущения, и при этом одна из траекторий ещё и повёрнута?
Задача настолько общая, что сходу можно десятки подходов придумать - и в зависимости от входных данных какие-то подходы теряют осмысленность.
В том-то и дело, что разное.
Вот я подумываю всё вограть в систему координат и интерполировать точки целыми числами.
Или ещё придумал нарисовать эти отрезки на картиеке с заданной площадью, потом использовать величины площади пересечения по сравнению в общими. Кажется, что-то такое видел в opencv, но поди и попроще библиотеки есть.
>интерполировать точки целыми числами.
Хуита. Лучше для каждой точки траектории найди ближайшую точку из соседней траектории (причём с соблюдением порядка (чтобы не было петель пройденных в другую сторону), то есть чтобы ближайшая точка из второй траектории по индексу была больше или как последняя обработанная.), и как меру сходства взять отношение (среднеквадратичного расстояния до точек соседней - расстояние между точками в этом месте)/(расстояние между точками в этом месте) - ну или там меру сам выберешь подходящую. Лучше вместо расстояния до ближайшей точки взять расстояния до кубического сплайна (особенно если траектория физическая и там была инерция) построенного по второй траектории, и следить за порядком всё так же.
Такой алгоритм и меру сходства выдаст, и позволит найти такое, если в первой траектории отрезок от 10% до 40% совпадает с отрезком второй траектории от 70% до 90%.
Мяу, могу накидать код, если дашь по десять кривых. Чтобы степень зашумлённости посмотреть и сложности траекторий.
Тоже хуета, нечувствительная к мелким деталям и обходу петель не в том направлении. И ещё плохо применимая для 3d, у тебя (у твоего компьютера) крыша поедет рендерить трёхмерный массив, если там мелкие детали есть.
У меня есть типа товар, у товара отзывы и оценки. Я хочу отображать количество того и другого. Собственно оценка - это поле отзыва, можно просто оценить, а можно добавить ещё текст. Ну и вот, получается количество оценок - это количество всех записей в таблице отзывов, относящихся к товару, потому что нельзя создать отзыв без оценки. А вот количество отзывов (в смысле с текстом) - это количество записей в таблице отзывов, относящихся к товару, у которых в поле текст пустая строка типа. Ну и вот че-то не работает. Я вот так сделал. И у меня всегда количество отзывов и количество оценок одинаковое. То есть типа всегда отрабатывает default у Case. Хотя если в шелле смотрю, то текст у отзыва - пустая строка.
Ну в общем, я подумал, что все равно наверное каждый раз запрашивать такую хуевину у бд, когда кто-то просто на страницу зашел, как-то не очень и добавил просто эти поля к товару, а запросы эти агрегирующие запускаю в методе сейв в модели отзыва и сохраняю их в товаре. Типа считаю всё это только когда кто-то отзыв оставил или поменял.
ток не обоссывайте, не являюсь программистом, поэтому тут спрашиваю
Не понятно, что и как ты сохраняешь
Ты можешь использовать в качестве базы sqlite, идёт среди стандартных библиотек питона, дополнительных зависимостей нет, никакие дополнительные сервисы не поднимаются
И ещё
sqlite хорош тем, что ты можешь сохранять данные в БД, довольно надёжно
Если ты работаешь в режиме разовых дампов, то может тебе проще сохранять в формате pickle. Так ты можешь сохранять данные любой сложности, всякие классы и т.п. json всё-таки сильно ограничен по возможностям
Скажем так, сохраняю: id, дату, путь, название. По факту это данные для бд, но проблема в том, что итоговое приложение надо будет через pyinstaller преобразовать в exe, а надо ли для работы sqlite устанавливать на другой комп саму sqlite, как с postgres или нет? Потому что нужно учесть перспективу раздачи другим пользователям, а ходить по всем и ставить тонну вспомогательного софта не хочется и такое решение задачи не примут.
>json всё-таки сильно ограничен по возможностям
Мне только записать, прочитать, удалить ненужное
>формате pickle
видел на ютубе про это что-то, но так и не стал разбираться
>Если ты работаешь в режиме разовых дампов
здесь я тебе не скажу что да как, ибо это более продвинутый уровень надо иметь, либо опыт выполнения проектов. У меня пока уровень написания скриптов, а не хоть какого-то легковесного приложения.
мимо студентота с бесплатным профешшионал
Смотри документацию на питон, раздел "модули".
sqlite это штатный модуль, sqlite3 называется. Всё сохраняется в один файл.
Впрочем тебе скорее всего это не нужно, а нужно именно в json. Или в pickle.
Короче храни в json, если же будешь понимать, что что-то явно не так, формулируй задачу и задавай вопросы. Довольно часто серьёзный софт хранит данные в json, это нормально.
Для тебя МС трудилась, создавала бесплатный VS Code, шикарная IDE. А ты всё свои вороватые замашки проявляешь.
Есть решения свободные, бери и пользуй. Хочешь такого энтерпрайза, ну купи, блин. Уважай чужой труд.
Я ж говорю, мне ближайшие 4 года похуй, у меня анлимитед подписка на все. Сама суть интересна, почему нормально не крякнули. Могу предположить что с теми ебанутыми способами он может обновляться
А визикод ну хз, вряд ли он может столько сколько пайчарм. Когда-то в детстве пользовал вижуал студию для плюсов, но тот же силайон в разы удобнее и функциональнее.
>Бля лол, на торентах нет ломанутого пайчарма?
Есть. но там будет оригинальный пишарм и тот же подход что "с левым сайтом"
>Сама суть интересна, почему нормально не крякнули
куда уж нормальнее. никто не патчит бинарники, не требует права админа. Распаковать зип, указать пару строк в конфиге (даже регаться для триала не нужно), применить ключ и забыть о проблеме до следующей мажорной версии. Просто время от времени качать дистры с оффсайта ибо когда придет новая мажорка и механизм сломается (как это было недавно), то можно будет просто откатить и ждать пока починят.
>вряд ли он может столько сколько пайчарм
ну он и легче. не у всех мощные машины.
Символ Питона желто-голубой - это если присмотреться, то это свастон в цветах укр. флага?
Спасибо, анон
Герб Азова, скоро Пыня начнёт отстреливать питонистов
о у вас в команда Настоящий Программист.
короче, тулза называется valgrind. Вот какой там аналог ее в питоне - неебу.
Кал грин это когда дисбактериоз, надо таблеточек пропить с бактериями.
Да, обязательно, чтобы данные сохранились
калгрины по-моему для анализа ветвей исполнения и производительности
Смотри стек с ключевыми словами
kcachegrind, pyprof2calltree
Лучше транзакцию открой session.begin(), в конце будет автоматом комит
Тоже не очень хорошо. Вот одна траектория вообще в какой-то момент разварачивается на 180 градусов, просто расстояния этого не учтут.
Это уже нужно траектории смотреть.
Взять производную, смотреть чтобы скалярное произведение было положительное, или тем же кодом ещё и производные проверять. Ну это так, вариант сходу.
Дайте мне уже траектории, я же проверить хочу как моя идея сработает, а генерировать - ну, они тогда очень простыми будут, а генерация сложных будет сложнее кода проверки соответствия.
В рот возьми
Заранее благодарю
Хотелось бы вкатиться в веб разработку для начала, и далее изучить автоматизацию
нахуй они одновременно запрашивают? они ебанутые?
Что-то вроде shared memory есть, ты можешь посмотреть в доке на модуль multiprocessing, но там что-то очень ограниченное.
Я этим никогда не пользовался, даже тестировать не пробовал, я как понимаю, нормальную shared memory на уровене питон-данных ты всё равно не сделаешь, возникают проблемы те же, для чего GIL придумывали, проблемы синхнонизации ещё.
В питоне всё на счётчиках ссылок, вот у тебя в двух процессах что-то ссылается на объект из shared memory. Как ты будешь счётчики ссылок синхронизировать?
Сам по себе стрёмный паттерн. Даже в многопотоке, ты замяешься корректно лочить или обрабатывать ситуации, когда у тебя одни поток читает, а другой меняет этот супер тяжеловесный стейт.
В какой момент ты создаёшь клиенты? У тебя посикс? Ты можешь делать отдельные процессы уже после изменения стейка, использую метод fork для того, чтобы порождать подпроцессы.
Ещё одно, насколько я помню, если ты форкаешь процесс, но при этом не меняешь данные, то реально в памяти хранится только одна физическая копия, размножение делается, если ты что-то реально меняешь в памяти.
По крайней мере на виртуальных машинах такое что-то работает.
Надо уточнять-проверять, сейчас немного лень. Но если тебе важно, проверь вот это вот.
Вы видите копию треда, сохраненную 7 ноября 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.