Двач.hk не отвечает.
Вы видите копию треда, сохраненную 29 сентября 2023 года.

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

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

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

Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://goonlinetools.com/snapshot/share/ - для листингов, без регистрации, но с капчей

#######################################
Вопросы-ответы:
— С чего начать изучать питон?
У питона намного лучше официальная документация, чем у большинства других языков. Есть там и учебное пособие для начинающих: https://docs.python.org/3/tutorial/introduction.html , неофициальный перевод на русский язык: https://digitology.tech/docs/python_3/tutorial/introduction.html (для питона версии 3.8, но разницы почти нет)

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

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

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

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

— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но частично переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)

— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Ролик на американском языке про многопоточность и асинхронность, построение своего event loop с нуля, помогает понять, как устроена асинхронность внутри: https://www.youtube.com/watch?v=MCs5OvhV9S4

— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется

— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.

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

старая версия шапки, треды 90-148 и ранее: https://dumpz.org/bASGKD8cCFDf
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущий исходник: https://goonlinetools.com/snapshot/code/#8gd2g1snu3l8i26k0bc6k9
2 2748770
Кстати, напоминаю, что Питон - ненастоящий язык, который годится только для небольших скриптов и математических научных дрочилен.
Питон используют опытные погромисты как вспомогательный язык, поэтому если вы думаете, что можете вкатиться в айти, зная питон - вы глубоко ошибаетесь.
3 2748795
>>748770
Наверно, в циане, тиньке и яндексе он просто так используется?
4 2748798
>>748795
Это просто вкатун в СЕРЬЕЗНЫЙ ЯЗЫК сбрасывает фрустрацию.
5 2748799
Groovy — как Python, но на JVM и не завязан на отступы синтаксически.
6 2748808
>>748795

>куд-кудах, а ищу твитор на питуне сделон


Тебе же русским по белому написали, что питухон вспомогательный. Это максимилизированная версия поговорки - "изи ту лерн хард ту мастер" Ты можешь выучить питухон и идти с ним на хуй, потому что что применение у него есть, только если ты нормальный погромист и используешь питухон для подсосных скриптовых задач.
7 2748821
>>748798
Да не, просто тролль совсем оскуфел, лениво перекатился в новый трет и лениво толсто набросил
8 2748827
>>2748769 →
Спасибо что ответил, я действительно ценю ваш фидбэк и если какую херню пишу или думаю говорите.
1) Я собираюсь в дальнейшем восстанавливать математику отдельно для того чтобы закрыть вышку, а большинство курсов по Data Science дают, на мой неопытный взгляд, меньше питона и программирования, а стоят они на 70 к больше чем тот же курс по питону. Data science скорее долгосрочная цель потому что мне сложно представить что за 2 месяца (курс 5, считай 3 питон 2 математика) вообще можно их математики запомнить. По крайней мере мне всегда код (C++, Wolfram Alpha тогда учили) на порядок легче давался чем теоремы из мат анализа. Может нах не нужны в Data Science эти теоремы но даже если мы просто берём применение их правил я затрудняюсь представить сколько я за пару месяцев смогу запомнить и как я буду в этом соревноваться с кем то кто только что из вуза с мат специальностью туда идёт.

2) Hexlet и Skypro приглянулись но у них нет интенсивов/буткемпов. Если можешь поподробней описать чем Практикум лучше скиллфактори рад буду услышать. Стоит удовольствие на 70 к больше и длится на 2 месяца дольше, впрочем с меньшей нагрузкой в чём есть свои плюсы. Дело в том что мне в принципе курсы нужны не только, и не столько для того чтобы выучить питон, а для того чтобы получить хорошую базу,т.е. понимать что сегодня вообще хотят от кодеров, что такое фреймворки с чем их едят и т. д., и т. п., начать портфолио потому что как я писал в прошлом треде мне сложно самому себе задачи придумывать ибо в инете почти всегда есть способы это решить вопрос проще, быстрее и более организовано, чем самому писать. Может для опытного кодера это иначе но мой опыт пока такой и проще на курсах решать задачи из индустрии. У меня есть идея для пет проекта, может к тому времени как выучу питон еще что придумаю но хочется себя обезопасить.

3) Я уже начал вчера, эксперимента ради, Поколение Python, подошёл к 1му экзамену, пока немного скучно потому что в основном восстановление и переиначивание всяких принтов с слишком большим количеством на мой вкус закрепления материала, но в целом мне нравится. Чтобы выучить питон сам по себе я думаю меня самого хватит, но по моему в разы быстрее получится пойти на курсы чем разбираться самому какие еще связанные скилы нужны, как к ним подойти, как их связывать и как их лучше учить.
8 2748827
>>2748769 →
Спасибо что ответил, я действительно ценю ваш фидбэк и если какую херню пишу или думаю говорите.
1) Я собираюсь в дальнейшем восстанавливать математику отдельно для того чтобы закрыть вышку, а большинство курсов по Data Science дают, на мой неопытный взгляд, меньше питона и программирования, а стоят они на 70 к больше чем тот же курс по питону. Data science скорее долгосрочная цель потому что мне сложно представить что за 2 месяца (курс 5, считай 3 питон 2 математика) вообще можно их математики запомнить. По крайней мере мне всегда код (C++, Wolfram Alpha тогда учили) на порядок легче давался чем теоремы из мат анализа. Может нах не нужны в Data Science эти теоремы но даже если мы просто берём применение их правил я затрудняюсь представить сколько я за пару месяцев смогу запомнить и как я буду в этом соревноваться с кем то кто только что из вуза с мат специальностью туда идёт.

2) Hexlet и Skypro приглянулись но у них нет интенсивов/буткемпов. Если можешь поподробней описать чем Практикум лучше скиллфактори рад буду услышать. Стоит удовольствие на 70 к больше и длится на 2 месяца дольше, впрочем с меньшей нагрузкой в чём есть свои плюсы. Дело в том что мне в принципе курсы нужны не только, и не столько для того чтобы выучить питон, а для того чтобы получить хорошую базу,т.е. понимать что сегодня вообще хотят от кодеров, что такое фреймворки с чем их едят и т. д., и т. п., начать портфолио потому что как я писал в прошлом треде мне сложно самому себе задачи придумывать ибо в инете почти всегда есть способы это решить вопрос проще, быстрее и более организовано, чем самому писать. Может для опытного кодера это иначе но мой опыт пока такой и проще на курсах решать задачи из индустрии. У меня есть идея для пет проекта, может к тому времени как выучу питон еще что придумаю но хочется себя обезопасить.

3) Я уже начал вчера, эксперимента ради, Поколение Python, подошёл к 1му экзамену, пока немного скучно потому что в основном восстановление и переиначивание всяких принтов с слишком большим количеством на мой вкус закрепления материала, но в целом мне нравится. Чтобы выучить питон сам по себе я думаю меня самого хватит, но по моему в разы быстрее получится пойти на курсы чем разбираться самому какие еще связанные скилы нужны, как к ним подойти, как их связывать и как их лучше учить.
9 2748830
>>748827
Подразумевалось для >>2748768 →
10 2748835
>>748821
Рилли, гайс, шо за боринг шит... Сириосли, никому не нужны бар лэнгвиджи, ни питон, ни джава, ни другие. Стек технолоджисов нужен, в зависимости от филда. И компетеншн по программинку вообще.

И что значить "выучить питон"? Сюда модули socket, threading, asyncio входят?
11 2748841
>>748799
Все производные JVM не от оракла медленно но верно подыхают, причем груви с кложой уже трепыхаются в предсмертной агонии, а скала просто медленно умирает обосравшись с 3-й версией.
12 2748842
>>748808

>Тебе же русским по белому написали, что питухон вспомогательный.


И зачем в компаниях выше висят вакансии на программистов у которых основной язык питон?
13 2748849
>>748808
Как гласит народная мудрость, начни обсуждать любой язык програмирования, как сразу появится джаваеб, который расскажет, что ваш язык говно без задач
14 2748850
>>748849
...и будет прав.
15 2748851
>>748850
У вас имеется некий гештальт, не находите?
16 2748870
>>748835
Сразу видно вкатуна. Нужны тебе сокеты, смотришь доки на сокет.
17 2748905
>>748870

>Нужны тебе сокеты, смотришь доки на сокет.


пока ты не понимаешь, как сети работают, смотреть доки примерно бесполезно. Ну или ты будешь очень долго смотреть.
18 2748920
>>748905
Так и документацию бесполезно зубрить.
image.png5 Кб, 264x217
19 2749008
Нужно 5 раз исполнить функцию, которая иногда выдает ошибку (из-за внешних факторов). Чекните пикрелейтед, это так делается? Почему-то кажется что что-то не то.
20 2749052
>>749008
Примерно так и решается. Можно чуток упростить. while i < 5 и инкрементируй при успехе.
21 2749068
>>749008
Зачем while?
22 2749082
>>749068
Чтобы пытался исполнить, пока не получится.
>>749052
Логично, спасибо.
23 2749162
>>749008
Неправильно же. in 5 не имеет смысла. Нужен range(5).
24 2749209
>>748706 (OP)
https://pastebin.com/Pg6SnyfL
Братаны, пытаюсь отменить назойливую таску в asyncio, которая иногда может зависать. Очевидно чт ов asyncio можно использовать wait_for с указанием таймаута, я так и делаю, но все что он делает это просто бросает эксепшн при истечении таймаута, таска в бекграунде в другом треде или процессе продолжает исполняться. Как ее кильнуть? Вроде все делаю как надо а эта мразь все равно крутится и не умирает (я поставил sleep на 10 секунд просто для простоты, мой условный sleep длится минут 10 и он блокирующий)
25 2749212
>>749209
Думал попытаться вручную отправить kill сигнал этому процесу (а это процесс т.к. ProcessPoolExecutor), но как его pid узнать?
26 2749361
>>749212
>>749209
Почему ты не делаешь это через asycnio.subprocess?
https://docs.python.org/3/library/asyncio-subprocess.html
там поддержка всего есть, сейчас слёту код не приведу, но есть, делал такое

poolExecuter для другого, то когда тебе надо много задач считать
27 2749498
>>749361
Не проще таску заспавнить и потом прибить?
28 2749585
>>748850
Сочи хуй, быдло, есть только один настоящий язык - ассемблера и ближайший к нему С. И твоя джава рядом не стоит.
sage 29 2749592
>>749585
Славик спокуха, ты ещё курсовую за второй курс не закрыл.
30 2749747
>>748770
Питон -- топовый язык для экспериментирования, прототипирования и моделирования, за счет ебейшей интерактивности (не на уровне лиспа конечно, но близко) отладка и ходьба по граблям выходит на совершенно новый уровень. Потом можно уже разработанный алгоритм перевести на "серьезный" язык, если это необходимо.
31 2749758
>>749592
Но джава реально хуйня для макак.
В нулевые ее воспринимали хуже, чем сейчас питон. Над теми, кто писал на джаве, насмехались, был даже стереотип, что типичный джава-разработчик это максимально тупой индус, который не способен писать на более сложных языках. И в принципе стереотип был недалек от истины, до сих пор значительная часть легаси на джаве была разработана теми самыми тупыми индусами.
32 2749871
>>749758

>был даже стереотип, что типичный джава-разработчик это максимально тупой индус


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

Сейчас, конечно, всё поменялось, но всё равно, порог входа в питон ниже, меньше понимать надо и учиться, чтобы хоть чего-то учебное суметь написать.
33 2749884
>>749361
poolExecuter нужен в первую очередь чтобы мейн луп не блокировать интенсивными задачами
34 2749921
>>749871

>сложной


Мантра придуманая индусами-джавистами.
Статическая типизация - это ведь сложно! x = "string" это хуйня которую напишет даже собака, не то что str x = "string", а потом еще и ide сама скажет, если ты к x будешь обращатсья как не положено, вот где хардкор!
35 2749956
>>749871

>никогда такого не было


Чел, ну кому ты пиздишь? Джава все девяностые и нулевые продвигалась как простой и понятный язык, который поймет даже полный дебил, и постоянно противопоставлялась "сложному и запутанному" С++.
Идея джавы - сделать простой язык с максимальной защитой от идиота, чтобы программист не смог выстрелить себе в ногу даже если бы он очень этого захотел.
36 2750030
>>749884
GIL же, протеины все равно не посчитаешь.
https://stackoverflow.com/a/70108982
37 2750044
>>750030
ProcessPoolExecutor клал хуй на GIL
image.png3 Кб, 248x80
38 2750245
Анончики, а как у вас в команде к пикрилу относятся? Имхо, отличная вещь, в своих хуитках я её всегда прикручиваю и конфигурирую на максимальную строгость, но вот на работе ситуация послежнее: в проекте вроде как есть mypy в зависимостях, но 1) со скручеными настройками строгости 2) все ложили болт на это дело - в CI тайпчекинга нет, половина комманды про mypy просто не знает, а для "типизации" иногда использует имена переменных с её типом в начале или в конце а-ля "users_list", "cached_data_map" сссука, пишет код обмазанный с ног до головы конструкциями типа "if hasattr(var, 'field')...", "getattr(var, 'field', None)" с аргумениацией в пользу этого по типу "ну бля а вдруг там нет этого поля, тогда эесепшен поднимется, а так всё хорошо будет ыыы" ссссука х2, при этом подшучивают над теми кто пишет на JS без тайпскрипта - ведь о Боже там же если интеджер со строкой сложить то какая-то хуйня получится и поэтому нужно весь фронтенд типами обмазывать а то там бля кнопка не в тот цвет покрасится!!!11!!! а на бэке тем временем даже аннотаций типов в функциях не ставят даже в простейших случаях где аргументы типа int, str, None и т.д.
39 2750365
>>749082

>Чтобы пытался исполнить, пока не получится


Анус поставишь, что не заблочишь прогу каким-нибудь говном?
40 2750372
>>750245

>Анончики, а как у вас в команде к пикрилу относятся?


Обязательно нахуй, вместе с pydantic или датаклассами. Уже был опыт пожирания говна при переписывании чужого сервиса который мешал 6-уровневые джсонины без каких либо подсказок что где приходит. Считай это обязательной частью документации и какой-никакой валидацией.
41 2750458
господа я хочу установить
https://pypi.org/project/PyContracts3/
пишу pip install PyContracts3
в pip list отображается.

PyContracts 1.8.12
PyContracts3 3.0.2
python-contracts 0.1.4

запускаю проект состоящий из одной строки
import contracts

Получаю.
ImportError: cannot import name 'operatorPrecedence' from 'pyparsing' (/home/..../.pyenv/versions/3.9.7/lib/python3.9/site-packages/pyparsing/__init__.py)

Обновил пайпарсинг - опять такая-же ошибка. Начал откатывать пайпарсинги, откатил аж до 2.4.6 (c 3.1.0).
Начал ругаться AttributeError: module 'numpy' has no attribute 'int'.

Как мне подружиться с pycontracts?
42 2750570
Подскажите как сделать чтоб вместе то что на скрине 1 заработало. Код на скрине 2 работает.
Так вот как их вместе подружить чтоб yt-dlp.exe запускался по ф4 и паузы на ф2 работали.
Пробовал и асинхронно и трединг, и так и так получается хрень. Для меня это новая тема и хочу понять как это всё правильно запускать вместе.
Суть в том что по ф4 запускается скачивание видосов, а нажимая ф2 приостанавливаешь процесс yt-dlp.exe или отжимаешь паузу, в зависимости от состояния.

import psutil, datetime, keyboard, subprocess, time
# Получаем список всех процессов с заданным именем
processes = [p for p in psutil.process_iter(['name', 'status']) if p.info['name'] == "yt-dlp.exe"]
def YTD_proc():
for process in processes:
if process.status() == "running":process.suspend()
elif process.status() == "stopped":process.resume()
print(f'YT-DLP.exe is {processes[0].status()} TIME {str(datetime.datetime.now()).split(".")[0]}')
def YTD_run():
subprocess.run('c:\\python\\yt-dlp\\yt-dlp.exe --continue --merge-output-format mp4 --format "137+140" -a c:\\python\\yt-dlp\\links.txt')
keyboard.add_hotkey('F4', YTD_run)
keyboard.add_hotkey('F2', YTD_proc)
while True:pass
43 2750573
>>750245
Я свой код валидирую периодически, чужой заебешься переписывать. Только майпай медленный сука.
44 2750581
>>750458

>Как


Начать использовать нормальный пакетный менеджер вроде poetry + контейнеризацию?
45 2750633
>>749498
Сюрприз: прибитая таска вовсе не означает прибитый процесс. Таска-то прибивается, а то что в фоне крутится отдельный тред или процесс, жрущий ресурсы, ивент лупу похеру
46 2750662
>>750365
Это не прога, а скрипт, если что я его просто вырублю.
image.png67 Кб, 747x275
47 2750724
>>749361
И как в эту херню передавать коллбеки?
сука, в очередной раз убеждаюсь что динамическая типизация - ебаный кал, как вы блять в этом дерьме разбираетесь? вот что эта сигнатура значит? что блять метод принимает?
48 2750740
>>750245
Тайп-чекинг в петухоне одобряю. Единственное, я считаю, что строгий тайп-чекинг нужен для либ, а для декларативного слоя можно вообще не юзать или юзать по минимому. У своих шкетов требую тайп аннотации, как часть документации.
Сижу и веду проекты на Pyright, плюс он в питоновский экстеншон VScode вшит, что тоже круто. mypy использую для малых проектов, либо без проектов с какой-то поддержкой, чтобы спустя время понимать, что происходит, но сейчас думаю вообще все на Pyright перевести.
Год назад разбирал подкапотье майпай и некоторые моменты там очень кривые.

Самый большой недостаток от введения тайп-чекинга на проектах - васяны начинают считать, что если функция проаннотирована, то она может быть калом. В итоге часто вижу кривое разбиение более сложных процессов на функции, которые возвращают сложный объект с аннотацией на 3 строки. Но решилось написание плагина на флейк.
49 2750749
>>750724
Імя параметра program табе пра што кажа?
50 2750820
>>750749
Пра гразнайе гавняная ачько старага педираста из Техникума Трасянки, каторый тут ищет малодиньких хуйцов.
51 2750844
>>750724
Рискну предположить что program это функция которая запуситися в отдельном процессе

>>750820
Проиграл
52 2750848
>>750844

>Рискну предположить


Мимо. Ваше очко уходит в зрительный зал.
image.png40 Кб, 864x374
53 2750855
>>750848
Да блять...
54 2751780
>>750458
может быть проще перестать использовать старое говно, которое никто не поддерживает, а поискать другое говно?
Стикер585 Кб, 250x250
55 2751850
Что в питоне самое тяжелое и сложное в обучении как думаете?
56 2751853
>>751850
Ничего.
Easy to learn hard to master.
57 2751855
>>751850
научиться программировать и понять как работают компьютеры
58 2751863
>>750724
Никак, subrpocess это отдельный процесс который может быть вообще не на питоне, какие нахрен калбеки.
59 2752433
>>751850
Дык, ООП и ФП, как обычно. Мозгов нет — хуй осилишь. Или тебе именно из особенностей конкретного языка? В Питоне сложно, что типизация динамическая. Заёбывает иногда ошибки искать. Ну и шиза и выебоны лично Опоссума, которого благополучно послали нахуй недавно, слава богу. То case-switch ему не нравится, то тернарный оператор весь как гавно собачье, то ++ нихатюнибуду. Блядь сапогом бы по еблу.
60 2752498
>>752433

>то ++ нихатюнибуду


Так реально ненужная хуита
61 2752609
>>752498
...сказал твой папка про гандоны. А зря...
62 2752749
>>751850
Метаклассы наверн
63 2752767
>>752749
Потому что оно в конце нубских книжек, до которого большинство не доходит?
64 2752806
>>752767
А я ни одной книжки по Питону в своей жизни не открыл. Единственное, что я изучал по книжке, это наверное Джаву, и то потому что маленький и глупый был
Самое сложное для меня лично это мультитрединг (сделан он как то странно, возможно из-за GIL), FFI и костылики вроде Numba.
65 2752853
<сделай что-то с х> для каждого х из набора_х

Какой уебан это придумал?
Почему бы просто не писать:
Для х из набора_х:
....делай херню с х.
16579500522761.jpg111 Кб, 960x639
66 2752856
че за Tishka сидит на каждом канале в телеге по питону и отвечает на все вопросы 24/7?
че за пиздец?
67 2752923
>>752856
гопота-бот?
68 2752937
>>752853
В чём проблема с компрехеншенсами, вкатутося?
69 2753001
>>752853
Ну так и пиши так, кто тебе запрещает? Насмотрелся "эффективных" решения во всяких кодворсах, где все пытаются запихнуть все решение в одну строку? Так то говноеды
70 2753111
>>752856
Чел без личной жизни, унылое говно по жизни, у которого есть один питон и больше нихуя.
71 2753192
>>753111
Помню, на реддите был тип с тремя питонами, бывает же.
72 2753226
>>753111
Это тот шизойд, что картинки с приглашением в свою секту форсит?
73 2753386
>>752433

>++ нихатюнибуду


i += 1 блестяще решает эту задачу, прекрасно считываясь и не оставляя пространства для выстрела в ногу.
74 2753477
>>753386
Знал бы ты настоящие языки программирования, то догадывался бы, что ++ можно использовать в выражении, причём, как до переменной, так и после. Что не только изящно, но и довольно интересно расширяет применение. Но увы, твоя планка — скрипты.
75 2753517
>>753477

>думать что есть настоящие\сложные\трушные языки программирования


Ваш iq - вафелька. Не сопротивляйтесь.
76 2753590
>>753517
Не попробовал в анус

> настоящие\сложные\трушные


хуи - не мужик.
image.png11 Кб, 511x168
77 2754568
Суп. Пытаюсь понять: это нормальный кейс?
Или хуйня из-под коня и в функции нормально использовать только то, что ей явно передаётся.
image.png11 Кб, 511x168
78 2754575
>>754568
Просто с одной стороны неочевидно, где на самом деле задаётся значение и где его искать, а с другой...
У меня есть функция, которой нужно было бы передавать значение через весь стек на глубину в 5-6 вызовов, в каждой из промежуточных функций добавляя ещё один аргумент.
И таких функций - несколько, так что всего мне по хардкору понадобится добавить десятки передач, чтобы где-то там внутри параметр явно пришёл как параметр...
Всё, разумеется, происходит в пределах одного модуля.
79 2754578
>>754575
Можешь вверх вынести значения-константы.
Эта хуитка с нейм делается, чтобы не было левого выполнения при импорте. Присвоение значений в целом похуй, тем более, если оно будет использоваться в импортирумых функциях.
80 2754656
>>754575

>Просто с одной стороны неочевидно


Все очевидно, просто ты учишь питон по васянским книгам\гайдам.
В питоне (как и в любом языке программирования) есть области видимости, в случае питона у тебя их 4
https://data-flair.training/blogs/python-variable-scope/
Первая ссылка из инета, не читал, насколько хорошо подан материал

А то, что тебе надо передавать что то на глубину в 5-6 вызовов, это проблема дизайна твоего кода, очевидно, эту хуйню надо переписать, у нас же не джава что бы закапываться в 40 коллбеков что бы написать хелоу ворлд и потом смотреть всех как на говно
81 2754773
>>754568

>. Пытаюсь понять: это нормальный кейс?


Нет, совсем нет.
Глобальные переменные принципиальное зло. В крайнем случае, хотя не надо так делать, заведи какой-нибудь словать glob и в нём храни данные. Но не надо так делать,

Скорее тебе нужно смотреть на классы и объекты, скорее всего, если тебе надо проносить данные на несколько уровней вглубь, у тебя реально твои функции работают с одними данными и их следует оформить как методы, а переменные хранить как атрибуты класса

В реальной жизни твой кейс почти никогда не встречается. Бывает клиника, но тебе туда не надо
82 2754777
братья, я тут себе попробовал 3.12.

Почему ОНО работает тормознее не только по сравнению с 3.11, но и часто 3.10?

Я ожидал, что ещё ускорят. Но не ждал, что продолбают перворманс
83 2754778
>>754777
Скидывай свои тесты
84 2754912
Аноны, может кто видел на гитхабе репозиторий с софтом для простановки тагов картинкам (+ другим файлам) и их просмотра в этом же софте.
Приздец просто, такая прикладная задача же - поставлять тэги и фильтровать файлы на основе этих тэгов, а нормального софта для этого нет в 2023 году. Хоть сам садись писать. Я бы и написал, но время нет и не будет.

Уже десяток софтин перепробовал и везде какое-то говно не эргономичное. Самое близкое к идеалу TagSpaces, но в нем тоже много косяков, таких как например то, что программа ужасно медленная и всю инфу о тагах хранит в виде отдельных файлов а не в базе данных.
85 2754925
>>754912
Насиделся на бурах?
Оно кажется привлекательным на первый взгляд, но ты быстро забьешь и станет бесполезным. Вот с коммьюнити работает норм, потому что достаточное количество тегозадротов есть.
86 2756449
Ознакамливаюсь тут с вашим питоном, одна математика. Все ЯП такие? Он для чего то подходит кроме создания калькуляторов и разных статистических расчётов?
87 2756480
>>756449
Питон сейчас язык номер 1 для всякой разной автоматизации
88 2756532
>>756449
Грузить джейсоны можно ещё
89 2756551
В данный момент я пишу на PHP, но конкретный язык здесь большого значения не имеет, я вообще задумался над этим, когда пилил проект на Python, так что позволю себе спросить в нескольких тредах. Что рекомендуете почитать на тему обработки исключений? А именно, меня интересует два аспекта:

1. Как понять, в каких случаях стоит бросать исключения, а в каких нет? Например, есть у меня класс, который производит определённые манипуляции над файлами. Поскольку проект может быть запущен в несколько процессов, файлы я блокирую при работе, и блокировщик используется самописный, потому что так нужно. Блокировщик имеет два метода - заблокировать/разблокировать файл, над которым производятся манипуляции. Возникает вопрос - что делать, если выполняется метод unlock над файлом, который и так не заблокирован? Стоит ли в этом случае бросать исключение, которое говорит - атятя, ты пытаешься разблокировать файл, который не заблокирован? Или вести себя так, как будто файл был разблокирован? По сути ведь, результат такой же, как и при разблокировке. Разница лишь в том, что в данном случае файл изначально не был заблокирован.
С одной стороны, если бросать исключение, то это как-то более подробно что ли. Ведь по логике не должно быть ситуации, в которой я пытаюсь разблокировать незаблокированный файл. Если такая ситуация возникла, то это как бы не страшно вообще, но и не то, чего я ожидал. Брошенное исключение будет явно заметно и я что-то изменю в алгоритме. А если так и надо, то сделаю что-то типа `try { $lck->unlock("file.bin") } catch (FileDontLockedException $e) { ... }`.
С другой стороны... несколько противоречит KISS, не? В сущности, результатов работы у метода `unlock` может быть два: либо файл разблокирован и свободен для манипуляций, либо нет и лови исключение. Ситуации "файл был успешно разблокирован" и "файл изначально не был заблокирован" по своему результату идентичны.
Вот и как решить?

2. Есть две крайности. Одна - всякий раз кидать \Exception. Вторая - для каждой ситуации, в которой может быть брошено исключение, создавать собственный класс. Ну, может, в совсем уж одинаковых ситуациях использовать уже имеющийся класс исключения. Вопрос - как найти в этом золотую середину? Если на первый вопрос ответить "кидать исключение", то достойна ли ситуация "файл изначально не был заблокирован" отдельного класса исключения? А ситуация "ты пытаешься разблокировать файл, который был заблокирован другим процессом, и поскольку флаг forced не был передан - соси бибу"? А ещё какая-нибудь?
89 2756551
В данный момент я пишу на PHP, но конкретный язык здесь большого значения не имеет, я вообще задумался над этим, когда пилил проект на Python, так что позволю себе спросить в нескольких тредах. Что рекомендуете почитать на тему обработки исключений? А именно, меня интересует два аспекта:

1. Как понять, в каких случаях стоит бросать исключения, а в каких нет? Например, есть у меня класс, который производит определённые манипуляции над файлами. Поскольку проект может быть запущен в несколько процессов, файлы я блокирую при работе, и блокировщик используется самописный, потому что так нужно. Блокировщик имеет два метода - заблокировать/разблокировать файл, над которым производятся манипуляции. Возникает вопрос - что делать, если выполняется метод unlock над файлом, который и так не заблокирован? Стоит ли в этом случае бросать исключение, которое говорит - атятя, ты пытаешься разблокировать файл, который не заблокирован? Или вести себя так, как будто файл был разблокирован? По сути ведь, результат такой же, как и при разблокировке. Разница лишь в том, что в данном случае файл изначально не был заблокирован.
С одной стороны, если бросать исключение, то это как-то более подробно что ли. Ведь по логике не должно быть ситуации, в которой я пытаюсь разблокировать незаблокированный файл. Если такая ситуация возникла, то это как бы не страшно вообще, но и не то, чего я ожидал. Брошенное исключение будет явно заметно и я что-то изменю в алгоритме. А если так и надо, то сделаю что-то типа `try { $lck->unlock("file.bin") } catch (FileDontLockedException $e) { ... }`.
С другой стороны... несколько противоречит KISS, не? В сущности, результатов работы у метода `unlock` может быть два: либо файл разблокирован и свободен для манипуляций, либо нет и лови исключение. Ситуации "файл был успешно разблокирован" и "файл изначально не был заблокирован" по своему результату идентичны.
Вот и как решить?

2. Есть две крайности. Одна - всякий раз кидать \Exception. Вторая - для каждой ситуации, в которой может быть брошено исключение, создавать собственный класс. Ну, может, в совсем уж одинаковых ситуациях использовать уже имеющийся класс исключения. Вопрос - как найти в этом золотую середину? Если на первый вопрос ответить "кидать исключение", то достойна ли ситуация "файл изначально не был заблокирован" отдельного класса исключения? А ситуация "ты пытаешься разблокировать файл, который был заблокирован другим процессом, и поскольку флаг forced не был передан - соси бибу"? А ещё какая-нибудь?
90 2756606
>>756551

>сли выполняется метод unlock над файлом, который и так не заблокирован?


Исключения нужно бросать туда, где они могут возникнуть. То что ты описываешь это баг, баги надо фиксить, а не ловить в рантайме и обрабатывать
91 2756800
>>756551
Есть мнение, что исключений лучше вообще избегать, т.к. они запутывают логику и стэк вызовов.
92 2756838
>>754578

>Можешь вверх вынести значения-константы.


Оно получает значение посреди кода, в реальной задаче это не константа.
Константы - да, вытащены наверх и помечены UPPER_CASE'ом.

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


Это я тоже в курсе, я не первый день пишу код а второй.

Вопрос в легитимности использования в обычной функции типа-глобальной переменной (abc), получающей значение где-то ещё (или не получающей). Эксперимент показывает, что переменная видится и доступна.
Мне с первого взгляда не понравились оба варианта. И 100500+ передач и использование в функции переменной, которая ХЗ, где получает значение.

>>754656

>В питоне (как и в любом языке программирования) есть области видимости


Это азы, спасибо.

>в случае питона у тебя их 4


А вот это интересно. Особенно потому, что VS-Code показывает ДВА слоя (пик). Видимо, это потому, что в питоне есть только функции `globals()` и `locals()` (ну, ещё `vars()`, но это детали).
То что переменная недоступна за пределами места, где она объявлена это просто и понятно. А вот такой случай... Был не очень понятен.
В целом по этому материалу стали лучше понятны некоторые детали. В частности делать так, как на пиках в целом - норма.

>А то, что тебе надо передавать что то на глубину в 5-6 вызовов, это проблема дизайна твоего кода, очевидно, эту хуйню надо переписать


А вот тут ты хуйню спизднул, конечно. Причём полную.
Расщепление кода на отдельные методы несёт две цели:
1. Дедупликапция и переиспользование кода. В частности чтобы не было кучи мест, в которых при случае нужно вносить исправления:
лучше ошибиться один раз и потом тысчу раз обратиться к этой ошибке, чем ошибиться в тысяче мест;
и, если надо обновить логику, доработать функционал и т.п., то не надо искать все вхождения такого кода.
2. Дробление методов, чтобы каждый из них был достаточно компактным и проще отлаживался.

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

Так что появление такого стека (максимум по коду 7 уровней, включая уровень модуля, т.е. 6 ретурнов до модуля) это уже результат оптимизации и рефакторинга. И это в модуле на 900+ LoC, то есть далеко не хэлоуворлд.

Собственно говоря, вопрос возник как раз в процессе рефакторинга, в частности сейчас я избавляюсь от глобальных переменных (оставляю только глобальные константы), избавился от присваивания им значение в функциях через `global`, возвращаю их в модуль ретурнами, обнаружил, что оно продолжило работать без проброса. Посмотрев примеры, прихожу к выводу, что так - норм (лишь бы имена не пересекались, вот это реально ПЛОХО).
92 2756838
>>754578

>Можешь вверх вынести значения-константы.


Оно получает значение посреди кода, в реальной задаче это не константа.
Константы - да, вытащены наверх и помечены UPPER_CASE'ом.

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


Это я тоже в курсе, я не первый день пишу код а второй.

Вопрос в легитимности использования в обычной функции типа-глобальной переменной (abc), получающей значение где-то ещё (или не получающей). Эксперимент показывает, что переменная видится и доступна.
Мне с первого взгляда не понравились оба варианта. И 100500+ передач и использование в функции переменной, которая ХЗ, где получает значение.

>>754656

>В питоне (как и в любом языке программирования) есть области видимости


Это азы, спасибо.

>в случае питона у тебя их 4


А вот это интересно. Особенно потому, что VS-Code показывает ДВА слоя (пик). Видимо, это потому, что в питоне есть только функции `globals()` и `locals()` (ну, ещё `vars()`, но это детали).
То что переменная недоступна за пределами места, где она объявлена это просто и понятно. А вот такой случай... Был не очень понятен.
В целом по этому материалу стали лучше понятны некоторые детали. В частности делать так, как на пиках в целом - норма.

>А то, что тебе надо передавать что то на глубину в 5-6 вызовов, это проблема дизайна твоего кода, очевидно, эту хуйню надо переписать


А вот тут ты хуйню спизднул, конечно. Причём полную.
Расщепление кода на отдельные методы несёт две цели:
1. Дедупликапция и переиспользование кода. В частности чтобы не было кучи мест, в которых при случае нужно вносить исправления:
лучше ошибиться один раз и потом тысчу раз обратиться к этой ошибке, чем ошибиться в тысяче мест;
и, если надо обновить логику, доработать функционал и т.п., то не надо искать все вхождения такого кода.
2. Дробление методов, чтобы каждый из них был достаточно компактным и проще отлаживался.

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

Так что появление такого стека (максимум по коду 7 уровней, включая уровень модуля, т.е. 6 ретурнов до модуля) это уже результат оптимизации и рефакторинга. И это в модуле на 900+ LoC, то есть далеко не хэлоуворлд.

Собственно говоря, вопрос возник как раз в процессе рефакторинга, в частности сейчас я избавляюсь от глобальных переменных (оставляю только глобальные константы), избавился от присваивания им значение в функциях через `global`, возвращаю их в модуль ретурнами, обнаружил, что оно продолжило работать без проброса. Посмотрев примеры, прихожу к выводу, что так - норм (лишь бы имена не пересекались, вот это реально ПЛОХО).
image.png2 Кб, 124x99
93 2756841
>>756838
Отклеилось.
94 2756950
>>754773

>Нет, совсем нет.


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

>Глобальные переменные принципиальное зло.


Аще не спорю.

>заведи какой-нибудь словать glob и в нём храни данные


А чем это вообще отличается от словаря globals(), если уж на то пошло?

>Скорее тебе нужно смотреть на классы и объекты


Не тот случай, пожалуй. На самом деле это довольно изолированный, пусть и большой скрипт, выполняющий одну конкретную понятную и нетрудную работу по валидации и сортировке данных. Он из категории "шоб работало" и из другого места его вызов просто не предусмотрен.
То есть обернуть всё в класс - вопрос небольшого времени и вообще совет понятен, я даже думал об этом, но решил, что нахуй-нахуй: я от этого не получу ВООБЩЕ ничего, кроме означенного места хранения некоторых переменных. Ни наследования, ни полиморфизма, ни инкапсуляции. Даже двух объектов этого класса никогда не появится просто по дизайну.
95 2756986
>>756551
Сложно вообще понять чего ты пытаешься достичь.
Похоже на то, что у тебя так программа и работает, что вызываются методы объекта, которые ничего с ним не делают, это твое "снятие блокировки". Это не исключение, это изъян в логике программы либо просто рядовое условие, называй как хочешь. if super_blokirovka: pook else srenk.
96 2757076
>>756986
Э, нет. В начале работы проверяется, заблокирован ли файл (технически - есть ли файл data.bin.locked, который является признаком того, что data.bin заблокирован).
Если он заблокирован, то N раз ждём и проверяем заблокированность ещё раз, спустя какое-то время пукаем и обмякаем, заявив, что файл заблокирован и разблокироваться не собирается, видимо.
Если он не заблокирован, то блокируем (создаём data.bin.locked) и начинаем работу. В конце работы обратно разблокируем (удаляем data.bin.locked).
97 2757128
>>756449

>Ознакамливаюсь тут с вашим питоном, одна математика.


Потому что у тебя одни математические задачи, очевидно же
98 2757215
>>756800

>Есть мнение, что исключений лучше вообще избегать, т.к. они запутывают логику и стэк вызовов


Нет такого мнения. Ты тредом ошибся, уходи отсюда вот сюда: >>2740805 (OP)
99 2757221
>>756950

>А чем это вообще отличается от словаря globals(), если уж на то пошло?


Документированностью, возможностью контроля. Всё-таки globals() это одна общая куча без возможности контроля.

Когда ты делаешь свой glob, ты уже видишь, где это используется, при желании ты можешь дополнительные инструменты реализовать, вместо обычного словаря чтобы это был объект, с возможностью контролировать, кто в него пишет и т.п.
100 2757230
>>756838

>Расщепление кода на отдельные методы несёт две цели:


Путаешь теплое с мягким
101 2757333
Скачал ворованый курс по питону, там какой-то чвякающий хуесос. Пытался по нему заниматься, но вот просто невероятно противно гундосит в микрофон, плюс ошибки в слайдах, плюс шизофреническая непоследовательность в темах. А ведь люди за это деньги платят.
Открыл книжку и сразу пошло-поехало нормально. Только чет сегодня охуел с упражнения. Оказывается для того, чтобы его сделать надо следующую главу прочитать было, но все равно насколько же книга превосходит какие-то слитые курсы.
102 2757336
>>757221

>Документированностью, возможностью контроля.


Хм-м. Какой-то смысл в этом есть, НО. Всё-равно получается что у тебя глобальная переменная, при чём особый смак, что опять же ты ГДЕ-ТО пишешь в глобальную переменую. Вроде и более понятно, что это именно она, но её заполнение всё-равно будет где-то реализовано и, если ты успешно избавился от "redefining name from outer scope", то разницы считай нет, это ровно такая же запись в глобальную переменную. Только ещё вычурнее потому что для изменения в функции глобальной переменной со строкой тебе нужно в функции явно сделать global. А добавлять в dict новые записи можно без него и теперь вместо "а где у меня появляется эта переменная?" нужно думать "а где у меня в этот дикт добавляется такое поле?" и не факт, что это удобнее. Тогда уж лучше бессмысленные классы.

>>757230
Чувак. Вот представь. У тебя есть портянка. Если весь код вытянуть в линию, то это будут тысячи строк. Ты берешь и чикаешь его и у тебя 50 000 строк превращаются в 7000 строк с функциями и глубиной в 2 уровня. А потом берёшь и чикаешь ещё, в итоге у тебя три уровня и 2 500 строк и 3 уровня, потом повторяешь ещё, видишь, что тебе сложно охватить целый метод и преврящаешь метод на 200 строк в три метода на 50 строк плюс россыпь вспомогательных, совсем уже по 3-10 строк (и ОПА, у тебя уже 5 уровней). Зато в другом месте ты делаешь универсальный метод и вместо 4 одинаковых методов ты получаешь один даже чуть-чуть поменьше и четыре чекера, передаваемых аргументами. А где-то на самом конце стека будет вообще двухстрочная фитюлина, хитро склеивающая строки с джойном и форматом, но вызываемая постоянно из самых разных мест. В итоге ты получаешь стек длинной до десятка ретурнов на ровном месте, зато поддержка кода не требует вообще никаких усилий потому что всегда можно легко и быстро понять, какой маленький кусочек кода что делает и поменять именно его. При этом сам код модуля у меня, например, 40 строк с комментариями.
Разделение кода на несколько функций приводит к тому, что у тебя увеличивается количество вызовов этих функций из разных мест. Неизбежно.

Даже большие системы теперь делают по схожему модульному принципу: компактные контейнеры плюс кубер, который ими погоняет и организует связи.
102 2757336
>>757221

>Документированностью, возможностью контроля.


Хм-м. Какой-то смысл в этом есть, НО. Всё-равно получается что у тебя глобальная переменная, при чём особый смак, что опять же ты ГДЕ-ТО пишешь в глобальную переменую. Вроде и более понятно, что это именно она, но её заполнение всё-равно будет где-то реализовано и, если ты успешно избавился от "redefining name from outer scope", то разницы считай нет, это ровно такая же запись в глобальную переменную. Только ещё вычурнее потому что для изменения в функции глобальной переменной со строкой тебе нужно в функции явно сделать global. А добавлять в dict новые записи можно без него и теперь вместо "а где у меня появляется эта переменная?" нужно думать "а где у меня в этот дикт добавляется такое поле?" и не факт, что это удобнее. Тогда уж лучше бессмысленные классы.

>>757230
Чувак. Вот представь. У тебя есть портянка. Если весь код вытянуть в линию, то это будут тысячи строк. Ты берешь и чикаешь его и у тебя 50 000 строк превращаются в 7000 строк с функциями и глубиной в 2 уровня. А потом берёшь и чикаешь ещё, в итоге у тебя три уровня и 2 500 строк и 3 уровня, потом повторяешь ещё, видишь, что тебе сложно охватить целый метод и преврящаешь метод на 200 строк в три метода на 50 строк плюс россыпь вспомогательных, совсем уже по 3-10 строк (и ОПА, у тебя уже 5 уровней). Зато в другом месте ты делаешь универсальный метод и вместо 4 одинаковых методов ты получаешь один даже чуть-чуть поменьше и четыре чекера, передаваемых аргументами. А где-то на самом конце стека будет вообще двухстрочная фитюлина, хитро склеивающая строки с джойном и форматом, но вызываемая постоянно из самых разных мест. В итоге ты получаешь стек длинной до десятка ретурнов на ровном месте, зато поддержка кода не требует вообще никаких усилий потому что всегда можно легко и быстро понять, какой маленький кусочек кода что делает и поменять именно его. При этом сам код модуля у меня, например, 40 строк с комментариями.
Разделение кода на несколько функций приводит к тому, что у тебя увеличивается количество вызовов этих функций из разных мест. Неизбежно.

Даже большие системы теперь делают по схожему модульному принципу: компактные контейнеры плюс кубер, который ими погоняет и организует связи.
103 2757350
>>757336
Классы лучше

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

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

на практике вот когда это встречается, это когда у тебя глобальный конфиг, из которого берутся параметры

Что ещё возможно: ты можешь при необходимости свой словарь подменять на какой-нибудь другой объект, без переписывания кода. Этот объект может геттеры-сеттеры реализовывать, мы можешь отследить, кто какую переменную меняет (и откуда), настроить логирование и т.п. Конечно это больше гипотетически, вряд ли кто так часто делает.
104 2757360
>>757333
Добавлю еще ложку говна в курсы. Проявляется вообще очень важная проблема характерная для плохих преподавателей. Преподаватель ассоциирует ученика с собой. Он реально считает, что раз он (преподаватель) что-то знает, то знает и ученик и объясняет исходя из этого. А в книге исходят из того, что ты ничего не знаешь, ты вообще инопланетянин с планеты жопа, тебе сразу говорят, что ты конечно ничего не понимаешь, но тебя можно научить и учат.
105 2757370
>>757333

>какой-то чвякающий хуесос


Хуёво.
Но вообще курсы курсам рознь. И самое главное в них - не видосики, а поддержка: есть, к кому обратиться за пояснением, если нихуя не понял.
Так-то и без этого есть на ютапчике куча приличных плейлистов. Я, например, по одному такому джангу изучал, годно вышло.
Книги, кстати, тоже бывают разные.
По коду:
в целом неплохо и соответствует ТЗ, насколько я могу судить, не запуская, а это главное (мне, правда, показалось, что там должен быть int(), а не float(), но это толком не оговорено, а значит так можно). Но кое-что стоит поправить.
1. Нейминг. У меня от "chisla" глаза закровоточили. Даже "числа" смотрится лучше, но они оба хуже, чем "numbers".
2. Объявление переменной через вызов list()... Вроде, и норм, но как-то больше принято использовать литералы. Я сам предпочитаю typig + literal, то есть я бы сделал "numbers: list = []"
3. "if inp == 'done': break" лучше всё-таки разделить на две строки. Это не очень критично, но всё-таки улучшит читаемость.
4. Принты лучше сгруппировать после всех расчётов, чтобы ты сначала считал, потом выводил.
4.1. Я бы обошёлся одним принтом.
4.2. Добавить пробел внутри кавычек - стронгли рекомендед!
5. Пожалуй, самое главное: у тебя два вызова "sum(chisla)", то есть ты дважды проходишь по списку чисел и делаешь математику, хотя сумму ты сохранил и можешь использовать её ещё раз. Просто представь, что пользователь ввёл миллиард чисел, в этом случае ты сначала считаешь сумму миллиарда чисел, а потом... ещё раз её считаешь, чтобы разделить её на миллиард. МОжно же обойтись.
6. Добро пожаловать в 2023-й год, в наше благословенное время в питоне есть f-строки, категорически рекомендую применять именно их потому что так быстрее. Пруфы: https://habr.com/ru/articles/462179/ , бонус: https://habr.com/ru/companies/wunderfund/articles/674866/
106 2757379
>>757360
Это не проблема курсов, а проблема издателей. Любой даун может переварить и высрать в своем изложении ту же книгу или даже доку на ютубчик или какой-то удеми, чтобы заработать денег (принеся деньги и платформе, так что им это в любом случае выгодно).
Книжному издателю нужен вменяемый автор (которому надо заплатить), всякий там QC, подготовка-оформление, иногда ещё и печать (лул). Так что говно делать невыгодно и можно попасть на деньги.
Переводить говнокниги тоже смысла мало, тем более на нищерынке вроде постовка, так что берут самые ходовые оригиналы.
Вот так и получается.
107 2757380
>>757370
ИМХО критичнее то, что нет проверки на пустой список
Если пользователь сразу введёт done, то будет исключение от деления на ноль. Лучше сразу привыкать думать о подобных случаях
108 2757381
>>757379
про учебные книги, одно из самых лучших пособий - прямо в официально документации на питон
https://docs.python.org/3/tutorial/introduction.html

где-то был перевод на русский документации, среднего качества
109 2757383
>>757370
Да там числа хуисла не нужны, считаешь сумму и количество отдельно.
110 2757385
>>757370
Сохраню твой пост и поковыряю на выходных. А вообще это считай все же первые шаги в питоне, но мне нравится. Я не форсирую изучение, сразу по несколько тем за день не делаю хотя соблазн есть. Не хочу кашу информационную в голове, хочу все по полочкам.
Очень приятное ощущение, кстати, когда пишешь, не получается, что-то, а потом раз и заработало. Этакая мозговая щекотка.
111 2757444
>>757336

>Чувак. Вот представь. У тебя есть портянка. Если весь код вытянуть в линию, то это будут тысячи строк


Еще раз, ты путаешь теплое с мягким. ПРи чем тут калбекхел и расложения кода на классы\методы?
112 2757472
>>757380
Кстати, да. Не подумал.
>>757383
А вот это предполагал, но это неочевидно, так что от новичка я такого не жду.
>>757381
Я лично учился по вот этому:
https://pythonworld.ru/samouchitel-python
Годно и на русском. Но хорошо бы что-то уметь заранее. Иначе - Лутц - маст хэв. У него целый океан воды, зато если читатель воспримет 10% материала - этого уже будет достаточно.
113 2757473
>>757444

> Еще раз, ты путаешь теплое с мягким


Вот ты сейчас либо объясняешь, что хочешь сказать подробно, либо идёшь нахуй. Договорились.
114 2757476
>>757473

>Вот ты сейчас либо объясняешь


Сам поймешь, когда найдешь работу с хорошим архитектором и поработаешь там пару лет.
115 2757481
>>757476

> Сам поймешь


Блядь. И ради этого жидкого слива я распинался...
116 2757488
>>754777
Ниче не тормозит. Видимо у тебя проблемы.
117 2757492
>>757076
Вижу у тебя какая-то совсем калечная логика. В любом случае это не исключение, это просто условие.
118 2757515
>>757481
Вот именно, у тебя нет не опыта, не знаний, но ты распинаешься как будто ты рич хикки как минимум. Будь скромнее.
image.png146 Кб, 938x1040
119 2757534
>>753477
Знал бы ты питон, то догадывался что всё неявное подведение из него выпиливается.
120 2757582
>>757481
Ты шизу какую-то написал с вытягиванием кода в линию и т.п. Вообще не понятно, о чём.

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

Причём ты сам же это описывает в своём примере, где ты хочешь глобальные переменные использовать, типа сложно проносить данные вглубь и т.п. Как раз иллюстрация одной из проблем.
121 2757597
>>757582
Чувак, ты всерьез споришь с чсв вкатывальщиком без опыта? Он прогает пару недель, но уже готовиться писать свои книги по питону и давать платные курсы. Забей.
122 2757873
В одном легаси проекте мне надоела портянка ручных джойнов данных из кучи разных источников.
Хочу написать мини либу, в котором можно описать "таблицы" (условно датакласс который имеет разные id по которым его можно получать)
Создать связи между ними(просто набор ребер соединяющие таблицы по id). Дальше иметь возможность выбрать какое-то подмножество полей этих таблиц и эффективно получать эти данные и формировать результат содержащий таблицу со строками из всех запрошенных полей.

Собственно написать не сложно, но любопытно мб есть хорошее готовое решение, кажется что подобное нужно много кому
123 2757879
>>757582

>Ты шизу какую-то написал


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

>Код с глубокой вложенностью тяжело поддерживать.


Код без вложенности поддерживать сложнее. А когда абстрагируешься от реализации вложенной функции и принимаешь её как данность (ты же не лезешь, например, в код функции print(), ты просто принимаешь, что она работает), то всё становится хорошо.

> сложно проносить данные вглубь


Если бы текущая задача не была самостоятельным куском в себе, я бы переписал на классы, благо это реально на уровне "добавить 2 строки, поправить отступы, проставить перед переменными, использующимися за пределами функции 'self.'", я такое уже делал, но тогда от этого была практическая польза: было несколько объектов и потенциальный импорт модуля.
>>757597

>уже готовиться писать свои книги по питону и давать платные курсы


В отличии от тебя - нет. Я вообще не называю себя этим грязным словом "программист". Я - практик, который время от времени пишет разный код. Рабочий код, ЧСХ. И никто на сложность поддержки не жаловался.
124 2757885
>>757873

>мб есть хорошее готовое решение


М-м-м... Postgres, например?
125 2757908
>>757885
Разные источники (хранилище в терабайты, всякие api, постгрес), чел бля.
126 2757917
>>757908

>Разные источники (хранилище в терабайты, всякие api, постгрес), чел бля.


Сразу бы так и писал.
Тогда GreenPlum. Удели особое внимание PXF.
127 2757930
>>757917
Мне точно не хочется тратить время и менять то как весь этот мусор хранится.
Опишу ещё раз
Есть процесс
1. В запросе shit_keys = [key1...keyn]

2. shits = fetch_shits(shit_keys)
shit_items = fetch_shit_items(shits)
...
Очень длинная хуевая цепочка где могут быть shit_shit_shit_items(..)

После весь этот мусор надо объединить.

Я вижу лёгкий способ сделать все это по человечески собственно в начальном посте я это описал
128 2757956
>>757879

>Просто довёл до абсурда. Шизу написал чувак, который говорит, что код углублять нельзя и "функция" + ", в коде которой есть вызов функции" * x не имеет права на существование. Он как раз предпочёл бы плоский код без вызовов, видимо.


Ты это сам придумал, и выдал за мои слова.
Я сказал, что ты не знаком с азами дизайна, и из твоих постов очевидно, что ты зеленый нуб, но ты на серьезных щщах пытаешься делать вид, что ты неебаться хакер. Со стороны это выглядит, как будто ребенок пытается объяснить взрослому как заполнить налоговую декларацию. Выглядит глупо. Успойся.
129 2757965
>>757879

>Я - практик, который время от времени пишет разный код


>Не знает про скоупы


>ДУмает что ооп это про классы


>Не знает азов дизайна


Нет дядя, ты - дурак
130 2757967
>>757930
Выглядит так, будто тебе реально нужен OLAP, собирающий разнородные данные, сейчас всяких DWH-решений уйма потому что любой бизнес старается анализировать всё вокруг.
Одно из решений Greenplum - он через PXF'ы цепляется ко всем возможным источникам (для невозможных придётся написать драйвер) и предлагает лютую мощь по выплёвыванию аналитики.
Можешь кликхаус покурить ещё, там тоже было что-то подобное. Даже писать ничего не надо.
131 2758096
>>757879

>грязным словом "программист". Я - практик


Господин программист, можно посмотреть на ваш код. Дайте пожалуйса ссылочку на ваш репозиторий.
132 2758705
>>757879

>грязным словом "программист"


Сразу запахло трёхнедельной мотнёй и шуточками про рваную анальную дырку.
133 2758821
>>757492
Что в ней калечного?
image1008 Кб, 900x1280
134 2759020
>>756449

>Все ЯП такие?


Нет, конечно же. Рекомендую присмотреться к линейке С*.

>>756449

>Он для чего то подходит кроме создания калькуляторов и разных статистических расчётов?


Это язык для ковыряние в статистике и аналитике при помощи т.н. «ноутбуков» (типа Юпитера). Самое оно сидеть и вертеть табличку с какими-нибудь данными, которые тебе мнс высрал за месяцы, пытаясь натянуть выхлопа на публикацию в научжурнале.
135 2759023
>>756551
Друзья-милорды на Петоне быстренько накидывают прототип проекта, чтобы посмотреть, чо как, а потом переписывают на нормальном языке по всей науке.
136 2759259
>>759023
Друзья-милорды на Петоне быстренько накидывают прототип проекта, чтобы посмотреть, чо как, а потом переписывают на JavaScript.
137 2759508
Получаю лист вот такого вида
[{'name': 'test1', 'price': '123', 'number': '321'}, {'name': 'test2', 'price': '456', 'number': '789'}, ..., ]
Как с таким листом работать? Мне нужно из этого листа сформировать новый лист со всеми значениями "price", как это сделать?
Во всех гайдах по листам в списках просто перечисление элементов. Или это словарь? Но type() возвращает list
138 2759522
>>759508
Ааа, это же список словарей, все, я понял.
139 2759579
>>759508
Легче лёгкого.
140 2759813
>>759508
Синьор тимлид в треде. Вот твой код, не благодари.

lst = [{'name': 'test1', 'price': '123', 'number': '321'}, {'name': 'test2', 'price': '456', 'number': '789'}, ]
global price_list
price_list = []
for e, index in enumerate(reversed(lst)):
if index in list(lst) and type(e):
for index2 in index:
if index2 == 'price':
price_list.extend([lst[e][index2]])
print(price_list)
141 2759818
>>759813
Бля отступы проебал. Заработался просто зарабатывая 300кк в наносекунду, бывает.

Вот с ними.
https://www.online-python.com/3nHlwBZtOL
142 2759823
>>759818
Да що ты будешь делать. Опять отступы украли. Ну ничего я не гордый.

lst = [{'name': 'test1', 'price': '123', 'number': '321'}, {'name': 'test2', 'price': '456', 'number': '789'}, ]
global price_list
price_list = []
for e, index in enumerate(reversed(lst)):
....if index in list(lst) and type(e):
........for index2 in index:
............if index2 == 'price':
................price_list.extend([lst[e][index2]])
print(price_list)
143 2759828
>>759813
Василий, не хотите ли стать кодером всемирной закулисы, ваш код это что-то невероятное.
144 2759835
>>759828
Рассмотрю ваш оферт в порядке очереди. Много вас таких, а я один. Высылайте на xi0+xxsuperproffesonalprogrammerxxxANUSma@XTilPUNCTUMr.VSu
145 2760036
>>759835
Гугл по поиску мыла выдаёт только резюме какого-то админа в гейборделе. Ето ти?
146 2760057
>>760036
Да я там баристой работал до того как вкатился в айти и стал успешным тимлидрм.
147 2760087
>>760057
Все баристы пидоры.
148 2760125
>>759508
prices = map(lambda x: x['price'], list_name)
149 2760128
>>759823
И вот такие люди потом говорят, что питон говно.
1688929571286.jpg47 Кб, 637x475
150 2760254
>>760128
правда глаза режет
151 2760298
>>760128
...и оказываются правы.
152 2760319
>>760298
>>760254
Представьте мир, если бы джависты тратили время на рефакторинг своего легаси говна, вместо того, что бы срать в питон тредах...
153 2760347
>>760319
Чел, анон тимлид, ему лучше знать про питон.
154 2760379
Питон охуенный язык, а те, кто на него выебывается, в основном просто знают его крайне поверхностно.
155 2760393
Продолжаю учить.
156 2760394
Петюня, что посоветуешь для динамического автодополнения аргументов для пинонячего скрипта из под беша?

Короче, написал программку, использую argparse чтобы принимать аргументы на входе. Один из аргументов это имена png картинок из одной определённой папки (количество может менятся от старта к старту). Хочу чтоб работало автодополнение из беша. Как решается?
157 2760397
>>760319
У джавистов нет своего времени чтобы его тратить.
Все время принадлежит кабанчику.
158 2760488
>>760394
Оно так и работает. Баш экспандит ДО передачи, если ты хочешь чтобы твоя хуйня обрабатывала такие маски, то так и надо делать.
159 2760493
привет
160 2760497
>>760394

>Хочу чтоб работало автодополнение из беша.


Ставишь fzf просто поверх баша, потом Ctrl+T жмешь когда файл нужный надо найти.
В винде еще можно поставить поверх павершелла.
Даже если я не по теме ответил, fzf -- охуенная штука, всем рикамендую.
161 2760507
Господа петухонщики, вы как там, нормально у вас всё?

Качал тут на днях дипфейк тулзы (для гачи мемов), устанавливал все, настраивал. Крашнулась сборка из-за отсутствия Build Tools 2022. Ну ничё такого, установил, начал весь процесс по новой.

И ТУТ Я ПРОСТО ОХУЕЛ. Этот ваш PIP конченный уже скачанные пакеты валидирует и достает из кеша просто ЕБУЧУЮ ВЕЧНОСТЬ. Процесс, который в теории должен проходить за 10 секунд, длится минут 10, еще при этом периодически нагружая на фулл не самый слабый проц.

Более того, обратил внимание, что разные версии пакетов не встают на разных минорных версиях петухончика. Причем происходит это без каких-либо адекватных сообщений. Блядь, пришлось еще даунгрейдится с 3.11 на 3.10, чтобы всё завелось.
162 2760508
>>760393
А че не в юпитере делаешь? Удобнее же. В вскод еще и интерактивный режим есть, когда можно работать с тетрадкой как с текстовым файлом.
https://www.youtube.com/watch?v=lwN4-W1WR84
изображение.png119 Кб, 1920x1039
163 2760514
>>760508

>А че не в юпитере делаешь?


Что это?

>В вскод


А я как раз в нем и работаю.
164 2760519
>>760508
Хуй знает, по-моему все эти ноутбуки только дата-дебилам удобнее.
165 2760536
>>760507
И чё?
166 2760573
>>760507

>Этот ваш PIP конченный уже скачанные пакеты валидирует и достает из кеша просто ЕБУЧУЮ ВЕЧНОСТЬ


Проблема на твоей стороне

>Более того, обратил внимание, что разные версии пакетов не встают на разных минорных версиях петухончика.


А схуяли должны?

>Причем происходит это без каких-либо адекватных сообщений.


Там буквально написано, что не встало и почему

Вывод - ты ебанько
167 2760675
>>759823
А нахуя тебе сторой цикл, если ты можешь сразу сделать index.get("price", 0)?
168 2760696
>>760393
Можно быстрее, в одну строку:

> float(str[str.find(':')+1:])


Чтобы её прочитать быстро нужен навык, зато кода сильно меньше и не забиваешь голову промежуточными переменными и их неймингом.
Опять же нейминг:
"number"? Число то бишь? Что за число? Что оно значит?
Получил ты не абстрактное число, а позицию, на которой находится искомый символ.
"end_number"? Конечное число? Число конца? Порнография какая-то пошла в общем. Неочевидные названия - зло, если они используются не в двух строках подряд, но и там вопрос, нужно ли оно тебе.
169 2760783
>>760696

>нейминг


Ты бы как назвал?
170 2760892
>>760783
Как бы я решил задачу я уже написал. Полный вариант типа такого (пишу код прямо в форме ответа, без проверки):

> import sys


> str = "abracadabra:0.123"


> try:


> ....number = float(str[str.find(':')+1:])


> except ValueError:


> ....print(f"После двоеточия не float, а {str[str.find(':')+1:]}", file=sys.stderr)


> ....sys.exit(1)


Тут как бы в переменной number уже есть целевое число, дальше можно с ним делать, что хочешь.

Но если прямо нужно сохранить промежуточный параметр, то это позиция, на которой находится двоеточие, то есть что-то типа "colon_position".

В рамках задачи у тебя просто число (поэтому в коде выше оно названо "number"), но если подумать, то, судя по формату, тут это значение некоего параметра "abracadabra", так что впоследствии его будет удобно использовать в духе "abracadabra_value".

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

КСТАТИ. Важный момент. Упустил. Тебе же ещё ТОГДА: >>757333
рассказали про try-except. Почему ты их не использовал? Тебе эта строка могла прийти откуда угодно: пользователь ввёл руками, прочитал из файла и т.п. Почему ты не предположил, что входной параметр может быть некачественным?.. Он ведь может и к этому нужно быть готовым.

И ещё про ТОТ случай: хорошим тоном является указывать, какую ошибку ты ловишь в эксцепте. Например, тут - "except ValueError:". Это нужно в частности потому, что можно обрабатывать разные эксцепшны в этом куске кода и конструкция может быть такой: try - except - except - except - else - finally.
171 2761086
>>760508
Как интересно...
Я спрашивал, как правильно подставлять окончания слов в зависимости от количества и не получил ответа (вернее мне сказали, что я делаю это неправильно, но как правильно - не сказали, это тут вообще платина), а на той неделе всплыл строковый метод `format`, которым я теперь пользуюсь с большим удобством.
Ранее я спрашивал, как удобно запускать скрипты во внешней консоли и не получил никакого ответа, а сегодня вижу ЭТО.
Ну, пожалуй, для случаев с МНОГАТЕКСТА "console": "externalTerminal" по-прежнему удобнее, но и в таком подходе, как в видосике немало профита. Одно бесит: то, что он называет штатным функционалом работу плагина и при этом неочевидно, какого.
Для ЛЛ - плагин вот этот:
https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter
В пипе ставится (vs поставит сам) ipykernel (плюс он по зависимостям тянет ещё 29 модулей), так что лучше сделать venv.

>>760514
Если ты полный анальный раб винды, советую перейти на WSL (это не требует почти ничего), если нет - на Ubuntu. На линуксах просто не всплывает большое количество "особенностей", которые на виндах заёбывает решать.
172 2761491
menu_level = 1

1. Ебу мамку ОПа
а. Сильно функция f_1a()
б. Слабофункция f_1b()
в. Не стоит совсемфункция f_1v()
q. Выход из режима трахафункция f_1q()

2. ёбу батьку на спине мамки
а. аж возбудилсяфункция f_2a()
б. Слабо, не кончилфункция f_2b()
в. Не стоит писяфункция f_2v()
q. Выход из режима трахафункция f_2q()

inp = input("комманда?").strip().lower()

Как можно реализовать такой трах? В консоли, на чистом пистоне.
173 2761497
menu_level = 1

1. Ебу мамку ОПа
а. Сильно функция f_1a()
б. Слабофункция f_1b()
в. Не стоит совсемфункция f_1v()
q. Выход из режима трахафункция f_1q()

2. ёбу батьку на спине мамки
а. аж возбудилсяфункция f_2a()
б. Слабо, не кончилфункция f_2b()
в. Не стоит писяфункция f_2v()
q. Выход из режима трахафункция f_2q()

inp = input("комманда?").strip().lower()

Как можно реализовать такой трах? В консоли, на чистом пистоне.
174 2761528
>>760519
Я тоже так думал пока сам не стал дата-дебилом
Даже если не использовать активно Юпитер в разработке (типа накидал код сниппетов - обернул их в функции - скопипастил в модули), быстро проверить как работает какая-нибудь фича языка или либы бывает полезно. А в обычном REPL это делать не очень удобно.
>>760514
Ну посмотри видос то, лучше один раз увидеть.
>>761086

>для случаев с МНОГАТЕКСТА "console": "externalTerminal" по-прежнему удобнее


Я просто пайпом в файл скидываю обычно.
175 2761530
>>761528

>Я просто пайпом


Не который pip, а юниксовые трубы
https://en.wikipedia.org/wiki/Pipeline_(Unix)
176 2761595
177 2761612
>>761528

>дата-дебилом


А чем именно занимаешься, если не секрет?
178 2761628
179 2761676
>>761612
дибил, не видно что это препод ???
180 2761691

>Иногда скучающие или желающие немного повеселиться


программисты добавляют в свои программы безобидные «пасхальные яйца» (Easter Egg).
181 2761700
>>761691
А вы, двачеры, сколько пасхальных яиц положили в свои программы?
182 2761800
>>761528

>Я просто пайпом в файл скидываю обычно.


Если интерактив, пожавлуй, не слишком удобно. Как минимум на этапе отладки взаимодействия: нужно видеть что было раньше и иметь возможность стопнуть и посмотреть, что в переменных.
183 2761857
Подскажите, туплю - как убрать, а не округлить, определенное число символов после запятой?
То есть из 0.45678 получить 0.456, а не 0.457.
184 2761867
>>761691
Интересно, а шебаги там не показывали?.. Ну, похуй тащемта, это приятная мелочь.

М-м. А ты вообще тестировал свой скрипт?.. Хорошо тестировал?..

В принте пасхалки ты выводишь не ту строку, которую предлагают выводить в примере. Исправь. Это делается легко, есть два способа, по-хорошему найди их оба.
Файл открывается без параметров (кодировка, чтение/запись/етц).
Файл не закрывается! Это плохо.
Вообще рекомендую работать с файлами по возможности через `with`. Намного удобнее.
`continue` лучше вынести на отдельные строки. Хотя есть способ ещё лучше:

> if line.startswith("blah-blah-blah-param"):


И не надо ни сплитить неустраивающие тебя строки, ни ещё чего.
Код можно сделать чище:

> count += 1


> sum += ratio


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

Теперь вернёмся к вопросу про тестирование. А что будет, если в файле нет НИ ОДНОЙ подходящей строки? Если вычисление `average` будет как сейчас, то на последней строке ты упадёшь с `NameError: name 'average' is not defined`. Если вынесешь его расчёт за цикл - упадёшь с ошибкой `ZeroDivisionError: division by zero`. Можно, конечно, сначала (перед циклом) объявить его, скажем, тоже равным нулю, но правильнее сделать так: цикл проходит, потом проверить (не траем, а ифом), не равен ли каунт нулю и в зависимости от этого выдать либо одни сообщения, либо другие.

И ещё. Рекомендую завести полезную привычку: поставь себе flake8 (для него тоже есть плагины, покури тему сам) и pylint и добавь в VS соответсвующие плагины:
https://marketplace.visualstudio.com/items?itemName=ms-python.flake8
https://marketplace.visualstudio.com/items?itemName=ms-python.pylint
После этого на вкладке "problems" появятся вещи, которые линтеры считают неправильными, постарайся каждый раз избавиться ото всех них. Линтеры (т.е. статические анализаторы кода, программы, которые оценивают твой код и находят потенциально проблемные места) писали опытные люди и

Ещё почитай это:
https://habr.com/ru/companies/timeweb/articles/542286/
В том числе каменты, там, например, говорят про полезный
https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance
184 2761867
>>761691
Интересно, а шебаги там не показывали?.. Ну, похуй тащемта, это приятная мелочь.

М-м. А ты вообще тестировал свой скрипт?.. Хорошо тестировал?..

В принте пасхалки ты выводишь не ту строку, которую предлагают выводить в примере. Исправь. Это делается легко, есть два способа, по-хорошему найди их оба.
Файл открывается без параметров (кодировка, чтение/запись/етц).
Файл не закрывается! Это плохо.
Вообще рекомендую работать с файлами по возможности через `with`. Намного удобнее.
`continue` лучше вынести на отдельные строки. Хотя есть способ ещё лучше:

> if line.startswith("blah-blah-blah-param"):


И не надо ни сплитить неустраивающие тебя строки, ни ещё чего.
Код можно сделать чище:

> count += 1


> sum += ratio


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

Теперь вернёмся к вопросу про тестирование. А что будет, если в файле нет НИ ОДНОЙ подходящей строки? Если вычисление `average` будет как сейчас, то на последней строке ты упадёшь с `NameError: name 'average' is not defined`. Если вынесешь его расчёт за цикл - упадёшь с ошибкой `ZeroDivisionError: division by zero`. Можно, конечно, сначала (перед циклом) объявить его, скажем, тоже равным нулю, но правильнее сделать так: цикл проходит, потом проверить (не траем, а ифом), не равен ли каунт нулю и в зависимости от этого выдать либо одни сообщения, либо другие.

И ещё. Рекомендую завести полезную привычку: поставь себе flake8 (для него тоже есть плагины, покури тему сам) и pylint и добавь в VS соответсвующие плагины:
https://marketplace.visualstudio.com/items?itemName=ms-python.flake8
https://marketplace.visualstudio.com/items?itemName=ms-python.pylint
После этого на вкладке "problems" появятся вещи, которые линтеры считают неправильными, постарайся каждый раз избавиться ото всех них. Линтеры (т.е. статические анализаторы кода, программы, которые оценивают твой код и находят потенциально проблемные места) писали опытные люди и

Ещё почитай это:
https://habr.com/ru/companies/timeweb/articles/542286/
В том числе каменты, там, например, говорят про полезный
https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance
185 2761873
>>761857
Сходу костыль (скорее всего, внутри оно всё будет так же):

> def round_down(number, ndigits=0):


> ....return int(number * 10 ndigits)/10 ndigits

186 2761876
>>761873
Блджад. Звёздочки. Фикс:

> def round_down(number, ndigits=0):


> ....return int(number ✱ 10 ✱✱ ndigits)/10 ✱✱ ndigits

187 2761885
>>761867

>В принте пасхалки ты выводишь не ту строку, которую предлагают выводить в примере.


Кажись понял, надо repr() добавить?
188 2761886
>>761876
Оно, спасибо.
189 2761890
>>761886
А ещё есть целая либа decimal. Там этих округлений... 8(!) режимов:
https://docs.python.org/3/library/decimal.html#rounding-modes
190 2761910
>>761885
Пробуй. На самом деле есть два очень-очень простых варианта, и ХЗ, сколько менее простых. Я итак дал пару готовых советов по коду, попробуй с этим разобраться сам.

>>761867

>шебаги


Опечатка. Должно быть "шебанги".
image.png37 Кб, 1003x335
191 2761923
>>761857
Если используешь Decimal, то есть встроенные возможности.
192 2761924
>>761910
У меня есть вторая версия этой программы, но она ублюдская и мне не нравится. Прям вот отвращение вызывает. Там как раз через if делал, но, повторюсь, мерзотно. Даже я, совсем не разбирающийся в питоне понимаю, что получился какой-то франкенштейн, та версия которую показал получилась лучше.
За советы спасибо, поковыряюсь.
193 2761956
кто знает, где можно достать бесплатные API русскоязычных новостных сайтов?
194 2762018
>>761956
На этих сайтах. Тебя конкретные интересуют?
195 2762026
>>762018
true story интересует
196 2762079
>>762026
Ни одно СМИ в мире ни разу в истории не опубликовало ни одной true story. Если не считать научных журналов, но и там мягко говоря не всё истина.
197 2762093
>>762079
Я имею в виду сайт thetruestory.news
198 2762194
>>760675
Нюфаня плз. Если не знаешь весь подкпот пайтона то хоть не позорься, всё что там написано сделано с определенной целью - понимание приходит только с долгим опытом разработки.
199 2762207
>>761956
Ходишь по "русскоязычных новостных сайтов" и смотришь, есть ли у них "бесплатные API".

У яндекса наверняка есть апи раздающее новости, у любых остальных ресурсов скорее всего нет просто никому это не нужно, а кому нужно просто парсер себе сделает.
200 2762255
>>762194

> подкпот


> пок-пок-пок


> похуй на O(n^2) вместо O(n).

201 2762257
>>762093
Не открывается. Но вроде у него есть как минимум RSS. Как и у большинства изданий.
202 2762269
Помогите с openpyxl.
Хотел сделать в файле экселя границы ячеек.
Подключил
from openpyxl.styles import Side, Border
Сделал границы
Thin_border_top = Border(top=Side(style='thin'))
Применяю эти границы к ячейке
sheet.cell(row=1, column=3, value=1).border = Thin_border_top
и не работает. Не делает в ячейке границу.
Я даже пробовал полностью копировать примеры из инета, тоже не работает.
Запись всякого в ячейки работает, шрифты работают.
203 2762415
>>761612
МЛ в медицине
204 2762421
>>761528
А еще есть такая фишка.
Разделить код скрипта на две клетки, в одном импорты и всякая инициализация, а в другом основной код. И если нужно отладить, то первая клетка запускается один раз, а дальше отлаживается чисто вторая клетка. Так можно сократить время между перезапусками дебаггера. Импорт торча например занимает несколько секунд, из-за этого перезапускать дебаггер каждый раз немного грустно.
Http binary packets 205 2762584
Привет, двач. Тыкаюсь в http. Есть задача по моделированию умного дома. Эмулирую хаб, который всем руководит.

Информация по сети гуляет пакетами. В двоичном виде. Закодирована с помощью URL-encoded unpadded Base64. Все пробельные символы отбрасываются.
type packet struct {
length byte(беззнаковое 8-битное значение)
payload bytes(массив байтов)
crc8 byte(беззнаковое 8-битное значение)
};
length - длина поля payload
payload - полезная информация
crc8 - контрольная сумма.

Делаю запрос. Получаю, например, b'DbMG_38IBgaMwsm1lDE5'. Декодирую через base64.urlsafe_b64decode(). Получаю b'\r\xb3\x06\xff\x7f\x08\x06\x06\x8c\xc2\xc9\xb5\x9419'.

Вообще не понимаю, что с этим делать дальше. Как из этого получить пакет? Каак? Помогите, пж
206 2762607
>>762584

>Делаю запрос


>Получаю


>Как из этого получить пакет? Каак?


Так ты его уже получил, дебил. Сначала в закодированном виде, потом перегнал в строку.
207 2762682
Чота я в сомнениях. Заглянул в лекции по питону от МФТИ, а там черепаху гоняют! Я тоже хочу черепаху гонять, а не текст уныло дрочить. Вот и думаю, сделать паузу в книге и уйти учиться по мфти или добить книжку и уже с книжными знаниями черепаху дергать?
208 2762723
>>762682
Учись по курсу "Поколение Петухон" на степике, там и текст, и черепаха есть и шахматы
209 2762890
>>762682
Вангую, что долбоебы реально вручную считали, чтобы получить этот важнейший факт, ещё до того, как придумали ЭВМ. Можно было бы подумать, что нет, но долбоебы они на то и долбоебы, так-то.
210 2762907
>>762607
так как мне их него инфу нужную вытащить?
image.png67 Кб, 797x702
211 2762959
>>762682
Ты вообще читаешь замечания к своему коду тут?
Правишь скрипты по советом анонов?.. Если нет, то не вижу смысла разбирать. Давай так. Пости все свои исправленные по советам выше скрипты и тогда я продолжу комментирование кода.

>хочу черепаху гонять


Можешь хоть лысого гонять. Черепашка предназначена для понимания алгоритмов вообще и всяких там циклов и функций уровня пика.
Знать по хорошему нужно всё, но задачки на черепаху более абстрактные и от них до реального кода отрыв больше, чем у книжек.
212 2762969
>>762959
Замечания читаю, кое что в прошлых переделал, но новые упражнения делаю прежде всего так, как в книге написано. Сначала функциональность, а потом вылизывание кода, все эти чеки ошибок и прочее, на что ты обращал внимание.
Касательно дальнейших комментариев твоих - я не принуждаю, можешь не комментировать.
213 2763162
>>762969

>все эти чеки ошибок и прочее


А на ус намотать и не повторять больше не хочешь? Почему у тебя опять файл не закрывается? Не поверю, что в книжке не говорилось об этом.
Почему без with?
Как раз в данном случае with даёт огромное преимущество потому что тогда файл предстаёт как генератор, а ты в своём коде просто берёшь и сразу его целиком читаешь, что намного менее эффективно в плане памяти. Загружать в память всего шекспира за раз - крайне сомнительная идея. А когда файлы будут не по 5-10 МБ, а по 5-10 ГБ? Тоже будешь грузить целиком?
214 2763641
>>762907
Скорее всего это и есть инфа которую приложуха использует для своей работы, дебс.
215 2763655
>>761497
суп вопросу
216 2763675
>>763655
Школьник дегенерат, уходи.
1624610979769.png31 Кб, 1290x405
217 2763688
Привет, подскажите пожалуйста с одной задачей. Нужно в экселе на основании данных из одной таблицы отредактировать данные в другой, то бишь сравнить столбцы двух таблиц и если есть совпадения, то добавить несколько символов в одну из них. Как это можно реализовать? А хуй знает.

С ебучими продуктами пакета офис я вообще не взаимодействовал и не ебу с какой стороны заходить, поэтому первая мысль была про циклы в пистоне.
218 2763711
>>763688
Есть всего несколько библиотек для работы с экселевскими файлами - все в гугле хорошо описаны не ошибешся. Все они примерно одинаковые. Наверно самая популярная это openpyxl.
Но если ты совсем нюфаня в погромировании, то лучше сразу забей, порог вхождения в эту ебанину выше среднего.
219 2763719
>>763711
>>763688
Добавлю, что если тебе нужно просто сравнение таблиц лучше делай это средствами самого эксела, там у него ещё и какой-то скриптовый язык свой есть. я помню 10 лет назад даже что-то писал на нем. Питон в этой задаче будет костылем, его имело бы смысл применять если бы тебе надо было жонглировать кучей файлов и управлять таблицами из другой прилажухи, а так - проще в самом экселе сделать.
220 2763733
>>763719

>какой-то скриптовый язык свой есть. я помню 10 лет назад даже что-то писал на нем.


Бэйсик?
221 2763737
>>763733
Да уже не помню точно, кажется да, VBA. Для сравнения двух таблиц более чем достаточно. Впрочем сравнить две таблицы можно наверное даже в ячейке внутри экселя с помощью формул
222 2763742
>>763711
>>763719
Да мне проще с опенпихл разобраться, чем ради одной хуйни эксель лопатить. Так что думаю костыль оправдан. Спасибо за совет.
223 2763810
Вечером примусь за словари
224 2763812
>>763810
Ты хочешь чтобы тебя за твое сранье в треде все нахуй слали?
225 2763819
>>763675
дибил, изыди из треда. Я в научных целях спросил, на примерах, доступных даже тебе, дибилу-школоте.
226 2763874
>>763810
Братишка, давай в /dr/
image.png28 Кб, 1353x375
227 2764028
Почему при выполнении main.py получаю ошибку ValueError: attempted relative import beyond top-level package ?
228 2764223
>>763733

>Бэйсик?


В экселе от мелкомягких - всегда был только он. Вернее его допиленный вариант "Visual Basic for Applications" (VBA).
Одна из вещей, которые мне особо нравятся в Libre Office здорового человека: там тебя так не ограничивают и ЯП куда больше, среди них JS и Python. Так что, если MS не принципиален, можно сделать всё в либре.
230 2765094
двач как запрограммировать комп?
16725270945280.gif6,5 Мб, 320x320
231 2765232
>>763162

> with даёт огромное преимущество потому что тогда файл предстаёт как генератор


Тащемта файл он всегда генератор, был генератором еще когда with и в проекте не было.
И тот факт что файл это генератор к расходу памяти никакого отношения не имеет.
232 2765236
>>765232
Ты какую-то хуйню написал. В контексте именно файла генератор как раз нужен чтобы большие файлы, которые в память целиком не влезут, обрабатывать маленькими кусками.
1689295657997.jpg15 Кб, 667x217
233 2765240
>>765236
Просто вызываешь .read() в цикле и всё.
Никакие генераторы не нужны кроме как для украшательства
234 2765423
>>765240

>вызываешь .read()


И в этот момент прочитается весь файл.Да. я вижу дополнительные параметры, но ты попробуй так сделать с текстовыми файлами и дай гарантию, что слово не порвётся посередине.
Для текстовых файлов зайдёт readline().
image.png2 Кб, 229x54
235 2765901
Данный код ввёл меня в ступор.

Использую питон больше года. Задавайте ответы.
236 2765913
>>765901
И что тут может быть непонятного?
Ты больше года работаешь с питоном и до сих пор не знаешь, что bool наследован от int?
237 2765919
>>765913
Нет, не знал.
238 2765960
Есть тут кто в fastapi разбирающийся?
239 2766056
>>765236

>В контексте именно файла генератор как раз нужен чтобы большие файлы, которые в память целиком не влезут



Ну так считывай контент файла по чуть-чуть а не целиком. И with тут ни при чём, он просто гарантирует закрытие файла
240 2766495
>>765919
True это 1, False - 0.
image.png80 Кб, 1348x644
241 2766500
Сука, пол дня сегодня проебался с простейшей задачей на степике. Если мне тяжело такое решать - у меня есть шансы, просто нужна практика, или программирование это не моё?
242 2766535
>>766500
Ну это простая задача. Какие у тебя мысли по поводу её решения?
243 2766550
>>766500
Не факт, что такое решение предусматривалось, но
def get_biggest(arr):
____return int(''.join(sorted(map(str, arr), reverse=True))) if arr else -1
image.png73 Кб, 1264x794
244 2766552
>>766535
Ну я её в итоге решил неким подобием пузырьковой сортировкой, но это явно не оптимальное решение.
245 2766555
>>766550
не, обосрался, на [9, 98] неправильно работает
В одну строчку в общем не получится
246 2766557
>>766550
Это как раз первое, что мне пришло в голову, но это не работает.
Например, у нас на входе числа 7, 71, 72 - такой код выдаст 72717, а должно быть 77271.
247 2766559
>>766550
Разумеется это неправильное решение, лол.
248 2766560
>>766557
>>766555
не, можно чуть проапгрейдить и сделать в одну строчку
return int(''.join(sorted(map(str, arr), reverse=True, key=lambda x: x+'z'))) if arr else -1
249 2766564
>>766560
Да что ты говоришь, анон.
И что у тебя выведется для [1, 12] ?))
image.png58 Кб, 1518x431
250 2766568
>>766560
Тоже не будет работать, пикрил

какого-то хуя спам-фильтр не пропускает список чисел, поэтому пришлось делать скрин
251 2766571
>>766568
Сложноватый у тебя контрпример)
252 2766576
>>766571
Я просто по тестам, прилагающимся к задаче, прогнал и первый зафейлившийся тест выложил.
Выше приводили более простой аналогичный пример - >>766564
253 2766580
>>766552

> пузырьковой сортировкой


https://www.youtube.com/watch?v=6nQZVS657Ew
Сильно неоптимально.
>>766500
Вижу два пути, но придумывать реализацию лень.
1. Перебрать комбинации, выбрать максимальную. Реализуется максимально просто (например, через itertools.product), результат гарантирован, но работать будет пиздец медленно.
2. Сначала перегнать числа в текст, потом сортнуть по алфавиту (от сортировки по числам, понятно, придётся отказаться), потом склеить и перегнать назад в число. Но есть тонкости. Например, если начало совпадает: в 2, 21 короткое число должно быть раньше, а в 1, 12 - позже.
254 2766590
>>766580

> сортировка за квадрат - слишком не оптимально


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


Ебать ты клоун.
255 2766591
>>766580

> Но есть тонкости.


Это не тонкость, а суть задачи, анон)
256 2766608
>>766552
Вот вам ванлайнер, работающий за NlogN:
lambda arr: int(''.join(sorted(map(str, arr), reverse=True, key=functools.cmp_to_key(lambda x, y: -1 if x+y < y+x else 0 if x+y==y+x else 1)))) if arr else -1

Учитесь, малята.

зы. Ну ванлайнер, по модулю того, что надо functools импортировать...
257 2766612
>>766552
Впрочем, это то же, что у тебя на скрине, только сортировка заменена на более эффективную. Непонятно, что тебе помешало сделать то же самое.

Ты, к слову, понимаешь, почему это решение работает?
258 2766613
>>766608
за NlogN \times MAX_STRING_LEN конечно же.
image.png76 Кб, 1826x284
259 2766732
>>766500
Че? 3900? пиздец
260 2766767
>>766608
Охуеть, спасибо.

>>766612

>Ты, к слову, понимаешь, почему это решение работает?


Ну я не знал про cmp-функции и про то, что их можно запихнуть в сортировку, но вроде разобрался, спасибо.

>>766732
Я по акции за 1.5к купил.
261 2767112
>>766767

> Ну я не знал про cmp-функции и про то, что их можно запихнуть в сортировку



Я скорее не про реализацию говорил - с ней-то всё понятно более-менее, а про сам алгоритм. Понятно ли, почему алгоритм (который ты сам в общем-то реализовал) выдаёт правильный ответ? Впрочем, если говоришь, что разобрался, то уже и не важно. Всё хорошо, значит.
262 2767237
>>748706 (OP)
Двач, только начал учить питон. Есть задача - получить код страницы dzen.ru. В браузере показывает код нормальный - пик1. Но через GET запрос на питоне выдает вообще другую хуету - pic2. А вот если кинуть ссылку на двач, например, то код дает нормальный код страницы.

Слегка загуглив, нашел, что это пидоры владельцы сайта там какую то ссаную защиту от парсинга установили. Как обойти эту защиту ебучую, может кто в курсе?
263 2767323
>>766608

>cmp_to_key


А зачем это тут? Это же функция которая конвертирует cmp(). которого в питоне 3 больше нет?
264 2767370
>>767323

> А зачем это тут?


> Это же функция которая конвертирует cmp(). которого в питоне 3 больше нет?



Ты сам на свой вопрос только что ответил. В python3 у sorted() нет параметра cmp, а есть только параметр key. Поэтому если ты хочешь использовать для sorted кастомный компаратор (то есть callable, принимающий 2 параметра, а не один), то его надо каким-то образом конвертировать в то, что ожидает на вход key, то есть в callable, принимающий на вход 1 параметр.
265 2767435
>>767237

>Как обойти эту защиту ебучую, может кто в курсе?


Эти "защиты ебучие" разрабатывают серьёзные дяди за большие деньги, та что раз ты так быстро сдулся и пошёл спрашивать - то никак :)
266 2767437
>>767370
Оооо, ничего себе. А что именно тогда там лямбда принимает в качестве аргументов? Два следующих друг за другом значения из map ? 0_о
267 2767526
>>767437
Параметр key ожидает на вход callable c одним параметром. Что это за callable? Это callable, который принимает на вход один элемент массива и возвращает "ключ". Ключ - это какой-то объект, который и будет использоваться при сравнении вместо непосредственно элемента массива, по которому он был построен. То есть представь себе процесс сортировки. В какой-то момент у тебя возникает необходимость сравнить элементы a и b. Вместо того, чтоб сравнивать их непосредственно, алгоритм делает так:
key_a = build_key(a)
key_b = build_key(b)
is_greater = key_a > key_b
где build_key - это ровно тот callable, который был передан в sorted через параметр key.

А что же делаеть, если всё-таки хочется использовать кастомный компаратор. То есть ф-цию, которая принимает на вход 2 параметра и говорит, какой из них больше? Обзовём эту ф-цию compare(a, b).
Тогда можно поступить так.
Создадим класс TKey, в котором конструктор принимает на вход число (которым в итоге будет элемент массива) и компаратор (то есть какой-то callable, принимающий 2 параметра). Число положим в поле value, а компаратор в поле cmp. И перегрузим метод __le__ для этого класса (напоминаю, что это метод отвечающий за то, что к объектам класса можно применять оператор сравнения <= ). Так вот внутри __le__, на вход которого приходит тоже один параметр (назовём его other), мы просто вызовем self.cmp(self.value, other.value).

Теперь можно легко определить лямбду, которая принимает на вход произвольный компаратор и возвращает объект, пригоный для передачи в key. Эта лямбда определяется так: lambda cmp: lambda x: TKey(x, cmp)

Пример кода на пастебин: https://pastebin.com/AA4X1wTk

зы. В functools почти наверняка реализация более красивая. Наверняка там можно как-то использовать метаклассы или что-то в этом духе, чтоб не передавать явным образом компаратор в конструктор. В частности, это бы дало гарантию, что у всех сраниваемых объектов одинаковые компараторы (в моей реализации такой гарантии строго говоря нет).
268 2767724
>>766590

>> сортировка за квадрат - слишком не оптимально


Она долгая. Если уж ебаться со своей сортировкой, то чего бы не реализовать что-то более приличное.

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


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

> Ебать ты клоун.


Дык, ёпта.
269 2767933
>>767435

>та что раз ты так быстро сдулся и пошёл спрашивать


Я не сдулся, а пытаюсь решить проблему, в том числе интерактивно, спросив на дваче. А так то я уже нашел инфу в гугле.
залупасинтаксис.PNG76 Кб, 1232x294
270 2768306
задроты здесь?
поясните про этот синтаксис с lambda и равно внутри лямбда, чет раньше не встречал, и в инете инфы мало
271 2768307
>>767526
Ничосе питон для продвинутых пользователей пк. Надеюсь без практики я это не забуду через пол года. Т.е. мы с помощью functools заменяем этот компаратор в сортировке на свой в виде лямбды. Странно, почему деды не встроили по умолчанию в сортировку для этого отдельный параметр key=foo, cmp=bar...

Впрочем это слишком сложно для меня ещё, я лучше напишу 5,10,20 строчек в отдельном блоке кода чем такое буду применять. Мое абстрактное мышление со скрипом осознает и представляет в виде объектов все эти многоэтажные перекаты из одного callable в другой. Впрочем, раньше и рекурсию со скрипом понимал, а сейчас более-менее ясно вижу.
image.png73 Кб, 1303x516
272 2768317
>>768306
ОТМЕНА, ЛОЖНАЯ ТРЕВОГА
это прост DEFAULT ARGUMENTS
фух, чуть не обосрался от страха думал, что какой-то новый синтаксис, который я не знаю
мимо помидор
273 2768410
>>768317

>мимо помидор


Оцените уровень "помидоров" в петухоне
274 2768471
>>768410
оценил тебе защеку, проверяй
275 2768492
>>768317
Какой то жидкий ты помидор.
276 2768501
>>768492
Бариста-помидор, новый сорт.
277 2769824
>>748770
Мантры джавапитухана?
image.png27 Кб, 899x244
278 2769951
Подсажите в чем проблема, алембик не видит при автогенерации таблицу компании, хотя её импортирую, а вот Users видит
279 2770682
>>769951
Тебе вообще не надо их импортировать, алембик сам из метадаты их подтягивает (из registry если быть точным). У тебя скорее всего какая-то проблема с моделью/генерацией миграций. Покажи класс Companies и покажи какой командой генерируешь миграции.
280 2771642
>>768410
Двачую, помидору лет 20, устрашился лямбды, я хуею. Я миддл с этим сталкиваюсь уже года два и упраздняю в чужом говнокоде, потому что только упоротые дегенераты пихают лямбду там, где не надо и наоборот не используют, раздувая код на +20 строк, там где можно одной лямбдой обойтись.
281 2772354
>>770682

>Тебе вообще не надо их импортировать, алембик сам из метадаты их подтягивает.


Откуда они возьмутся в метадате если их не импортировать ни разу по твоему? Как раз таки импортировать модуль с модельками в env.py норм практика.
1674026360426.jpg26 Кб, 312x424
282 2772417
>>771642
Какие же все-таки уебищные лямбды в плюсах.
По сравнению с этим пиздецом, лямбды в питоне просто верх совершенства.

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

Все зло в мире от людей, как же я их ненавижу.
283 2773080
>>769824
Шварпист залётный. Его язык настолько хорош, что он не может не поделиться с нами, сирыми и убогими сокровенным знанием о том, что на самом деле наш ЯП - вообще не ЯП.
284 2773319
Анон, за сколько бы ты взялся за написание скрипта/бота, который пиздил бы новые фоточки с аккаунтов и групп в ВК и выкладывал их в телеграм канале?
285 2773385
>>773319
Тысяч за 5₽
286 2773701
Аноны нужна срочная помощь django stripe
287 2773736
>>773701
Чел
288 2773766
>>773385

> Тысяч за 5₽


Ахуел
289 2773789
>>773766
Ступай к вьетнамцам. И так скинул.
290 2774012
>>748706 (OP)
Учил питон последний год, и вот теперь узнаю, что появился МОДЖО который его заменит.
И что теперь делать? Получается я впустую потратил время на устаревшее говно?
291 2774065
>>774012
Да. Пиздуй в Дикси за кассу.
изображение.png142 Кб, 474x474
292 2774184
В чем профит от лямбда функций? Почитал, поделал примеры - хуйня какая-то.
Пишут про какое-то там упрощение, но я увидел только усложнение.
293 2774329
>>774012

>появился МОДЖО


Может, тред по нему зделоть?
294 2774360
>>774184
По-быстренькому определять функции там, где их надо передать как параметр. Вот здесь хороший пример для сортировки: https://blogboard.io/blog/knowledge/python-sorted-lambda/

Кроме как использовать в качестве параметра, больше полезных применений нет.
16471126719360.jpg101 Кб, 764x1080
295 2775031
Ребята, что такое рекурсия?
296 2775226
>>775031
Вот чел отвечал уже на этот вопрос >>2775226
297 2775227
>>775226
Ебаная макаба испортила мне ответ.
298 2775246
>>775031
Попробую объяснить...
Рекурсия это когда вот так:
>>775031
299 2775285
>>774012
Он еще не вышел, не факт, что взлетит, и Питон он скорее всего никогда не заменит, т.к. большинству юзеров Питона он не нужен, они подрочат на скорость циклов и вернутся в CPython.
300 2775291
>>774184
Ну ты не будешь же новую именованную функцию объявлять чтобы передать ее в map или filter.
Просто в Питоне вместо мапов и фильтров часто используют лист компрехеншены, т.к. они сразу дают лист, а не ебучий генератор, поэтому ньюфаги не знают, олдфаги не помнят.
А в ФП наоборот мапы и фильтры юзают чаще, чем компрехеншены, потому что лаконичнее.
302 2775331
Кто пишет в VS Code? Там есть темы с неоновой подсветкой, типа Synthwave84( https://github.com/robb0wen/synthwave-vscode ). Но у меня подсветка не работает НИХУЯ. Погуглил, типа надо менять файлы, либо откат до 1.6Х версии делать, потому жлектрон-браузер удалили. Откат не пробовал, но пробовал править вручную, по гайдам, запускал от администратора ясен хуй, но один хрен не светится. Вот на стаковерфлоу( https://stackoverflow.com/questions/73266964/why-cant-synthwave-84-enable-neon-dreams-on-windows ) писали как типа сделать можно, но не помогло. Один хуй не светится А я хочу чтоб светилось красиво и я себя ощущал дохуя мамкиным хакером таинственным, буду кодить калькулятор в маске Гая Фокса и т.д. ЧЯДНТ? ЩИТО ДЕЛОТЬ? Пизда красиво, я хуею нахуй, хочухочухочу.
gigachad.jpg33 Кб, 593x656
303 2775390
>>775331
Пишу в вскод, юзаю дефолтную темную тему.
16881475761110.jpg90 Кб, 400x429
304 2777145
Не могу зайти на сайт пайторч лайтнинга, сразу клоудфайр отрубает
Рус айпи блокирнули? WTF?
Спасибо дядя, попрогромировал AI

https://lightning.ai/
305 2777151
>>775331
С такой темой надо выглядеть как Карина, а не как кулхацкер...
Снимок экрана.png57 Кб, 1014x853
306 2777224
307 2777333
>>777224
пиздец
308 2777613
>>775331
Выглядит как кошачья блевотина. С такой подсветкой глаза за пару часов кодинга из орбит вытекут и голова заболит.
309 2777634
Привет, парни. Поясните за смысл метаклассов. Я понял как они работают, но не понял зачем они нужны. Мудреная залупа какая-то.
Типо, они не позволяют создавать экземпляры класса наследника, если в нем не унаследованы все функции из метакласса указанные через декоратор.
Вопрос... А нахуя это надо то? Где это используется? Обычная защита от дураков?
310 2777697
>>777634
То, что ты описал, называется абстрактные классы, а не метаклассы. Нужны как база для наследования, когда нечего писать в методе, потому что может очень гибко использоваться.
311 2777712
>>766500
numbers = [1, 2, 3]

def get_biggest(arg = numbers):
if len(arg) > 1:
return sorted(numbers)[-1::]
else:
return 1

print(get_biggest())

Решил за 53 секунды. Такой вариант решения считается?
312 2777723
>>777697
А, сорян. Я все перепутал. Спасибо за пояснения, теперь понял.
14803586760800s.jpg3 Кб, 162x170
313 2777812
Питоняшки, дайте совет нуфагу.
Допустим вам понадобился компилируемый язык в пару к питону. Ну не знаю, например, чтобы "обходить острые углы производительности" каких-нибудь йоба-циклов.
Какой вы бы выбрали: С++, Rust, Golang или что-то иное?
314 2777823
Тайп хинты не нужны. В чем я не прав?
Юнит тесты все равно писать нужно, а если есть тест, то типы проверять смысла нет. Единственное стоящее применение это валидация во всяких пайдантиках.
315 2777839
Какая-то ебанутая херня.

У меня есть папка backend. Внутри имеется папка app и tests.

Внутри папки app: __init__.py, main.py и папка routers внутри которой __init__.py, auth.py. Я делаю импорт в main.py: from routers.auth import auth_router. Все работает.

Переходим в папку tests внутри которой: __init__.py и test_main.py. Я делаю следующий импорт внутри test_main.py: from app.main import app и нихуя не работает.
Дает: from routers.auth import auth_router
E ModuleNotFoundError: No module named 'routers'

Какого хуя?
316 2777846
>>777712
И что твое решение делает?
Оно же просто сортирует лист по возрастанию и возвращает срез из одного последнего элемента.
317 2777849
>>777812
Swift Вроде бы обычно используют Go, C или C++ в зависимости от задач.
318 2777866
>>777839
Закинь папку tests в app
319 2777869
>>777846
Возвращает самое большое число из отсортированного списка, либо единицу. В этом же была задача.
320 2777871
>>777846
Возвращает самое большое число из отсортированного списка, либо единицу. В этом же была задача.
321 2777944
>>777839
Почитай про относительный импорт.
IMG20230723001038.jpg33 Кб, 795x878
322 2777965
>>766608
Боже, что это такое. Как эту хуйню запустить, блять?
323 2777981
>>777871
[0,9,1] -> 910 будет самое большее число
324 2777996
>>777869
Ну ты хоть задачу прочитай внимательно.
Надо вернуть максимальное число, которое можно составить из чисел массива.
325 2778023
>>777996
>>777981
Да, да, я уже понял.
Как это то >>777965 дерьмо запустить?
326 2778078
>>777965
Если ты понятия не имеешь что это такое и как "это" запустить, то нахуя тебе это надо?
327 2778083
>>778078
Чтоб знать как сортировать более эффективно и запускать подобные конструкции в дальнейшем.
328 2778102
>>748770

>Питон - ненастоящий язык


Что это значит? Полагаю, что ты плохо разбираешься в языках и программировании вообще.
329 2778103
>>748808
Обоснуй. На Питоне можно писать все то же самое, что и на других языках общего назначения.
330 2778104
>>748827

>Hexlet и Skypro приглянулись но у них нет интенсивов/буткемпов.


У Хекслета есть.
331 2778165
>>777812
Выбирай язык, который знаешь или хотел бы узнать. Или более подходящий под задачу. К сожалению, не существует универсальных языков. В каждом есть свои плюсы и минусы.
332 2778360
>>777965
Кароч, так и не понял как эту залупу запустить.

>>777712
Все, переделал.

def get_biggest(arr):
if len(arr) > 1:
for i in arr:
for x in arr:
for k in arr:
lst = list(str(i)+str(x)+str(k))
return ''.join(lst)
else:
return 1

print(get_biggest([1, 2, 3]))

На это у меня ушло уже 8 минут. Знаю, что возможно есть способы лучше, но я нюфаг.
333 2778548
>>778083

>более эффективно


>в дальнейшем


Ебать ты шиз. Перезвоним.
334 2778569
>>778360
То есть ты просто написал свой код вместо старого? Это не называется "смог запустит". А в чём была проблема с запуском исходной версии кода?
335 2778570
>>778360

> Все, переделал.


Что ты переделал лол? Что твой код вообще делает? А что изначальный код делал?
336 2778584
>>777965

> print(lambda ... )


Ой бля... Чел, а ты понимаешь вообще, что такое лябмда? И ещё вопрос на засыпку: тебя не смущает, что у тебя вот в твою ф-цию get_biggest передаётся некий arg, но в теле ф-ции он нигде не используется?
337 2778658
>>778548
Ладно.

>>778569

>А в чём была проблема с запуском исходной версии кода?


В том, что с запуском никаких проблем нет, я вывести значение не мог. Вот и всьо.

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

>>778584

>ты понимаешь вообще, что такое лябмда


Да.

>передаётся некий arg


Не обращай внимания, я просто много что перепробовал и забыл исправить перед скрином.
Кстати, результат я вывести всё-таки смог.
IMG20230723214651.jpg24 Кб, 786x476
338 2778672
>>778658

>Нужно было вернуть наибольшее число из этих трех чисел игнорируя повторяющиеся числа.


Вот, всего-то строчку надо было добавить.
339 2778673
>>778658
Чел, забудь про этот cmp_to_key. Тебе это не пригодиться в ближайшие 2 года точно, только голову себе забиваешь. А если куда-то и применишь, то потом только жалеть будешь т.к. читаемость в разы снизилась.
Тем более если у тебя возникают вопросы уровня "как это запустить", то тебе это точно не нужно. Вот когда станешь тимлидом 300к в наносекунду как все мы в треде, вот тогда к этому вопросу вернешься, да и то врядли.
340 2778685
>>778673

>только голову себе забиваешь


Ну, я как бы это коплю, сортирую и сохраняю всякую интересную фигню у себя в облаке, чтобы вернуться к этому потом и по изучать, а чтобы применять повседневно подобное, до конца не разобравшись, у меня и в мыслях даже не было.
341 2779083
>>778672
get_biggest(19, 8, 7)
IMG20230724173954.jpg24 Кб, 797x431
342 2779470
>>779083
Да, обосрался, но теперь точно работает. Даже запарился и перепроверил всеми известными мне видами сортировок.

>>766608
А это нихуя не работает.
343 2779840
>>779470

>А это нихуя не работает.


Чел, сколько дней ты уже тред засираешь, уймись уже. Тебе самому не стыдно? Пошел бы уже давно и сам разобрался, нет двадцать постов надо написать что ничего не работает. Это говорит только о том, что ты даже базовый синтаксис питона не знаешь.

import functools
foo = lambda arr: print(int(''.join(sorted(map(str, arr), reverse=True, key=functools.cmp_to_key(lambda x, y: -1 if x+y < y+x else 0 if x+y==y+x else 1)))) if arr else -1)
foo([19, 8, 7])
344 2779842
Ребята, вы не способны объяснить новичку, что такое рекурсия!!!
345 2779845
>>779842
Чтобы понять рекурсию нужно понять рекурсию.
346 2779918
>>779840
Я не про то. Ты ее запускал вообще? В задачке же прямо сказано: найдите НАИБОЛЬШЕЕ число которое можно составить из трех чисел. Взгляни на образец в примере.
Если же прогнать через эту лямбду список вида [16, 9, 321], то она выдаст 932116.
Правильным решением будет 963211, как у меня, потому что это наибольшее число.
347 2779945
348 2779956
>>779918
У тебя логика сломана.
Задача была вернуть число "составленное из чисел из списка"
Например [16, 9, 321] 16 это число из списка, числа 6 в списке нет. А ты зачем-то рассматриваешь числовой элемент списка "16" как строку и извлекаешь из этого элемента числовые символы "1" и "6". Этого согласно условиям задачи делать не нужно.
349 2779989
>>779918

>как у меня


Твое ошибочное понимание задачки, только упрощает её, кстати.
arr = [16, 9, 321]
print (int(''.join(sorted(''.join(map(str, arr)),reverse=True))))
350 2780001
>>779918
Я просто не верю, что такие дегенераты бывают на самом деле. Пожалуйста, скажите, что это троллинг.

//мимо
351 2780019
>>780001
Наоборот сейчас курсы наносеков на каждом углу и это обычное дело.
352 2780064
>>779956
Понятно. Хуйня, а не задача, давали бы тогда четкие ограничения.
353 2780080
>>780064

> четкие ограничения


Что значит "чёткие ограничения"? Задача сформулирована чётче некуда блядь.

> хуйня задача


Жаль только, что ты её не решил.
354 2780140
>>780080

>Жаль только, что ты её не решил.


Главное, что смог бы.
image.png2 Кб, 85x54
355 2780160
>>779470
Чел...
356 2780163
>>779918
Спасибо, анон, благодаря тебе я уже не чувствую себя полным дебилом.
>>766500 кун
357 2780175
>>780140
Судя по тому, какую хуйню ты тут нёс, едва ли ты понимаешь понимаешь решение этой задачи.
358 2780207
>>780163
Зачем ты его так приложил. Он хоть и тред засрал, но по крайней мере не выебывается. А ведь часто заходят такие вкатуны, которые как только почюяли, что припустили в протки - сразу закатывают глаза и начинают агрессивный ультровизг т.к. признавать свои ошибки это не по их понятиям.
359 2780225
>>780163
Кажется, я начинаю понимать почему даже сеньеры-помидоры редко стараются кому-то помогать.
360 2780250
>>780207
Так этот долбоёб тоже своих ошибок не признаёт. И учить нихуя не хочет. Он тут насрал 20 однотипных постов с "посмотрите какой кал я в очередной раз высрал, теперь всё работает. А, кстати, а то что вы писали до этого - не работает и не запускается". Причём ему указыавешь на ошибки, а он всё это тупо игнорирует и говорит, что это уже не актуальные версии кода. Ну не актуальные, так хули ты тут срёшь своей шизой вообще?

Этот даун даже условие задачи за несколько дней не смог понять. А после того, как ему наконец разжевали, что надо сделать, он тут же высрался, что составители задачи тупые, а сама задача триавиальная (при том что он даже более простую её вариацию решил через жопу, лол).
361 2780321
>>780225
Чел, там выше >>767526 анон два километра текста накатал объясняя подкапот сортировки и компаратор, в прошлом треде рандомному залетуну тг бота написали. Это буквально самый лучший и отзывчивый тред на всей доске, а ты не ценишь. Может проблема в тебе.
362 2780656
>>766608

>key=functools.cmp_to_key(lambda x, y: -1 if x+y < y+x else 0 if x+y==y+x else 1)


Двач 2023, итоги.
Нахуя это здесь, кроме как перед вкатунами-школьниками повыёбываться?
Рабочее решение всегда будет O(n * log n) из-за сортировки, но ты зачем-то игнорируешь reverse, насильно пропихивая туда ключи, обмазанные говном. Ты ебанутый?
363 2780758
>>780656

> Игнорируешь reverse


Так он не игнорируется лол. Ебать ты дурачок. И при чем тут вообще асимптотика. Выше обсуждалось, как решение в одну строчку записать. Вот это был ответ.
364 2780801
>>780758
Нахуя ты сортируешь по ключам, какая практическая польза от этого, кроме быдлокода, в котором ещё надо две минуты потратить, чтобы разобраться, что хотел шиз?
1.

>def get_biggest(numbers: list) -> int:


>__return int(''.join(sorted((str(x) for x in numbers), reverse=True))) if numbers else 1



2.

>get_biggest = lambda numbers: int(''.join(sorted((str(x) for x in numbers), reverse=True))) if numbers else 1



3. если список небольшой, то давай просрём ресурсы на факториал, но сделаем это явно

>print(int(max([''.join(map(str, perm)) for perm in permutations(a)]) if a else 1))



Нахуя, повторяю, ключи, обмазанные говном?
365 2780814
>>780801
Чел... А ты понимаешь, что первые два приведенных тобой пункта не решают поставленную задачу?))

Ты бы вместо того, чтоб орать как ебанутый, лучше бы попробовал подумать, как и почему решается задача. Заодно бы понял, зачем там кастомный компаратор и чем он отличается от стандартного сравнения строк.
366 2780821
>>780814
Хорошо, извини.
Один пример массива, который сломает мои решения и я уйду думать.
367 2780837
>>780821
А может ты тред прочитаешь, а не будешь тут своим идиотизмом всем мозги ебать?

Вот тебе пример входа [2, 21].
368 2780843
>>780837

>[2, 21]


221 аутпут по трём решения. Обоссан, умник.
369 2780846
>>780821
На всякий случай. Тот кастомный компаратор, с которого ты подорвался, реализует предпорядок, но не частичный порядок. Это если тебе эти слова хоть о чем-то говорят, продвинутый ты наш.
370 2780850
>>780843
Клоун, ты думаешь, я не в состоянии твой код скопировать что ли?)
212 они выводят. Иди обтекай, программист хуев.
371 2780861
>>780850
Хорошо, вафел, убедил.
Тем не менее, свой шизокод никому больше не показывай. Для сортед достаточно ключа key=lambda x: str(x) * 2, чтобы сортировка проходила как следует, а не твоё говно говна.
372 2780864
>>780861

>убедил


При чем тут "убеждение" ты же просто обосрался, обкакунькался, насрал под себя, с ноги ворвался в нить, но споткнулся об порог и упал лицом в говно. Имей же достоинство хотя бы признать свои ошибки, зачем ты усугубляешь свой позор.
373 2780869
>>780864
Я признал свою неправоту, обосанный, но это не отменяет того, что ты шизобыдлокодер, который выехал на вауэффектах и полной обфускации своего говна.
Я показал решение лучше и проще, но ты продолжаешь тявкать из под шконаря. Олсо ты проехался по условию, если список пуст, чекай за щекой.
374 2780871
>>780869

>проебался

375 2780879
>>780861

> Для сортед достаточно ключа key=lambda x: str(x) * 2


А зачем ты продолжаешь срать себе в штаны? Попробуй запустить свою хуйню на [2, 221]
376 2780899
>>780869
Охуенно ты ворвался, братан. Задачу не понял, ни одной строчки кода правильно не написал, зато визг выше гор стоит. Сразу видно синьора тимлида.
377 2780984
>>780163
Пффффх. Пожалуйста, если ты не мог сам решить такую простую задачку, даже поняв ее смысл с первого хода, то не далек тот момент, когда снова себя таковым почувствуешь.
378 2781033
>>780879
Аноны, а уж случайно не самый ли жёсткий попуск в истории треда мы только что наблюдали? Полное многократное обоссывание агрессивного долбоёба... Да уж.
379 2781104
>>780869
Чей ты сынок, блять?
380 2781180
>>781104
>>781033
>>780899
Задел себялюбие Семёна, кек. Проигрываю с этих виляний анусом.
381 2781216
>>781180
Задел "себялюбие" тем, что сам себе в штаны насрал несколько раз подряд?
382 2781232
Пиздец, столько срача из-за того, как правильно сортировать циферки по алфавиту.
Держим марку.
383 2781240
>>781232
x = lambda x: ''.join(sorted(re.split('', ''.join(map(str, x))), reverse = True)) if x else 1

print(x([18, 21, 783]))

Вот самый правильный и оптимальный вариант.
384 2781244
>>781240
>>781232
ЖИРНО!
385 2781248
>>781232

> как правильно сортировать циферки по алфавиту.


А в этом треде никто такую задачу не решал... Откуда ты её взял?
386 2781256
>>781248
Не знаю, кто-то подложил...
387 2781278
Год не работал на питочеке, подвыпал из темы. Вопрос сколько денег просить в спб. Опыта работы 6 лет. Хочется шобэ не слишком заебно было. В асинхронность и эти ваши асинкайо не могу.
089089.png21 Кб, 708x184
388 2781378
>>781180
Ты хоть один пост можешь написать не обосравшись?
389 2781401
>>781278

>В асинхронность и эти ваши асинкайо не могу


Пойдешь к нам в ФБУ за 42500?
390 2781446
>>781401
последний раз трудоустроенный соточку получал
391 2781456
>>781401
Так он же вроде не спортсмен.
392 2781480
>>780869

>Я показал решение лучше и проще, но ты продолжаешь тявкать из под шконаря.


Блядь, ты не показал ни одного работающего решения, только шизу свою показал.
393 2782136
Пиздец. Туча петухонистов решают 1 тупую задачку и дрочат друг друга.
Прям анекдот про 10 %профессия_нейм% и 1 лампочку.
Кста решение через однострочник лямбду кал. Сидеть разбирать это говно мало кому потом захочется. А если нужен перфоманс то уж переписали бы на cython
394 2782172
>>782136
Жалкий клоун, тебя уже обоссали и ты решил другим аноном прикинуться? Только вот ты тут ни кого не обманешь, петушок, ты сильно палишься своей попоболью и манерой построения фраз.
395 2782219
>>781248
sorted(['1', '2', '20', '110'], reverse = True)
sorted([1, 2, 20, 110], reverse = True)

Сможешь понять разницу?
396 2782250
>>782219
Ну например 20 < 110, а соответствующие строки сравниваются наоборот. А при чем тут это, дебс?
397 2782260
>>782250
ЖИРНО.
398 2782287
>>782136
Была только одна цель - написать решение в одну строчку с сохранением асимптотики. Цели оптимизировать внутреннюю константу/оптимизировать что-то там под какое-то железо/whatever что там тебе ещё в голову пришло не было. Цели сделать код читаемым тоже не было (иначе бы в одну строчку никто бы не пытался ничего запихать).
399 2782288
>>782260
Как же у этого идиота припекло после вчерашнего попуска...
400 2782307
>>782288
Я вообще-то другой анон, могу даже скрин скинуть. Чтобы ответ получился как в задаче, надо всего лишь сортировать числа по стрингам и сджойнить. Зачем ты тупишь? Сколько тебе лет?
401 2782319
>>782307

> надо всего лишь сортировать числа по стрингам и сджойнить.


Почитай, пожалуйста, тред хотя бы за вчерашний день и найди в сообщениях контрпример к своего утверждению.
402 2782324
>>782307
А хотя не надо. Я просто покакать забыл перед разговором, вот и мысли путаются.
403 2782327
>>782324
Ну вот в тред ты покакать не забыл, клоун.
404 2782331
>>782319
Все, я понял, чтобы сделать код менее читаемым. Молодец, хорошо поработал.
405 2782334
>>782331
Спешите видеть, этот даун уже даже на нужное сообщение не может ответить. icq его представили?
406 2782395
>>782307
Так что же это получается... Значит наш герой и правда не так хорош как он о себе рассказывал? Мда... Стыдно, товарищи, стыдно. Но ничего, в охранники вот требуются...
407 2782473
>>782307
Бля, еще один.
Или это тот же?
image.png104 Кб, 1237x1047
408 2782488
Я гляжу вам понравилось решать задачки со степика, держите еще одну, попроще.
409 2782497
>>782488
Это тоже надо в одну строчку?
410 2782510
>>782497
На твое усмотрение.
411 2782539
>>782488
А, это древняя хуйня. Ее можно сделать множеством способов. Лучше понаблюдаю как ее здесь местные решают.
412 2782544
>>782539

> А, это древняя хуйня. Ее можно сделать множеством способов.


Задачу, в которой надо дословно сделать то, что написано словами, можно сделать кучей способов. Хуя ты умный... Наверно phd по computer science. Никак не меньше.
413 2782753
>>782488
Рейт.
Раньше это упражнение не делал. Время выполнения минут 15 наверно.

matrix = [[1,2,3],[4,5,6],[7,8,9],]

def spiral_transposition(mtx, rev=False, res=[]):
....if rev:
........mtx.reverse()
....res.extend(mtx.pop(0)[::-1] if rev else mtx.pop(0))
....for i in range(len(mtx)-1):
........res.append(mtx.pop(0 if rev else -1))
....if mtx:
........spiral_transposition(mtx, rev=False if rev else True, res=res)
....return res

print(spiral_transposition(matrix))
414 2782832
>>782753
matrix = [[1,2,3],[4,5,6],[7,8,9],]

print(matrix[0], matrix[2], sorted(matrix[1], reverse = True))

Мог бы и вот так сделать, результат один и тот же, только он неправильный.

Нужно чтобы так было: 1, 2, 3, 8, 9, 4, 7, 6, 5.
16903815220850.png24 Кб, 505x426
415 2782863
>>782832

>Нужно чтобы так было: 1, 2, 3, 8, 9, 4, 7, 6, 5.


По-моему ты задачу не понял, надо чтобы по спирали шло как на пике.
И да я проебался. В одном месте то ли мкба зажевала то ли я криво скопировал, но нет и ещё в одном месте "rev" с "res" перепутал.

Вот так всё работает и на больших массивах состоящих .

https://www.online-python.com/rGbRuYq9tl
416 2782888
>>782863
Ещё упростил, теперь масив не крутится а все манипуляции только с указателем. работает вроде на матрицах любого размера.
Готов принять ваши оферты на работу от 300к в наносекунду.

def spiral_transposition(mtx, rev=False, res=[]):
....res.extend(mtx.pop(-1)[::-1] if rev else mtx.pop(0))
....for i in range(len(mtx)-1,-1,-1) if rev else range(len(mtx)):
........res.append(mtx.pop(0 if rev else -1))
....if mtx:
........spiral_transposition(mtx, rev=False if rev else True, res=res)
....return res
417 2782892
>>782888
Макаба почему-то стирает [ i ]
в строке res.append(mtx.pop(0 if rev else -1))
418 2782894
>>782892
ды еп
res.append(mtx [ i ].pop(0 if rev else -1))
419 2782904
>>782892

> почему-то


Мы вам перезвоним.
420 2782913
>>782904
Нет спасибо, вакансия модератора на дваче меня не привлекает.
image.png55 Кб, 404x604
421 2783110
gkrygt.png45 Кб, 1140x506
422 2783120
423 2783131
>>783120
Ваш кот не работает на нашем 3.7
Перезвоним.
424 2783146
>>782863
Так малята, ну что, просили ванлайнер, решающий эту задачу?
Вот вам: https://pastebin.com/esw6V43r

На этот раз даже без импорта сторонних модулей. Кушайте, не подавитесь.
425 2783156
>>783146
Как выразительно, прям как на хаскеле, два борща тебе анонче!
426 2783160
>>783146
ванкилобайтер
427 2783161
>>783156
Не, ну тут всё-таки есть сайд эффекты, увы. Питон всё-таки по чистое ФП не очень заточен. Ну либо у меня просто руки из жопы.
87686.jpeg78 Кб, 640x800
428 2783162
>>783146
Анон, сколько ты дней ещё гореть собираешься, успокойся уже.
429 2783166
Стикер319 Кб, 479x479
430 2783171
>>783166
Сорян, думал это какая-то злая, подлая шутка, а это и правда километровый вайнлайнер.
431 2783173
>>783171
Да не, какие шутки. Я тот же самый ананас, который писал прошлый ванлайнер. Мне просто делать нехуй...
432 2783175
>>783173
Похоже как будто через какой-то обфускатор нормальный код пропустили. Искать такой обфускатор я конечно не буду.
433 2783177
>>783175
Нет, просто я отдельно писал несколько разных лямбд, чтоб отлаживать было удобнее. А в конце уже их все вместе склеил. Поэтому получился кусок говна. Ну от ванлайнера ничего другого и не стоило ожидать.
434 2783179
>>783175
Похоже на минифицированный жс, лол.
435 2783184
А кто-то понимает, как это >>783146 работает?
436 2783188
>>783184
Чел. Это база ООП. Если ты не можешь это прочитать - вон из профессии.
437 2783189
>>783184
Если раскрутить, то можно разобраться, но нахуя?
438 2783190
>>783188
Скажи мне, где ты работаешь, чтоб я там никогда не появлялся...
439 2783196
>>783179

>((st[1] + 3) % 4) // 2


>comparators[p]


>lambda x, y: x <= y,



Похоже как будто анон забыл пару лямбд из прошлого ванлайнера удалить. Или просто на клаву лицом упал случайно.
440 2783199
>>783196
А что тебя смущает в этих строках?
441 2783200
>>783199
Слишком сложно.
442 2783216
>>782488
Привязка ванлайн решения к ОП-посту.
Ванлайнер-решение: >>783146
78658.png51 Кб, 1382x621
443 2783223
>>782863
>>782888
>>783146
>>783216

Продолжаем маяться хуйней в этом ИТТ треде.
Пришлось добавить "глубокую копию" матрицы в оба теста.
444 2783228
>>783223
Пиздос. Объявляется конкурс на лучшую оптимизацию ванлайнера.
445 2783254
>>783175
Я тоже любитель вайнлайнеров. Как merge sort так написал, а в этом треде тоже говорили, что это всё обфускатор

https://ideone.com/ueZUFE
446 2783260
>>783254
Не, ну это хотя бы прочитать можно. А тот пиздец что выше... его какой-то психически нездоровый человек писал по-моему.
logo-small.png31 Кб, 200x182
galpy 447 2783335
Привет! У кого-нибудь имелся опыт работы с galpy?
448 2783399
>>751850
Побороть лень, очевидно.
449 2783930
>>783335
У Саньки Рыжего и Чпока Дадона. Ещё пятый кабинет весь.
450 2784472
посоны размер зарплат питониста в спб хде обсудить можна?
ESacVKLU4AAywRg.jpg54 Кб, 768x768
451 2784925
>>784472
в дурке
452 2786482
>>784472
Возьму тебя бесплатно, будешь функции для селери писать проекту и метрики слушать прометеусом.
453 2786520
Аноны, как красивее всего записать длинное уродливое мерзкое условие вот такого вида:

if _elm is None or \
...."data ts" not in _elm or \
...._d["data"] != _elm["data2"] or \
.... _elm["data"] not in _elm["synch"] or \
...._elm["data2"] not in _elm["synch"]:
........continue

Я сначала думал про any\all, но они принимают в качестве аргумента список условий, и этот список сразу же натурализуется на месте. А мне надо чтобы было ленивое поведение.
Например

>if True or int('text'): pass


Тут всё будет нормально, потому что int('text') не выполнился из за ленивой природы такого условия.

>if any((True, int('text'))): pass


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

Как быть? Как красиво записать длинное условие чтобы оно было ленивым?
454 2786635
>>786520
Лямбды чтобы не инициализировать список до проверки

a = [lambda: True, lambda: int('x')]
b = [lambda: False, lambda: int('x')]
print(any(map(lambda f: f(), a)))
print(all(map(lambda f: f(), b)))

https://ideone.com/SgkuOh
1690605818731.jpg8 Кб, 793x53
455 2786647
>>782488
накатал двулайнер проверяйте
456 2786861
>>786520
Никак. Проблема не в коде, а в самом условии. Могу разве что посоветовать обернуть в скобки и избавиться от \.
457 2787012
>>786861

>обернуть в скобки и избавиться от \


А чем это лучше?
458 2787486
>>787012
Тем, что ты пишешь код как пидор, похуже того мудилы обфускатора.
459 2787616
Есть задачка студентская про транспиляцию небольшого субсета шелл-скриптов в питон. Курс собственно по основам бидона и шелла.
Как они предполагают это решать, регулярками дрочить штоле? Это явно не про парсеры реальные.
460 2787627
>>787616
Гугли абстрактное синтаксическое дерево.
461 2787630
>>787627
Я же говорю, это начальный курс, должно быть что-то простое.
462 2787631
>>787630
Я думаю, подразумевается итерация или регулярки. Хотя итерироваться по тем же форам или вайлам будет весьма ебано, регулярки в этом плане проще. Может скомбинировать, хз.
463 2787635
>>787631

>регулярки


Следует избегать максимально. И вообще, они для пидоров, разговаривающих со всеми через губу.
464 2787657
>>787635
Неосилятор, спок
image.png99 Кб, 493x322
465 2787840
ккккккк
466 2787978
>>787616
Не очень понятно, что тебе надо, что ты подразумеваешь под транспиляцией скриптов

Тебе надо команды вроде cp/mv/rm/ls/cat портировать? Или что?

ТЗ не ясно.

парсеры и синтаксический разбор про другое
467 2788129
>>786647
Нахуй он кому нужен, если выше уже ванлайнер давно висит?
468 2788134
>>787486

> обфускатора


Нет там никакой обфускации. Ванлайнеры для тех двух задач ты нормальнее никак не запишешь.
469 2788359
>>787978
Это не мне надо. Есть такая задачка, предлагают решить за деньги, я вот думаю.
Портировать ничего не надо. Базовую хуйню вроде echo for while, присваивание-интерполяция переменных, а всякие ls/cat через subprocess.
470 2788912
>>748706 (OP)

>Литература


Что из этого можно почитать, чтоб подготовиться к стажировке (или на начальный уровень)?
471 2788923
>>788134
В условиях не было писать one-liner, а неявные вызовы лямбды с передачей компараторов это обфускация уровня пидора

>print(list(filter(None, map(lambda y: y reduce(lambda x, y: x y != 0, map(lambda x,y=y: y % x,range(2, int(pow(y, 0.5)+1))),1), range(2, 100)))))


Сколько времени потребуется, чтобы разобраться, что за код?
Наверное поболее, чем минута.
472 2788931
>>788923
Макаба астериски пожрал
https://onlinegdb.com/ICEnnuSyJ
473 2789019
>>788923

> неявные вызовы лямбды


Что за зверь такой? Хуйню не городи, чел)
sage 474 2789655
>>789019

>)


>)))


>))))))


Нахуй иди, быдло.
475 2789734
>>789655
Хуя подрыв)
476 2789757
Есть ли хороший гайд на dearpygui на русском?
477 2789775
>>789757
Нет и не будет. Гуи сдохли, потому что не смогли изобрести гуй одинаково работающий под win32 / browser api (wasm/js) / android / xlib (wayland).
478 2789823
>>789775
На чем тогда писать проги с хорошим гуи?
479 2789830
>>789823
Выбирать ОС.
Либо пиши под веб, там в целом, похуй — все браузеры плюс-минус одинаково покажут.
480 2789999
Как можно распарсить джейсонину вида,
{"a": {"b": "c": [{"d": {"e": [{"x": "1", "z": "2"}, {...}]}]}}

Нужно добраться до значений x y.
Я щнаю, что можно
For i in myjson['a']['b']['c']:
For j in i['d']['e']:
Print(j['x'], j['y'])

Но выглядит это как-то громоздко, сожет есть более короткие варианты для парсинга "глубоких" джейсонин, без двойных и более циклов и кучи ключей в квадратных скобках?
481 2790679
>>789823
Я ебошу все на tkinter. Он был первоначально сделан для очень странного ебанутого языка Tcl. Там была (еще когда Tcl'ем кто-то хоть немного пользовался) концепция мегавиджетов. Эта концепция намного лучше реализуется как раз на питоне. Вообще tkinter единственное, что без бубна работает на разных платформах. Странно, что его под браузер только не сделали, хотя гуи вероятно действительно пожраны залупой WebView, которая кстати многим не нравится.
482 2790723
>>789999
Рекурсией или циклами с несколькими вложенностями как у тебя.
483 2790797
Так чем питон/джанга лучше GOLANG?
484 2790865
>>790797
Если хочешь нейросетку в свой микросервис, то с голанг сразу учи кресты, чтобы ее через них затаскивать. То есть, например, обучаешь во фреймвокре TensorFlow, используя питон, потом в прямом направлении она у тебя работает через C++, а коннектишь в программу на Go с помощью CGO через точку входа на plain C. Вот только кресты кстати надо нормально знать, потому что документация нейросетевых либ для крестов отстает или ее местами вообще нет, потому что подразумевается, что крестовики-то сами во всем разберутся.
485 2790928
Решил перекотится с реакта на питон, вакансий побольше и зарплаты хорошие, даже мидл реакт разработчиком +4 года опыта мне приходилось искать работу по 3-4 месяца. Надеюсь в питоне с этим получше.
486 2790946
>>790928
Страна?
487 2790948
>>790946
Украина.
16815760584710.png1,1 Мб, 1250x1280
488 2790974
чому еще никто не перевел юнити или анрил на питон, пиздец будет бомба?
489 2791078
С утра жру кофе и не могу решить как правильно сделать модель в Джанго. И можно ли так вообще сделать без костылей:

Необходимо два поля в таблице оба обычные целые. А и Б. Первое может принимать любое значение, второе должно быть "автоинкрементом" но связанным с первым. То есть у каждого значения А должен быть собственный next_id для Б.
Скорее всего придется делать всё руками.
490 2791143
>>790948
Попробуй посмотреть вакансии на ангуляре еще.
491 2791213
>>790928

>мидл реакт разработчиком +4 года


Без пезды чел, если ты за 4 года не можешь найти работу, то ты точно не мидл. Ты знаешь, что такое абстрактные структуры и модели, как работает нода с прототипами, чем движок V8 отличается от V7, какие его преимущества и недостатки?
Это не говно о теории, это бейсед.
Я три месяца кручусь в джаваскрипт и два года в пайтоне, собесы на джуна прохожу, но офферы не принимаю, потому джиэс - это помойка.
492 2791215
>>790865
Мне го не нравится тем, что там на бэке надо raw SQL прописывать.
493 2791270
>>791213

>ты за 4 года не можешь найти работу


У меня чистый опыт работы 6 лет, на тот момент в 2021 году было +4 года опыта уже начались проблемы с поиском работы, слишком много вкатунов, слишком большая конкуренция, нужно пройти сотни собеседований что бы найти работу.

>Ты знаешь, что такое абстрактные структуры и модели, как работает нода с прототипами, чем движок V8 отличается от V7, какие его преимущества и недостатки?


Знание этой хуиты никак не помогает в работе. То что ты описал нужно узкоспециализированым инженерам которые работают на крупные ИТ корпорации.
Скажи как отличается код на реакте без знания и знанием этой хуйни?

>Это не говно о теории, это бейсед.


Потому что ты так скозал?

>собесы на джуна прохожу


Я в начале 2017 года нашел свою первую работу за две недели пройдя только не более 5 собеседований, без знания редукса, мне на тот момент был не понятен. Но мне кажется что ты пиздабол, на данный момент никто не берт джуна во фронтенд слишком дохуя кандидатов и не нужно здесь пиздеть маняхуйню что все они тупые а ты один умный, фронтенд не настолько сложный, через полгода работы из джуна можно спокойно вырастить в мидла который спокойно может с нуля сделать проект любой сложности.
494 2791274
>>791143
На ангуляре еще меньше вакансий, мне сам по себе этот фреймворк не нравится.
495 2791288
>>791270
Я сейчас говорю про удаленку, возможно в офис легче вкотится джуну.
368234imagelarge1.jpg303 Кб, 600x800
496 2791885
Есть тултип без всяких кнопок дополнительных окошек и прочего вроде tkinter-tooltip?
Обычный тултип, произошло действие он маякнул.
497 2792041
>>791885

>произошло действие он маякнул


Я такое в status bar маякую.
изображение.png351 Кб, 600x450
498 2792215
499 2792314
сап аноны
есть таск: напечатать кучу хуйни всякой в ворде. 300 единиц.
с одним подводным: надо менять в документе серийный номер.
на каком языке ( и можно ли ) написать скрипт, который поставить на печать ряд документов, и при этом пропишет в определенной графе серийный номер. например 10 .docx файлов, и в каждом номер - 001, следующий 002 и т.п.
500 2792482
>>792041
Статус бар это если какой интерфейс есть. У меня всё в сонсоли, но например копируешь ссылки на ютаб и чтоб точно знать что она скопирована желательно какую-то всплывающую подсказку сделать, но нормальный тултип не могу найти.
501 2792492
>>792314
Мне кажется, это макросами прямо в ворде можно сделать
502 2792500
>>792314
docx это зип архив со всякой требухой и хмл самого документа. Открываешь его и меняешь, даже модули сторонние не нужны.
503 2792521
>>792500
аноны вы можете мне подсказать в таком случае как будет выглядеть код и как его запустить? ну или хотя бы кинуть линк где инструкция.
я полез в эти макросы, ну нихуя непонятно

мне нужно чтобы в 3 полях на разных страницах в word документе просто менялся автоматически номер при печати. типа 12345-001, 12345-002 и тп.

я попробовал сделать в тех местах закладки, и через них задат нумерацию, но нихуя не работает

памагите ятупой
504 2792764
>>748770
ты ебанутый наглухо? Хорошие знания джанго и ООП + хтмл и уже можно спокойно работу искать. Чисто приложухи на джанго писать.
505 2792851
>>790974
Ну если это дело потом как то скомпилировать, то да, будет бомба.
506 2792936
Прошу помощи, братики!

Имеется телеграм канал и туда уже загруженные какие-то аудио файлы

Пытаюсь сделать бота который будет по названию аудиофайлов находить его выгружать его с телеграм канала и отправлять на фронтэнд.
Как это сделать?
507 2792977
>>792936
Перезвоним.
508 2792993
>>792977
Бля(
509 2793094
>>792764
А еще DRF, Docker, SQL, базовый JS, профильная вышка и год коммерческой разработки - тогда может быть рассмотрят на должность стажера и младшего помощника джуниора на зарплату 20к рублей.
510 2793114
>>793094
да нихуя. достаточно выбрать одно направление и достичь там нормальных результатов (можно самостоятельно) ты столько всего перечислил что это уже на мидла тянет, но уж точно не на стажера/джуна
511 2793271
Аноны, сколько раз в своей жизни вы использовали метод setdefault() кроме как во время обучения?
512 2793288
>>793114
Чел, я просто перечислил стандартные требования для вакансий junior python developer в 2к23 году.
513 2793310
>>793288
Будем честны, для джуновских задач докер учится за пару часов, делается рабочий манифест и потом переходит из проекта в проект, sql учится ну за пару недель с учетом простых джоинов, базовый js вообще опционален. Ну а насчет дрф - как правило человеки-фреймворки сейчас учат что-то сразу. Про год коммерческой разработки - ерунда.
514 2793401
Душу пистона немного. Почему ваш пистон и sqlite3 так долго обрабатывает запрос "select count(*) from myanusbase where kind=1;" ???
База - 7.2Гб
Индексы по всем полям есть. Ну вот как ускорить писю?
image.png1,1 Мб, 750x1334
515 2793436
Аноны, посоветуйте годный курс по Джанге, можно на ангельском. Заебало смотреть всратые гайды на ютубе, где половина спизженные с другого канала, вторая половина недоделанные и тд, хочу отвалить бабла и хапнуть концентрированной базы без всякого говняка.
516 2793442
>>793401
бумп
517 2793449
>>793436
Антонио Меле - Django в примерах
518 2793580
>>793401

>Ну вот как ускорить писю?


Перейти на постгрес
519 2793624
>>793580
понял. а бэкап/ресторе только по файлу *.sql??
520 2793627
>>793624
в смысле, у постгреса.
521 2794045
>>793401
Ну дак запусти профайлер да глянь где медленно.
522 2794217
>>794045
Вот ты какой умный, твою мать.
Давай тогда расшифруй эту ебень:
[(0, 'Init', 0, 13, 0, None, 0, None), (1, 'Null', 0, 1, 2, None, 0, None), (2, 'OpenRead', 0, 2, 0, '5', 0, None), (3, 'Rewind', 0, 9, 0, None, 0, None), (4, 'Column',
, 4, 3, None, 0, None), (5, 'Ne', 4, 8, 3, 'BINARY-8', 84, None), (6, 'Rowid', 0, 3, 0, None, 0, None), (7, 'AggStep', 0, 3, 1, 'count(1)', 1, None), (8, 'Next', 0, 4, 0
None, 1, None), (9, 'AggFinal', 1, 1, 0, 'count(1)', 0, None), (10, 'Copy', 1, 5, 0, None, 0, None), (11, 'ResultRow', 5, 1, 0, None, 0, None), (12, 'Halt', 0, 0, 0, No
e, 0, None), (13, 'Transaction', 0, 0, 106, '0', 1, None), (14, 'Integer', 2, 4, 0, None, 0, None), (15, 'Goto', 0, 1, 0, None, 0, None)]
523 2794220
где здесь тормозиться???

запрос был:

cur_.execute("EXPLAIN SELECT count(oid) from _clients WHERE kind=2;")
print (cur_fns.fetchall())
524 2794422
>>794220
А че курсоры разные?
525 2794427
>>794422
очепятка, курсор одинаковый
526 2794587
В FastAPI можно вернуть несколько изображений в респонсе, желательно вместе с именами, не кодируя их в текст? Уже несколько часов дрочусь, допрашивая чатботов, но они выдают какую то хуйню. Вроде в POST реквесте так делать можно, и в респонсе тоже. Но как сгенерировать такой респонс в фастапи не ясно. Или всё-таки это невозможно в HTTP?
527 2794658
>>794220
Че по производительности сервера с бд?
528 2794700
>>794587
В реквесте можно мультипартом, в респонсе нельзя.
529 2794750
>>794587
Передавай картинки в base64, можешь вообще все угодно передавать и на фронте парсить
мимо король говна
530 2794759
>>794700
>>794750
Ясно, жалко. Проебался еще полтора часа после этого, не то, чтобы мне это нужно, можно было бы и в base64 конвертить, но у меня проснулся азарт. Спасибо за ответы.
image.png1,1 Мб, 750x751
531 2794791
Аноны, кому не впадлу прочтите мой текст и сориентируйте пожалуйста по дальнейшим действиям, в первую очередь обращаюсь к опытным или тем кому хотя бы уже удалось вкатиться.
Питухон изучаю уже ~полгода, хапнул всю базовую базу до основ ООП (а также основы БД и гит), запилил пару первых петов - бота для мморпг на OpenCV и телеграм бот-магазин, параллельно курю Чистый Код Мартина. Щас по идее как пора углубляться в непосредственное направление, решил не метаться и идти именно в веб разработку как изначально и хотел, т.к. это мне наиболее интересно а вкатиться в тестировщики/аналитики как я понял нихуя не проще, везде свои подводные.
Так вот сейчас по моей логике мне надо браться за Django, и отсюда возникает первый вопрос, правильно ли я понимаю что в принципе уже в ходе изучения джанги можно будет подтянуть свое понимание ООП? Т.к. я чувствую прям недостаток знаний и опыта в этой теме, то есть теорию понимаю но практкики было мало. Или нужно как-то отдельно подкачать ООП и дальше уже браться за джанго?
Далее, я себе отдаю отчет что я в принципе склонный к демотивации и забиванию хуя чел, поэтому для обучения мне больше подходит курс/ментор, где меня будут подпинывать и помогать на моих затупах, тем самым сглаживая углы на которых будет возникать желание все дропнуть. Ментора в принципе могу себе позволить, хотя и дороха, но имхо это избыточно на начальном этапе, поэтому я пытаюсь найти какой-то курс который подходит мне по лвлу, но чет на какой не посмотрю они либо начинаются с полного нуля, либо там полно какого-то говняка который явно напихан тупо для объема. Короче кто знает пиздатый курс (можно на ангельском, но лучше на ру) где именно нужные вещи для веба, джанга там, всякие эти редисы, брокеры сообщений и тд без говняка - посоветуйте плиз. Желательно чтобы по ходу обучения это все закреплялось на проекте.
Воот епты бля, ну собственно и все, подскажите кто шарит как и по каким материалам дальше развиваться чтобы быстрее достичь состояния личинки разработчика.
532 2794813
>>794791
Возьми лучше фласк или фастапи, будешь энкодить изображения в base64, как я.
533 2795107
Ананасы, как оцениваете работу в web scraping/crawling/parsing в плане профессионального развития? Есть возможность залететь на такую вакуху (сейчас перекладываю джейсоны грубо говоря) с повышением зп, но вот только сложилось ощущение что это примитивная дрочь даже по сравнению с погрузкой жысонов и есть риск запачкать резюме работой с этим, потом не возьмут вертеть высоконагруженные микросервисы и пукать в кафку. Что скажете, насколько соответстует реальности такая оценка этой области?

1 год стажа опыта
image.png51 Кб, 847x289
534 2795194
Есть помидоры? Как вы проверяете наличие одного из последних ключей глубокого словаря?
Условие такое, что на пути к ключу предыдущий ключ может просто отсутствовать и соответственно выполнять условие дальше, не вызывая эксепшн, не имеет смысла.
Попробовал моржа, но выглядит всрато.
535 2795242
>>795194
Чейнись с дефолтным словарем. a.get('puk', {}).get('puk2', {})
1682580557195168300.jpg43 Кб, 640x795
536 2795279
>>795242
Как правило самое лучшее решение простое, спасибо, кот.
537 2795546
Так, знатоки питона, нужна помощь.
Есть вложенная функция, которая в упрощенном виде выглядит как:
def func1():
__def func2():
____do something
____if condition:
______return True
____return False
__return func2()

Проблема в том, что эта херота не возвращает ни True, ни False, хотя condition точно случается.
Что за херня?
538 2795600
>>795546
Дебажь инструментом или принтами, например запомним что-нибудь после условия, твоя структура работает. Ты лучше свой код закинь.
6.png31 Кб, 333x333
539 2795614
>>795600
Дебажу, но не понял, что за херня.
Код
https://ideone.com/6Yi4Li
Да, литкод

Вот тут условие выполняется, но возвращает False, а не True:

h
next_letter
3
len(word)-1
3
position
(1, 0)
next_letter
2
False

И, вообще, по идее, вот эта часть:
position
(1, 0)
next_letter
2

Не должна быть.
540 2795692
>>795546
https://onecompiler.com/python/3zgq9sha4
Всё работает, дебс.
541 2795717
>>795692
Там же сказано, что это >>795546 упрощенный вид вот этого >>795614
А оно True не возвращает.
image.png31 Кб, 802x131
542 2795743
>>795614
Да, чел, ну ты хуйнёй озадачил.
Вот тут ты зачем-то просто вызываешь рекурсивную функцию, но не записываешь результат и не выполняешь никаких действий, код работает без пользы.
Так исправь и пробуй.
543 2795745
>>795614
>>795600
>>795692
Короче, эта херня решилась заменой "return True" на:
val = True
break

И потом возвратом из функции val.
Не знаю, почему return не сработал. Если кто в курсе - буду благодарен за разъяснения.
544 2795749
>>795743

>рекурсивную функцию, но не записываешь результат


Там увеличивается счетчик next_letter, до тех пор, пока он встретит или не встретит условие.
545 2795750
>>795717
Ну так блят логику включи, это значит что ошибка не в той конструкции вложенности, а где-то в другом месте. Ты видимо вообще слабо представляешь как твой код работает и просишь других его распутать всё понять что куда передается и починить. Неплохо ты придумал.
546 2795751
>>795749
Не еби мозг, а поправь и посмотри результат.
Тебе сказали, в чём проблема нерабочего кода.
547 2795755
>>795614

>https://ideone.com/6Yi4Li


Чел это с какой-то галеры или ты что-то для себя делаешь? Хочу просто понять за ТАКОЕ платят?
548 2796018
>>794658
говноноут. вынь7 -64 4гб озу
549 2796144
>>794658
>>796018
У скулайта нет сервера, норкоманы, это просто бинарная либа с питоньими биндингами. Там нечему тормозить, если у тебя не десятки миллионов записей. Скачай соснольный шелл и там пробуй свои запросы.
https://www.sqlite.org/download.html
Последняя опция под шиндовс.
550 2796449
>>796144
пися девчачья. Я же выше писал, размер дб в 7,2Гб примерно. Как тебе такое, илон маск? сикулайт сможет перебрать все записи, и посчитать коунт(*)?
551 2796454
>>796144
там длл и деф - файлы. Ты походу в винде вообще не шаришь?
552 2796459
>>796449
7.2 гб это мало, записей сколько?
>>796454
слепой штоле?

> A bundle of command-line tools for managing SQLite database files, including the command-line shell program, the sqldiff program, and the sqlite3_analyzer program.

553 2796486
Всем чмоки
Вкатываюсь в ит не ради работы, но ради интереса.

Сейчас учу питон, уже прочел половину укуса питона и параллельно посмотрел +- треть видеокурса, утащенного с торрентов.
(Не просто смотрю/читаю, повторяю сам, пытаюсь копаться)

По окончании хочу попробовать освоить машинное обучение. С математикой на Вы, но попробую все равно.

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

Все правильно делаю ?
554 2796595
>>796486

>Все правильно делаю ?


По ощущениям как-то бессистемно все делаешь.
555 2796706
>>796459
ебал команд-лайн. дальше что?
556 2796722
>>796486

>хочу попробовать освоить машинное обучение


Автомехаником решил стать после освоения питона? Похвально.
557 2796727
>>796706
дальше ничего
558 2796770
>>796486

>укус


То что ты пробежался глазами по укусу и максимум перепечатал себе примеры кода в IDEшку, позапускал и сказал "ага это я понял" дает тебе весьма печальное понимание питухона, надо все теоретические знания закреплять на практике решая какие-то задачки.
559 2796840
Есть какой нибудь список задач по питону для юниоров
560 2796887
Как апнуться до мидл+ в джанге какой проект нужно запилить самостоятельно чтобы осмелиться претендовать на это повышение?
561 2796894
>>796887
Перейти на фастапи.
562 2796997
>>796840
Главная твоя задача - снять гил.
Снять гил с питона - как университетская степень.
563 2797027
>>796894
А чег оне на плюсы сразу пересадить или на го с растом? там вроде больше медианные зп
564 2797110
>>787840
>>796997

Скоро очень скоро
565 2797203
>>797027
Потому что поменять фреймворк это не так то сложно.
566 2797209
>>797027
Go проще питона, он более узконаправленный.
567 2797210
>>796887

>Как апнуться до мидл+


Просто стань опытным и компетентынм

>какой проект нужно запилить


Никакой

>осмелиться претендовать на это повышение?


>повышение


Проще при переходе на другую работу. В текущей компании у всех вогруг уже сформировался образ тебя как джуна (если ты сейчас джун, как я понял), а для нового работодателя ты - чистый лист
568 2797348
>>797110
Надо самому, а не через подбенжерложенного Гвидо.
569 2797431
Пытаюсь в ЧА/ДДД, и пока куча тупых вопросов только назрело.
Вот есть таблица User.
Есть в domnain/entity/User сущность (агрегат).
Есть в infra/db/model/User модель.
Есть в infra/db/repository/UserRepository имплементация репы.
Есть в app/dto/User дто.
Есть в interface/grpc/pb2/User структура запроса-ответа для gRPC.
Есть в interface/rest_api/pb2/User структура запроса-ответа для API.

1) Что нужно возвращать в методах репы? Сущность / модель / дто?
2) Если мне нужно делать селекты, минуя бизнес-логику, можно ли сразу конвертить запросы-ответы для gRPC/API в модели или нужно всё равно их конвертить в дто?
3) Если структура модели отличается от структуры дто или запроса-ответа, под каджый случай пилить свой маппер?
570 2798345
Катите тред, ебать вас в сраку.
571 2798608
Насколько реально (почти) с ноля до рабочего места за неделю времени?
572 2798626
Смотрю видео питон за 1 час, щемитесь скоро отберу у вас работу будете лапу сосать.
573 2798636
>>798626
Мне не нужно работать, я посмотрел видео как стать миллионером за пять сек.
574 2798865
>>798608
Рабочее место требует только проверки на харизму.
575 2798906
Ну про неделю понятно что фантазия, но внятный ответ сколько занимает изучение пытона я тоже не нахожу. Ответы варьируются от 2 месяцев до года, курсы всевозможные видел и на 3 месяца, и на 14... Так сколько, анон?
576 2799009
>>796459
4млн. записей. Может ноут так себе. Но для бд - это позор вообще-то так считать. Только если он сначала грузит дб в память, а потом имеет её. Но это позор, видимо даже хэша нет полноценного.
577 2799170
>>798906
На этот вопрос нет простого ответа. Это не станок с ЧПУ освоить на заводе. Ты например можешь выучить синтаксис языка и встроенные функции за пару недель, и что? После этого сядешь на стул и скажешь "всё, теперь я у мамы погромист". Нет, этого не достаточно. Надо типы данных учить, алгоритмы, ооп, стандарты написания кода. Достаточно этого? Опять нет, надо дальше учить - подкапот языка, что куда перекатывается, разные обязательные либы, тысячи их. Хватает? Опять нет, нужна практика - пишешь петпроект, смотришь как дургие пишут, пишешь, пишешь, пишешь. Всё свободное время туда. Хватает? Опять нет, да что ты будешь делать - кабан кабаныч, куда ты пойти хотел, требует от тебя другие знания - идешь. учишь, ковыряешься разбираешься.

Суть в том, что надо непрерывно учиться и нет такой точки куда ты доучился и остановился, потому тебе и сроки никто не скажет.
Ну а синтаксис питона и его встроенные функции + некоторые обязательные либы за пару недель можно выучить.
578 2799219
>>799009
Это вполне подъемно для нее, ты где-то обосрался, ищи.
579 2799245
>>798906
Я хапнул именно базу самого питухона (начиная от переменных и заканчивая основами ООП) за 3 месяца, занимался в среднем часов 10-15 в неделю, при этом все закрепляя на практике. А так вот эти вопросы "сколько времени надо чтобы X" вообще неуместны, ты можешь быть нереально увлеченным и замотивированным чуваком который будет по 15 часов в день дрочить и соответственно через пару месяцев уже будет что-то там шарить, а можешь быть ленивым хуем которому это айти нахуй не всралось и он каждый вечер чисто заставляет себя на полчаса открыть купленный курс и через год даже ничего не вдуплить.
580 2799257
>>793436

>Джанге


Она еще актуальна у вас?
581 2799269
>>799257
Нуфаги почему-то поголовн все учат, хуй знает зачем.
582 2799306
>>799269
Потому что 90% вакух для джунов на джанге.
583 2799325
Паца, нид хелп.
Шапку прочитал, но не увидел ничего.

Суть: нужно какое-то чтиво (желательно с обилием практики), для сисадминчика, чтобы быстренько вкатиться в питон. Знаю баш, немного кодил на руби. Питон нужен чисто для сисадминских/девопсовских нужд. Перебрал несколько учебников, там все разнится: от введения в питон для детей (чисто БАЗА на 500+ страниц), до обзорных гайдов по возможностям питона без погружения (python и девопс Гифта, например).
584 2799335
>>799325
quick python 3e
python in a nutshell 4e
585 2799337
>>799335
Лучи добра тебе, няша
586 2799338
>>799335
Алсо, python distilled.
Тоже очень годная.
587 2799517
734784738539729348 % m_len = 1315 - m_len

Как решать подобные уравнения? есть идеи?
588 2799787
Как обозначить стрелочки на клавиатуре в питоне? Например клавиша "w" ей и будет, но как написать именно стрелочки?
589 2799789
Как обозначить стрелочки на клавиатуре в питоне? Например клавиша "w" ей и будет, но как написать именно стрелочки?
590 2799808
>>799787
>>799789
Нужно, к примеру, Up написать. Важно с большой буквы
16909144610780.gif2,4 Мб, 225x255
592 2800476
Когда на вашем нахрюке программирования добавят статическую типизацию как у белых нахрюков? А производительность как у сисек? А джаву када заменит? А GIL када уберут? Я всего этого очень сильно хочу и жду уже наверное лет пять
593 2800505
>>800476

>производительность как у си


Уже Cython

>джаву када заменит?


Никогда

>GIL када уберут?


Уже (cython.nogil) в 3.13 зкспериментально возможно, лет через 5 в стабильном билде
IMG20230810091330299.jpg110 Кб, 1280x720
594 2800571
>>800476
Всего этого тебе не надо, ты будешь писать на питоне, и будешь счастлив
595 2800580
>>800571
Мировая закулиса генетически выводит служебных питонистов!
А потом у ребенка-трансформатора вместо родителей будет Питонист 1 и Питонист 2.
images.png6 Кб, 190x265
596 2800590
>>800580
Верно подмечено, каллега. Не зря ведь такой резкий хайп и агрессивный всплеск курсов по питону, чтобы люди не могли пейсать на нормальных язычках, таких как хуйскелл, раст итд. В итоге мы получаем дешевую рабочую силу в лице шаолиньков питонистов, которые будут готовы выжигать глаза смотря на код в мониторе в белом режиме JupyterLab ради смуси и сушеных кузнечиков. И они будут счастливы
598 2801740
>>799219
Нашёл. хуем твой анус.
Гавно ДБ, обоснуй, что коунт(*) так может по времени работать!
599 2805434
Подскажите какой-нибудь опенсурс проект на Питоне, хочу посмотреть как пишут серьезные люди.
600 2826135
>>748706 (OP)
Анонче, подскажи, как запаковать программку в exe из ипитона, чтобы она работала на винде где среды нет? Какие инструменты лучшие, программка для баловства, окошко и пара кнопок.
601 2826136
>>748808
база. я пишу основной код на С, компилирую в динамические библиотеки и подключаю к питону через ctypes
602 2826147
>>826135
есть всякая хуета для преобразования. я использую тяжелый вариант, который ты не поймешь. погугли про embedded python, а еще важно понять, что ты можешь дописать любой текст в конец exe файла. я делаю так: пишу прогу на С++, используя библиотеку питона, которая позволяет исполнять код, копирую код на питоне в конец скомпилированного файла. важно, чтобы между кодом программы и вставленным скриптом была какая-нибудь строка, которая будет использоваться как разделитель, программа на Си должна прочитать содержимое самой себя, найти строку-разделитель, считывать код после этой строки-разделителя, и затем при помощи "встроенного питона" исполняет этот код.
этот вариант ебанутый, тут нужны нетривиальные знания
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 29 сентября 2023 года.

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

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