Это копия, сохраненная 26 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1873283 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
исходник: https://dumpz.org/bASGKD8cCFDf
Кхм, спасибо.
Значит, первый вариант лучше. Хотя мне не очень нравится загромождать код лишними буквами (типа, почему бы сразу в параметре не установить нужное дефолтное значение, а не оперировать на основании None он или нет), но если так правильнее, то я приму.
Ах черт, ну конечно.
У меня ж там рандом, а со второй записью self.a всегда будет возвращать одно и то же число, сгенерированное на старте программы. Тогда конечно это херня.
>КОКОКО У НАС ЯЗЫК БЕЗ ЧЕТКОЙ ТИПИЗАЦИИИ ВСЕ РАБОТАЕТ И ТАК ЗАЕБИСЬ
>ПУК СЕРЕНЬК ЦИКЛ ФОР НЕ РАБОТАЕТ С ДАННЫМИ ТИПА ИНТЕДЖЕР)))))
Пиздец параша, нахуй я только время потратил на эту недопарашу? Лучше попробовал доучить кресты.
Конечно, братан, если ты не осилил чтение ошибок в питоне, но в плюсах тебя однозначно ждет успех.
а чё не так с фором, просто типичного инт и и++ фора нету и всё тут, а только проход по элементам
Не обращай внимание на уточку. Он просто увидил фор из крестов и все что выглядит по другому для него неправильно.
Главное на C++ начинать с "fuck you", а не с "пошёл нахуй". Иначе сначала придётся курить мануалы по работе с юникод-строками, переводе из одной кодировки в другую и т.п.
>не осилил простейший язык для вката, которым обучают даже пятилетних детишек
>ЭТО НЕ Я ИМБЕЦИЛ, ЭТО ВЫ ГОВНОЕДЫ!
Писал, да.
Что нибудь кроме лаба1 и лаба2 написал?
Да, развивается. Каждый месяц новый фреймворк, который надо знать. Вот типа FastAPI.
И в целом в тренде надо быть. Например если не знаешь новые фичи по тайпингу из 3.8, то ты заплесневел.
Одно счастье, в 3.9 так ничего не вкатили и в 3.10 не собираются.
Джанго ХЗ, но наверное особенности 3 версии тоже знать надо.
Как разрабы обычно узнают о новых фичах своего языка?
Спасибо
Я просто уже месяц в ваш питон вкатываюсь. И думаю: "а надо ли мне оно". Может в инженегрии остаться перспективным специалистом за 320 рублей в час. У нас с начала 00-ых (когда начали везде ПЛК ставить) ничего не изменилось. И то это изменение на мне косвенно сказалось.
Олсо напишу что меня бесит в ваших тредах:
Жалобы, что приходится думать и что вы пишете при этом всего 100 строчек в день. Я, например, могу 2-3 дня над чем-то поразмышлять, а потом как обезьяна месяц сидеть и реализовывать. И я вам в этом действительно завидую.
Добра тебе
И ещё вопрос. На моём заводе считается работать 60 часов в неделю - обычным делом (бывали месяца, когда я меньше 70 ч. не работал). А в целом по специальности если звонят в выходные, то обязан ответить иногда и если что зайти на совещание.
Слышал, что у программистов дикие переработки. Насколько дикие?
>иногда
лишнее
хотел написать, что такое и ночью бывает, но тогда если не предупредили, то можно говорить, что не слышал
>Слышал, что у программистов дикие переработки
Это зависит от конторы и очень зависит от ПМа. Если твой ПМ - бесхребетный слизняк, который не может или не хочет отстаивать интересы своей команды, то в тебя будут постоянно лететь блокеры, хуёкеры. Типична внезапная смена приоритетов, когда ты два дня корпишь над задачей, а потом она внезапно попадает в холд и надо срочно сделать вот это и вообще оно уже должно быть сделано вчера. В таких условиях твои попытки запланировать свои законные выходные дни могут быть смехотворными. Выходишь в субботу и не ебёт. Потому что НАДА.
>Типична внезапная смена приоритетов, когда ты два дня корпишь над задачей, а потом она внезапно попадает в холд и надо срочно сделать вот это и вообще оно уже должно быть сделано вчера.
Бля, это моя фирма на 100%. Особенно про вчера.
Но у нас поинтересней. Задача ПМа - выжать из тебя все соки, за как можно меньшие деньги. И обычна цена рабочих часов o-малое от срывания сроков (потому что твою работу ждет десяток других инженегров) или благосклонности заказчиков.
А за сотрудников впрягаются руководители отделов, их цель, чтобы работник никуда не ушел.
>а потом как обезьяна месяц сидеть и реализовывать
Обычно так и бывает. Месяц строчишь как угорелый, вываливаешь море функционального кода.
Спустя полгода надо добавить маленьку фичу или что-то подправить, ты открываешь код, ругаешься матом на того, кто этот говнокод высрал, неделями думаешь, как именно внести несколько строк кода, чтобы заработало и не развалилось.
Такое впечатления, что автор специально старался написать это максимально непонятно.
Объясните пожалуйста доступным языком, что такое свойство. Например в этой вот программе.
Суть вот в чём.
У тебя объект может иметь какие-то атрибуты, переменные, с которыми ты можешь работать напрямую
class MyClass:
____def __init__(self):
________self.num = 0
obj = MyClass()
obj.num = 123
Это не всегда хорошо, потому что у тебя нет контроля. Ты можешь некорректное значение присвоить, число не из диапазона или не число вообще. Может быть пользователь вообще не должен менять сам эту переменную - например, это счётчик количества вызовов метода и др.
Вот для этого и нужны property. Они для тебя как просто переменные объекта. Но реально прямого доступа у тебя к ним нет, он делается через сеттеры-геттеры.
Вот в этой программе у объекта нет переменной name. Но для пользователя эта переменная есть, всё выглядит так, как будто эта переменная есть. Но ты не можешь присвоить некорректное имя, пустое в данном случае. Ты можешь какие-то дополнительные действия делать, если меняешь имя.
В принципе это лишь синтаксический сахар, без сеттеров-геттеров это делается сознанием методов
setName()
getName()
и работой через них.
Лол, помню баловался шарпом в бородатые годы, там эти геттеры-сеттеры надо было руками прописывать на каждую хуйню, пиздец занятие.
Потом вроде добавили сахарку под это дело.
Где-то так, да.
В питоне нет свойств, тебя наебали.
Dekuji!
TypeScript первый придумал, c# сперла с TS как обычно, Java слизывает с C# но оооооооченб медленно и криво
Это связано с инкапсуляцией, если ты не в ооп, то тебе это нахуй не надо, чекай приватный и защищенный методы, а так это гавно без задач.
тупанул, есть последовательность beep сигналов разной длины морзе которая дается на вход, каким образом можно расшифровать эту последовательность? По факту, мне нужно узнать только длину этих сигналов, и дальше уже сопоставлять с алфавитом, но каким образом можно узнать длину сигнала?
Система: Windows 10
Версия питона: 3.9
Библиотека: только стандартная, нет возможности загрузить какие-либо дополнительные пакеты.
В буфере обмена лежит растровое изображение формата .BMP, а точнее скриншот, который туда попал после симулирования нажатия клавиши Print Screen.
Питоновский ctypes позволяет мне взять изображение из буфера обмена и сохранить его в файл, но есть одна проблема, выходной файл имеет большой размер.
После того как я конвертировал BMP в PNG библиотекой Pillow размер уменьшился до приемлемого без каких-либо потерь качества.
Собственно вопрос в том, как на стандартной библиотеке (Pillow в неё к сожалению не входит) возможно конвертировать BMP в PNG ?
Читаешь это. https://ru.wikipedia.org/wiki/BMP
Потом это https://www.w3.org/TR/PNG/
Пишешь свой конвертер из одного формата в другой.
Посчитать разность времени начала и конца сигналов? Да не, вряд-ли.
А как получаешь? Через микрофон? Ну так пиши стрим и анализируй любой либой что работает с форматом того стрима, что пишешь. Это примерно как найти начальную { и конечную } но другой формат данных.
Я уже месяц как вкатываюсь.
У меня была программа: 1 курс от Bioinformatics institute, теперь второй курс. ЕЩё алгоритмы почитал "grokhing alghoritms"
Потому что open() строит класс, одним из методов которого является метод .write() который что-то записывает в твоей файл.
Вызвать метод во время инициализации класса незя.
Но если очень хочется, то можно, просто вместо реального файла используй виртуальный.
Модуль io класс BytesIO() позволяет сразу что-то в виртуальный файл записать.
Я там какую-то хуйню на пирил прикрепил. Вот новая пикча.
Почему \n вызывает ошибку при вызове функции?
Потому что метод .write() экземпляра класса файла принимает только 1 аргумент, а ты передаешь ему 2 строки.
Напиши "some_function" + "\n" и ошибок не будет.
Понял, спасибо.
ну бывает если выделить название функции он тебе найдет файл где она объявляется, по-моему это весь функционал подобного рода
Душит своего пайтона.
Это DS, а не пайтон-программеры
Логикой. Тут же большая часть - описание полей для моделей и формочек, прочей, можно сказать, серверной версткой, а остальное все за тебя делается.
И суть даже не в том, что в Джанго ограниченые возможности на кастомизацию логики, а в том, что Джангоебы как правило ограниченные сами по себе и считают, что кроме их фреймворка ничего не существует.
Есть одна функция test, которая отдаёт bool или int
Как исправить код так, чтобы не вызывать её два раза:
if test(arg):
var = test(arg)
...
var = test(arg)
Как обычно, стоило спросить и сразу понял, что можно переменную присвоить до проверки...
как я понял, при запуске файла *.py интерпретатор вставляет вместо всех импортов код соответствующих модулей, вместо всех вызовов функций - код самих функций, а есть возможность посмотреть на код, который после всех этих махинаций получится?
не спрашивайте нахуя это мне
Как можно сделать это через регулярные выражения?
>Найдите все натуральные числа, не находящиеся внутри или на границе слова;
Заранее благодарю вас за помощь
Наверное тогда логичнее делать Optional[int]?
тут вопрос в том, что в JSON пары {owner_id : media_id}, а твой код вернет только уникальные значения owner_id без пары media_id, что, как сам понимаешь, нас не устраивает. нужен еще один какой-то хитрый ход.
тут вопрос в том что я тебя про массив спросил, а не про JSON
из json'а лишний owner вместе с media исчезнуть должен ?
внатуре долбоеб какой-то, если есть возможность до преобразования в джсон убрать лишние элементы, нахуя их из итогового джсона убирать
да, из JSON owner_id вместе с media_id должен уйти. сорян, если туплю.
вот так должно получиться: {'result': [{'owner1': 'media1'}, {'owner2': 'media2'}, {'owner3': 'media3'}]}
потому что важно сочетание owner_id: media_id. если из начального массива убрать лишний owner_id, то нарушается сочетание с media_id.
>при запуске файла *.py интерпретатор вставляет вместо всех импортов код соответствующих модулей,
Нет, не верно.
Интерпретатор "делает импорт" и запускает код из модуля только один раз. То есть если ты в нескольких файлах проекта импортируешь скрипт, то он выполнится лишь один раз.
Ты можешь легко в этом убедиться, вставив отладочный print в модуль.
В этом принципиальное отличие от #include в Си.
Импорт - это создание в памяти объекта-модуля.
тэйк э ченс оф мии
ну кстати import.reload() модуль импортирует еще раз
Смотри историю коммитов на гитхабе. Но обычно если проект уровня hello world, забивают на нормальные коммиты
напиши мне в телегу @chvmq
лвл джун это, к сожалению, реализация слабого бэка магазина (товары, корзина, заказ, покупатели и менеджеры) за 3 дня
Где ты видел джунов которые маназины делают за 3 дня? По твоей логике, за год выодит до 100 магазинов. Я мастеров-старперов с таким кол-вом не видел
>>885198
Как я понял задачу, должны быть только уникальные значения. То есть owner2 не должен выводиться вообще, поскольку дважды присутствует.
Я бы так сделал: https://ideone.com/sFIHqQ
Сначала считаем, сколько раз owner в owner_id присутствует, можно руками, но корректнее используя collections, потом проходим по owner и добавляем в вывод те элементы, число вхождений которых = 1.
Может быть Counter даже может какие-то ещё для этого инструменты имеет, но я слёту не вижу.
Если данные какие-то особо большие, то можно думать об оптимизациях, в зависимости от данных.
Например, если там словарь размером в сотни тысяч, а уникальных значений единицы, то надо иной подход использовать, чтобы не перебирать весь этот огромный список.
Используя синусы и косинусы, понятно же.
я так-то мимовкатыш, вообще про collections не слышал.
сделал вроде https://ideone.com/Kcxv9F, щас погоняю на данных, посмотрю где отрабатывает, где не отрабатывает.
>>885427
вот оно отличие профи от вкатыша. не сообразил, что можно сделать все сразу.
любая точка B (x; y), координаты которой удовлетворяют уравнению (x)2 + (y)2 = R2, принадлежит окружности радиуса R или в твоем случае (x)2 + (y)2 = (D/2)2
Сам не могу, я тупой.
https://pastebin.com/icMuXr3A
блядт почему-то удалилось на той хуйне, не понял
короче вот сюда кину как дурачок
<div class="message">
----- BEGIN MESSAGE -----<br />
O3eUssKKCz0Nj2p2JJLrI3dVxmcvBrUgkY0DgAdJZ3m9WB1wbDNJwQvU3xfuPZBZOrsURwtHqGGc8yy91cJoS59Mte684xYIPgtxDM4TjBWh0lhSnQ76M6I5bF353RDIYW5sz0cJsYQjaY1nFYjhVSdWn7RgOlOD8KWyBY7UNO3NCU17JbfvTih6fZcUbRo9saxTYvEC9xgCi7zR8EdRMkNS9QCbyQaQQyAFT47TselAbKi9flRSvvAvb3wzJxgqVGVFBToTXAjZbsZhDGZZ1ql3kHsT5zaR5WnxGCgu2qj3I8abF01wgcprKIaF7bm3XArt2xNUOWOmVOoqEfNLh32SB3nz4AtS0KbS8ODMBhZnVeEqjh2raV9CPn2KNmsEWtnV8QxAXnNJrh0BpSSqESSj6LTKXbeKvrvt8TTW6xvnFlPU4xbygTHcvrMjsRTN9e77XRTUef8JqNukbvIhfgkBxXKQEtuDysBl9l6dq4NHH8RIuqQzx00VNBCiUWMifeuepqiGlVdSUVreb7DzXukBWMJGzmPEq9IGqQcCCfkm0Bq2yUrmfBO1eoyDAd8QdHmuopWQu73lykdX5vabXO212qvsut9y1mSfBEWWCQ700bOWwOXjsPbl6wDrQDPHPxMg2y3ve0m520RoFEyYkz9hVCyB5e8LCLSu9LQeC2auSSInn7bxwbFiD3Jz8IaAjTVjuBoWtohb7QpkNrI9sdhW7Rl5pmvz6gIqIWd1bk390ijDARDSVLFSsROI4a70hGgPskHuuAtlJDP9ljS6UnPd4uMYuJOCfVhy5OTqfcCOGhNRqvObJtfEORt9q7BwTJVPoE5tHx7dFKVW6zXGT3axKtw1rYoax9PLDL4a92eEDZqzoe6886vIqSAIGOI4NoFg0AhZsluVaLlpPhnOeJmvsN3ZrCT4RpbHPix8tRTus5K8dYMixZDQCxFTZpOGEPekXBihj2CBXcz10c9o1C5tZBcPQQmlwqvkSEr1wUskXSbOVb2MEY6tp995Qlgc<br />
----- END MESSAGE -----<br />
</div>
Не робит.
Тут тоже хуйня вышла символы табов появились
Сюда залил короче
https://dumpz.org/aZ9BqaRWEWMn
извините за хуйню выше
Что document.querySelector('.message').innerText возвращает? Потому как ты запостил визуальное отображдение DevTools, и в зависимости от того, есть ли там linebreaks и любые другие символы типо табов в "сыром тексте" - регекс будет разный.
Можно, конечно, сделать более униваерсальный, но тогда производительность его будет раз в 5-7 хуже.
Сам разобрался. Достаточно использовать группировку.
Всем изучающим re modul рекомендую тег VERBOSE
Парни, мне приспичило добавить новый метод в объект, ноч-то я обсираюсь с реализацией
Кратко поясню что творится. Есть Присвоение вроде
self.employee_repository = CachedRepository(EmployeeRepository())
Как вы наверное поняли CachedRepository выступает как декоратор и работа с EmployeeRepository осуществляется через через небольшой набор методов этого декоратора. Мне приспичило его немного расширить, но вносить изменения напрямую в класс CachedRepository для одного моего кейса - уебанство. Я попытался сделать трюк вроде:
self.employee_repository.my_shitty_method = EmployeeRepository.my_shitty_method
Но закономерно обосрался, потому что этот метод первый принятый аргумент постоянно интерпретирует как self да и вообще я работаю с методом не того класса. Как это сделать нормально?
Не понял, но КО подсказывает, что надо сделать свой класс, унаследовав его от CachedRepository, и переопределить в нём нужный метод. Причём если не хочется переписывать весь метод, то можно его в твоём классе декорировать
class MyCachedRepository(CachedRepository):
____def shitty_method(self, args):
________do_some_stuff
________ret = CachedRepository.shitty_method(self, args)
________do_more_stuff
________return ret
как идея
>Как вы наверное поняли CachedRepository выступает как декоратор и работа с EmployeeRepository осуществляется через через небольшой набор методов этого декоратора.
Нет, не поняли.
Про super мы конечно же не слышали.
>>Чтобы за 3-4 вечера вкатиться и через неделю устроиться на новую работу
>Хорошо пошутил.
Человек имеет 20-летний опыт программирования.
>Человек имеет 20-летний опыт программирования.
Это не имеет значения. Питон сильно отличается от крестов или джавы, поэтому перекатится за пару дней не получится.
>Питон сильно отличается от крестов или джавы
Ой ну кому ты лечишь? Бейсик без номеров строк это
В принципе можно устроиться на работу на язык X, не имея никакого опыта работы на языке X. Особенно для таких языков, как питон, на C++/Java сложнее.
Но для этого надо иметь какую-то особую компетентность, нужную в проекте. Просто опыт программирования вообще ни о чём, слишком разные направления есть, ты можешь быть очень крутым в одном, но совершенно не знать другую область и у тебя просто мозги к другой области не подготовлены.
Всем. Ну в смысле очень многим.
Вообще, если когда ты долго пишешь на языке X, а потом за неделю учишь язык Y, ты потом будет на Y писать как на X. А ничего хорошего в этом нет.
Разные языки это разные возможности и поэтому разные подходы к написанию кода и проектированию программы.
>В принципе можно устроиться на работу на язык X, не имея никакого опыта работы на языке X.
Ну не совсем, исходники читал в разное время, естественно
> Особенно для таких языков, как питон, на C++/Java сложнее.
>
>Но для этого надо иметь какую-то особую компетентность, нужную в проекте.
Всё так и есть
>Всем. Ну в смысле очень многим.
>
>Вообще, если когда ты долго пишешь на языке X, а потом за неделю учишь язык Y, ты потом будет на Y писать как на X. А ничего хорошего в этом нет.
>
>Разные языки это разные возможности и поэтому разные подходы к написанию кода и проектированию программы.
Так я именно такую книгу и прошу, в которой будет объясняться не как hello world написать, а в чём нюансы устройства языка.
>Чем?
Динамической типизацией. Сама по себе она не сложная, но если ты до этого много лет писал на джаве, то будет очень сложно отвыкнуть.
Оно же просто декларативное для читаемости. Даже если ты объявишь типы питон не будет ругаться если ты положишь туда что нибудь другое.
Есть алгоритм на C++, там много файлов и h, и cpp, но графику гораздо удобнее прописать на python.
Как можно вызвать функцию в которую вложено дохуя других функций из питона?
Учить CLI нет ни времени, ни желания надо сдать проект в уни. Про C API знаю, но можно ли там, допустим, написать функцию, которая принимает аргументы из питона, форматирует их и вызывает нормальные cpp функции?
Есть специальные инструменты для контроля. Причём даже в рантайме можно контролировать.
Но это, конечно, не статическая типизация.
Статическая типизация там, где код компилируемый, и переменная отображается на машинный или байт код, и один тип просто физически не может быть заменён другим без специальных телодвижений.
В питоне же всё объект, а переменная это всего id этого объекта. Причём в случае иммутабельных типов вроде int при изменении значения переменной каждый раз меняется ссылка, потому что мы меняем сам объект, а не значение переменной в объекте.
С такой архитектурой добавить статическую типизацию без радикальной переделки платформы невозможно. То есть получается, что помимо id объекта переменная должна ещё хранить как-то его тип и сверять этот тип при каждом изменении значения. Это сложно, криво и накладно.
Любая фича имеет свои большие плюсы и минусы. Динамическая типизация в том числе. В той сфере, в которой используется питон, динамическая типизация скорее в плюс. Многие вещи на C++/Java просто рехнёшься писать, или же они там будут криво и неудобно сделаны.
Как вариант, в шапке есть книга intermediate-python.pdf (и epub возможно). Как раз про разные нюансы и фичи языка.
Хотя и этого недостаточно.
Во-первых полезно поднимать какие-то кишки.
Во-вторых просто нюансов недостаточно, потому что мало знать про инструмент, надо ещё уметь им правильно пользоваться. А это только с опытом приходит.
Потому что вот когда пишешь на одном языке, ты просто привыкаешь решать какие-то задачи одним способом, и даже уже не задумываешься. А тут тебе надо их решать совсем иначе. То есть ты можешь делать, как привык, но это криво будет.
Есть лист со словарями нада бы сдвинуть все значения в ключе ассет на пустые значения снизу ну мол если одно занчение пусто то один раз, если два - то два раза т.е. на кол-во пустых ключей последних
Та изи же
Вот есть принт первый там дву пустых внизу - это мой кейс
Нужно сдвинуть значения ключей вниз как на принте 2
Только на принте 2 я просто заменил первые 2 на последние а первые потёр но мне нужно именно сдвигать дальше оставляя вначале пустые
Так тебе что надо из питона с++ вызывать, или из с++ вызывать питон?
Это действительно удобно?
Не знаю, что ты видел, наверно, что-то вроде
def foo():
return 1, "qwerty", 2
Это не несколько значений, а одно, это кортеж(tuple), просто набор значений, коллекция. Здесь нет ничего такого, что было бы принципиально невозможно в джаве, просто в питоне это сделано так, что применять легко удобно и естественно. Да это применяют, но не сказать, что б прям очень часто
Но вот именно способ прямая противоположность джаве.
С одной стороны вон как легко и лаконично. А с другой думаешь, уж если где то можно запутаться в переменных, то в таких случаях.
Есть ли какие-нибудь несложные задания, которые оплачиваются?
Есть простое задание, сдавать туз в аренду, через пару лет будешь человеком. Базарю.
Но ты просто подумай, вокруг кодинга - щас хайп, каждый дебик стремится. Задумайся какая конкуренция, в би уже писали что это приводит к снижению зп. И задумайся, сколько анонов хотят того же, и вот, чем ты лучше дургих и почему именно ты?
> есть работа?
да есть. Причем всегда востребованая. И кстати, да, в перервых ты можешь таки кодить в свое удовольствие. Как хобби.
Спасибо ббро!
python3 manage.py runserver
python3 manage.py -- Тут все ясно, стартануть файл .py в python3
А вот к чему относится команда runserver я не понимаю?
В man python3 нет ключа runserver.
Как это работает?
Благодарствую. Поковырялся там.
Где взять инфу?
Конкретная задача:
Каждые 30 секунд запускать 100 одинаковых асинк методов которые отличаются только разными аргументами. Аргументы инициализируются один раз при запуске кода и записываются допустим в лист.
mcstatus + aiogram
5ку. Но я стараюсь прогрессировать.
Как достать этот словарь и записать в переменную чтобы избавится от List-a поверх него в одну строку, ну чтобы переменная была просто словарём а не словарём внутри листа
ну я могу циклом ФО но как-то тупо выглядит
Что же ты здесь делаешь богомерзкое создание? Зачем явилось в наш мир из глубин ада?
OwO
может оно тебе не надо?
двачую. без умения искать информацию сложно будет, особенно в погром-ироваии
Что функция брала как аргумент сет (лист/тупл) и рекурсивно повторяла себя несколько раз, ветвясь, каждый раз дополняя сет новым (но различным для разных ветвей) значением?
Для этого обязательно использовать копию или можно как-то иначе?
B(img="media/{}/{}/{}".format(title, number, i), chapter=A)
]), но выходит ошибка Cannot assign "<django.db.models.query_utils.DeferredAttribute object at 0x000001911DF299C8>": "B.chapter" must be a "A" instance.
chapter это форин на модель A
Решил через функция типа. for i in zip: a.obj.create(img="name", chapter=Chapter.obj.last())
но мне кажется это очень плохая практика.
А почему итератор должен работать с числом?
Ты можешь математически итерировать число? Нет? Ну и соси хуй, быдло.
Питон - один из самых близких к матлогике языков. Твоё возмущение непонятно. Это вполне логично что число нельзя итерировать.
>>КОКОКО У НАС ЯЗЫК БЕЗ ЧЕТКОЙ ТИПИЗАЦИИИ ВСЕ РАБОТАЕТ И ТАК ЗАЕБИСЬ
>>ПУК СЕРЕНЬК ЦИКЛ ФОР НЕ РАБОТАЕТ С ДАННЫМИ ТИПА ИНТЕДЖЕР)))))
>Пиздец параша, нахуй я только время потратил на эту недопарашу? Лучше попробовал доучить кресты.
Вкатывайся к нам, у нас всё ок с этим только вакансий нет
https://2ch.hk/pr/res/1831629.html (М)
У меня слаг в модели может быть неуникальным. То есть его уникальность идет только по форину в модель которую он привязан.
при попытке перейти по слагу я получаю ошибку, что получено 2 слага. как мне достать именно тот слаг, который мне нужен?
Обрабатываете таблички бабы сраки из бухгалтерии и на основании их делать ml модель, презентацию, power bi графику?
How can I solve this problem? I want the slug to be a number and django understands that along the path / book1 / 1 / you need to take a slug with number 1, which is tied to book1 specifically, and not to pay attention to the slug with number 1, but tied to book2.
if the slug is unique, then I calmly end up in the right book and the right chapter, but everything collapses when I need to get there as intended.
The path is built like this: / book1 / 1 (chapter) / etc. book2 / 1 / etc
class Book(models.Model):
some code
class Chapter(models.Model):
book= models.ForeignKey(Book, verbose_name="title", on_delete=models.CASCADE)
number = models.PositiveIntegerField(verbose_name="num chapter")
slug = models.SlugField(unique=True, verbose_name="slug_to", null=True, blank=True)
def save(self, args, kwargs):
self.slug = self.number
super().save(args, kwargs)
Views.py
class Base(View):
def get(self, request, args, kwargs):
book = Book.objects.all()
return render(request, "base.html", context={"book": book})
class BookDetail(DetailView):
model = Book
context_object_name = "book"
template_name = "book_detail.html"
slug_url_kwarg = "slug"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["chapter"] = Chapter.objects.filter(title=self.object)
return context
class ChapterRead(DetailView):
model = Chapter
context_object_name = "chapter"
template_name = "chapter_read.html"
slug_url_kwarg = "int"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["imgs"] = ImgChapter.objects.filter(chapter=self.object)
return context
urls.py
from django.contrib import admin
from django.urls import path
from .views import
urlpatterns = [
path("", Base.as_view(),name="book_list"),
path("<str:slug>/", BookDetail.as_view(), name="book_detail"),
path("<str:slug>/<str:int>/", ChapterRead.as_view(), name="chapter_detail")
]
html
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tf</title>
</head>
<body>
{% for i in book%}
<a href="{{ i.slug }}"> {{i.name}}</a>
{% endfor %}
</body>
</html>
book_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ book.name }}
{% for i in chapter %}
<a href="{{ i.slug }}">{{ i.number }}</a>
{% endfor %}
</body>
</html>
chapter_read.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ chapter.number }}
{% for i in imgs %}
<img src="{{ i.img.url }}">
{% endfor %}
</body>
</html>
How can I solve this problem? I want the slug to be a number and django understands that along the path / book1 / 1 / you need to take a slug with number 1, which is tied to book1 specifically, and not to pay attention to the slug with number 1, but tied to book2.
if the slug is unique, then I calmly end up in the right book and the right chapter, but everything collapses when I need to get there as intended.
The path is built like this: / book1 / 1 (chapter) / etc. book2 / 1 / etc
class Book(models.Model):
some code
class Chapter(models.Model):
book= models.ForeignKey(Book, verbose_name="title", on_delete=models.CASCADE)
number = models.PositiveIntegerField(verbose_name="num chapter")
slug = models.SlugField(unique=True, verbose_name="slug_to", null=True, blank=True)
def save(self, args, kwargs):
self.slug = self.number
super().save(args, kwargs)
Views.py
class Base(View):
def get(self, request, args, kwargs):
book = Book.objects.all()
return render(request, "base.html", context={"book": book})
class BookDetail(DetailView):
model = Book
context_object_name = "book"
template_name = "book_detail.html"
slug_url_kwarg = "slug"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["chapter"] = Chapter.objects.filter(title=self.object)
return context
class ChapterRead(DetailView):
model = Chapter
context_object_name = "chapter"
template_name = "chapter_read.html"
slug_url_kwarg = "int"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["imgs"] = ImgChapter.objects.filter(chapter=self.object)
return context
urls.py
from django.contrib import admin
from django.urls import path
from .views import
urlpatterns = [
path("", Base.as_view(),name="book_list"),
path("<str:slug>/", BookDetail.as_view(), name="book_detail"),
path("<str:slug>/<str:int>/", ChapterRead.as_view(), name="chapter_detail")
]
html
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tf</title>
</head>
<body>
{% for i in book%}
<a href="{{ i.slug }}"> {{i.name}}</a>
{% endfor %}
</body>
</html>
book_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ book.name }}
{% for i in chapter %}
<a href="{{ i.slug }}">{{ i.number }}</a>
{% endfor %}
</body>
</html>
chapter_read.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ chapter.number }}
{% for i in imgs %}
<img src="{{ i.img.url }}">
{% endfor %}
</body>
</html>
Бро, если найдешь как, скинь. Чота аж интересно стало.
>Как быстрее всего это сделать?
Конечно же, записать на курсы онлайн-программирования Skillbox! Это чудестные прикрастные курсы, где лудшие учетиля тибя научат прогромеровать и уже черз читыре дня ты получиш сиртефекат об акончании и можеш сразу же устроица на работу с зар платой 300к/наносек!
>питон не будет ругаться если ты положишь туда что нибудь другое
ИДЕЯ ругается, но только ворнингами, конечно.
Но вообще это довольно раковая хуйня. Особенно когда-то какой-нибудь восторженный еблан, радуясь охуенности питона, пишет метод, который возвращает кортеж из инта, строки, даты, говна, мочи, еще одной строки, неба и Аллаха, а ты потом разгребаешь это дерьмо в дебаге.
так не интересно
Датафрейм я считал, но как сделать итератор из этой штуковины, чтобы получить строку я нигде не нашел
И вся суть задания в следующем:
У меня есть таблица в эксель.
В ней 2 листа
Первый лист: params. В нём есть 3 группы столбцов. Каждая группа содержит 2 столбца: имя_параметра и значение_которое_надо_подставить
Второй лист: objects. В нём есть следующие столбцы: имя группы, __неинтересные столбцы, имя_параметра, __неинтересные столбцы, значение_параметра.
Цель - проставить все параметры из первого листа во второй. Как это можно сделать?
Представлю как чел с плюсов, будет в хуилион строчек пытаться добиться оптимизации, в то время как дзен питона говорит "простое лучше чем сложное, явное лучше чем не явное ".
По PEP8 тоже нужно выдрачиваться, не смотря на автокоррекцию IDE.
Что читать и учить чтобы вкатиться в эту сферу?
df1 = pd.read_excel('ЙОБА EXCEL', sheet_name=params)
df2 = pd.read_excel('ЙОБА EXCEL', sheet_name=objects)
возможно df1.stack() для свертывания в длинную
df1.merge(df2, on=[имя_параметра],how='outer')
how='outer' - тут ставишь методы которые тебе нужны (inner,left,right)
Есть объект collect
Есть метод fill
Когда вызываю collect.fill()
То внутри происходит замена полей и разная херня. Этот объект не присваивается никому, только сам себя обновляет. Как замокать его, чтоб он подменялся на этом методе на нужные мне данные?
всё чел ты заплесневел, в 3.10 запилят паттерн матчтинг как в расте
https://www.python.org/dev/peps/pep-0622/
beaufort = 6 # сильный ветер
is_raining = False # дождя нет
temperature = 16
if (not is_raining or beaufort <= 4) and temperature > 20:
print('Идём гулять, на улице хорошо')
else:
print('Сидим дома, читаем Практикум')
Я не понимаю, как правильно "прочитать" отрицание.
Если is_raining не равно False (т.е. равно True) (т.е. идет дождь)...
То Идем гулять...
Это же не логично!
>>Но закономерно обосрался, потому что этот метод первый принятый аргумент постоянно интерпретирует как self да и вообще я работаю с методом не того класса. Как это сделать нормально?
в статик метод заверни, я про декоратор @staticmethod , при таком декораторе первый аргрумент больше не self, но и self в теле фунции больше использовать нельзя
is_raining переименовываешь в not_raining и приравниваешь это к True, потом
if (not_raining or beaufort <= 4) and temperature > 20:
print('Идём гулять, на улице хорошо')
Так да, это логично и понятно.
Я не могу понять почему написано именно так, как в том примере, который я скинул. Так и нужно?
И, опять же, я правильно читаю if not is_raining:
Если is_raining не равно False (т.е. равно True) (т.е. идет дождь)
?
Если is_raining будет false, то есть дождя нет, то часть логического выражения в скобках будет true. И как будто бы можно идти гулять, если температура норм
Т.е, для совсем тупых:
В итоге мы имеем, что дождь как бы идет, но если температура норм - мы можем идти гулять?
(not is_raining or beaufort <= 4) and temperature > 20
(нет дождя или слабый ветер) и не холодно тогда идем гулять
т.е. в принципе мы согласны и в дождь гулять если ветер слабый, главное чтобы не холодно
равно как мы согласны и в ветер гулять если нет дождя, опять же лишь бы не холоднл
я лично когда в джаваскрипте не понимаю таких вывертов логики открываю консоль браузера и тестирую лол
Будь осторожен. Ты можешь кого нибудь обидеть такими высказываниями.
Умничка, так держать! У тебя все получится!
Так в самом условии стоит it_raining = False.
А в теле уже not is_raining (соответственно, not is_raining == True, т.е. дождь идет. Опять же, следуя логике, если отсутствие дождя it_raining = False)
Пишу не с целью доебать, просто пытаюсь понять, что я делаю не так.
После того как в начал тупить в редакторе - исписал весь лист а4.
И самое странное, что это же, блять, элементарно. Циклы, алгоритмы, рекурсия были намного проще. А тут какой-то пиздец.
Основное правило составления условий: для if ты пишешь положительное утверждение, для elif'ов - все остальное. Никаких ! или not в первой строке не писать, если это возможно. Поэтому:
if (is_raining or beaufort > 4) and temperature <= 20:
--print('Сидим дома, читаем Практикум')
else:
--print('Идём гулять, на улице хорошо')
Поэтому теперь ты можешь спокойно менять булку is_raining с False на True и следовать логике условия.
Этого >>889589 ни в коем случае не слушать, никаких переменных или методов с not в имени быть не должно, чтобы в коде никогда не было каловой массы вида if not is_not_registered()
> Основное правило составления условий
Алсо, если ты еще здесь, а где про такие тонкости можно прочитать?
Это Лутц, Кнут и т.д.?
Ну, это плохой пример. Ревью у вменяемого разраба он бы не прошел. Главное правило кода - писать так, чтобы его можно было легко читать. Потому в разработке 90% потраченного времени - это чтение того, что уже есть. Когда ты тратишь дохуя времени, чтобы вникнуть, что за хуйня написана в условии, то должна прийти разумная мысль переписать это говно.
>>889895
Такие тонкости переходят, что называется, из уст в уста в рабочей среде. Синьоры всегда подпнут джуна на ревью, говнокод не пройдет, что называется. Опять же, в разных коллективах разные нюансы по код-стайлу. Я помню, как в моей рабочей флудилке срались даже по поводу того, надо ли обосабливать ретурны пустой строкой. Спойлер: надо.
How can I solve this problem? I want the slug to be a number and django understands that along the path / book1 / 1 / you need to take a slug with number 1, which is tied to book1 specifically, and not to pay attention to the slug with number 1, but tied to book2.
if the slug is unique, then I calmly end up in the right book and the right chapter, but everything collapses when I need to get there as intended.
The path is built like this: / book1 / 1 (chapter) / etc. book2 / 1 / etc
class Book(models.Model):
some code
class Chapter(models.Model):
book= models.ForeignKey(Book, verbose_name="title", on_delete=models.CASCADE)
number = models.PositiveIntegerField(verbose_name="num chapter")
slug = models.SlugField(unique=True, verbose_name="slug_to", null=True, blank=True)
def save(self, args, kwargs):
self.slug = self.number
super().save(args, kwargs)
Views.py
class Base(View):
def get(self, request, args, kwargs):
book = Book.objects.all()
return render(request, "base.html", context={"book": book})
class BookDetail(DetailView):
model = Book
context_object_name = "book"
template_name = "book_detail.html"
slug_url_kwarg = "slug"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["chapter"] = Chapter.objects.filter(title=self.object)
return context
class ChapterRead(DetailView):
model = Chapter
context_object_name = "chapter"
template_name = "chapter_read.html"
slug_url_kwarg = "int"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["imgs"] = ImgChapter.objects.filter(chapter=self.object)
return context
urls.py
from django.contrib import admin
from django.urls import path
from .views import
urlpatterns = [
path("", Base.as_view(),name="book_list"),
path("<str:slug>/", BookDetail.as_view(), name="book_detail"),
path("<str:slug>/<str:int>/", ChapterRead.as_view(), name="chapter_detail")
]
html
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tf</title>
</head>
<body>
{% for i in book%}
<a href="{{ i.slug }}"> {{i.name}}</a>
{% endfor %}
</body>
</html>
book_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ book.name }}
{% for i in chapter %}
<a href="{{ i.slug }}">{{ i.number }}</a>
{% endfor %}
</body>
</html>
chapter_read.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ chapter.number }}
{% for i in imgs %}
<img src="{{ i.img.url }}">
{% endfor %}
</body>
</html>
How can I solve this problem? I want the slug to be a number and django understands that along the path / book1 / 1 / you need to take a slug with number 1, which is tied to book1 specifically, and not to pay attention to the slug with number 1, but tied to book2.
if the slug is unique, then I calmly end up in the right book and the right chapter, but everything collapses when I need to get there as intended.
The path is built like this: / book1 / 1 (chapter) / etc. book2 / 1 / etc
class Book(models.Model):
some code
class Chapter(models.Model):
book= models.ForeignKey(Book, verbose_name="title", on_delete=models.CASCADE)
number = models.PositiveIntegerField(verbose_name="num chapter")
slug = models.SlugField(unique=True, verbose_name="slug_to", null=True, blank=True)
def save(self, args, kwargs):
self.slug = self.number
super().save(args, kwargs)
Views.py
class Base(View):
def get(self, request, args, kwargs):
book = Book.objects.all()
return render(request, "base.html", context={"book": book})
class BookDetail(DetailView):
model = Book
context_object_name = "book"
template_name = "book_detail.html"
slug_url_kwarg = "slug"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["chapter"] = Chapter.objects.filter(title=self.object)
return context
class ChapterRead(DetailView):
model = Chapter
context_object_name = "chapter"
template_name = "chapter_read.html"
slug_url_kwarg = "int"
def get_context_data(self, kwargs):
context = super().get_context_data(kwargs)
context["imgs"] = ImgChapter.objects.filter(chapter=self.object)
return context
urls.py
from django.contrib import admin
from django.urls import path
from .views import
urlpatterns = [
path("", Base.as_view(),name="book_list"),
path("<str:slug>/", BookDetail.as_view(), name="book_detail"),
path("<str:slug>/<str:int>/", ChapterRead.as_view(), name="chapter_detail")
]
html
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tf</title>
</head>
<body>
{% for i in book%}
<a href="{{ i.slug }}"> {{i.name}}</a>
{% endfor %}
</body>
</html>
book_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ book.name }}
{% for i in chapter %}
<a href="{{ i.slug }}">{{ i.number }}</a>
{% endfor %}
</body>
</html>
chapter_read.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ chapter.number }}
{% for i in imgs %}
<img src="{{ i.img.url }}">
{% endfor %}
</body>
</html>
Нахер ты это спустя 30 постов репостишь? Просто бампани свой пост.
И нахер ты пишешь на ингрише?
Спасибо, мил человек. Добра тебе.
>pr
>не можешь в ангельский?
Да, конечно. От качества твоего "англесского" смеемся всем Гарвардом.
>а не высирал это
Высираешься тут только ты своей стеной говнокода без отступов. В шапке куча ссылок на шаринг кода, не хочу постить ссылку, хочу, чтоб скроллить полчаса надо было. Хотя что еще ожидать от мелкобуквы?
https://ru.stackoverflow.com/questions/1223352/Как-во-view-взять-нужный-slug-модели
вот тебе с отступами псина ебаная. Чтобы через 5 минут был ответи дан. Я с утра решения не нашел.
Мой ангельский понимают, мне похую, что он как у хача. Смысл же ясен.
Сттавлю сотку, что ты залетная чмоня не знающая разницы между списком и словарем
До внесённых изменений этот код нормально работал.
Я только импортировал подчёркнутый модуль и задал значение атрибутов в методе-конструкторе, который до этого, были = 0
Задание было таким: при создании каждый объекта класса должен получать случайный значения атрибутов. Я подчеркнул их красным.
Ошибок программа не выдаёт, но метод mood возвращает теперь только значение переменной m = "ужасно".
Подскажите, почему так?
Для всех объектов класса?
Разве метод-конструктор не перезапускается при создании каждого нового объекта?
да. для всех.
конструктор перезапустится, но значения аргументов hunger и boredom вычисляются единожды при загрузке модуля
>>890054
Спасибо за ответы.
Я импортировал модуль random внутри __init__ и там же присвоил случайные значение нужным атрибутам. Теперь, при создании, каждый объект класса получает разные атрибуты.
Потом подумаю как написать красивее, пока вот так.
Но я выявил новую проблему:
Методы eat и play не меняют значение этих атрибутов.
На что обратить внимание?
Нашел в чём была проблема. Глупая ошибка.
>Кто-нибудь сталкивался с таким видом даты: image_date = "2011-12-04T21:33:40.000Z"?
Да.
>Можно ли как-нибудь распарсить ее через datetime
Через dateutil.parser.parse()
То, что надо. Спасибо.
Пользовался сам? Для меня оно показалось каким-то замудренным. Надо через Фейсбук создавать какое-то приложение, давать разрешения, получать временные токены.
>получить количество лайков и комментов, используя Selenium
Это как забивать гвоздь кувалдой, когда есть молоток.
Используй requests, юный падаван.
Ты уверен? Пытался инспектировать элемент? Если там не йоба сложный js-скрипт, они просто прячутся в данных элемента.
Обожаю, когда человеку прямым текстом что-то говорят, например "недопустимый символ 'а' в строке '1254а', преобразование в число невозможно", а он спрашивает: "Чего это от меня шайтан машина хочет?"
как я понимаю, когда i=1, то он хочет сложить 1 и 2 индексы, но не находит число на втором индексе, но он же должен был добавить число, когда i был равен нулю.
Достаточно давно изучаю и пишу всякую хрень на питоне и, по моим ощущениям, знаю его синтаксис и функциональность, ну как минимум, на уровне джуна, а вот с проектированием и реальными проектами трабблы дикие.
Грубо говоря, SOLID и базис я знаю, и в принципе соблюдать умею без особых проблем, нюанс в том, что когда дело доходит до действительно модульного проекта, я просто теряюсь, не понимаю с чего начать и, зачастую дропаю, либо начинаю говнокодить с точки зрения ООП забивая на SOLID напрочь. С одной стороны, это неудивительно, а с другой, хочется чето менять.
Проблема imo в отсутствии опыта в работе над хоть сколь-нибудь серьезными вещами в команде, сам себе программируя опыта хорошего кодинга не наберешься. Пытался читать проект на хабе, и это ужас. Даже несколько десятков связанных файлов вызывают приступ нечетаемости, ибо просто невозможно разобраться в идеях создателей, в особенности если классы очень хорошо сделаны в плане абстракций, а строчки импорта доходят до 30-40 строк. Непонятно откуда и куда читать, если особенно если это распределенная асинхронная система.
Короче, как такое бороть? Где искать задания по проге не аля "Напишите программу, которая создаст два класса животных и рассчитает ежедневную необходимость в количестве корма", а более менее реальные кейсы, хоть с каким-нибудь ТЗ, и желательно, примерами кода, который должен был по итогу получится. Где искать конфы таких же рофло-челов, как и я, которые пытаются в код и работают над своим проектом? Хотел бы я в опен-сорс коммитить, но проблема выше не позволяет. Да и кому я со своей экспой нужен там
Извиняюсь за длиннопост, коллеги. Кстати, если у кого есть свои проекты подобного рода, буду заинтересован.
Очевидно, первая a запоминается до генерации второго списка, после чего ты начинаешь с нею работать. Уже на второй итерации итератор спрашивает третий элемент a, но у нее их всего два.
Ты не можешь одновременно итерировать массив и тут же его менять в процессе. В твоем случае питон просто запомнил первую декларацию a, а потом начал создавать вторую a, но по окончании, если бы все закончилось успешно, просто перезаписал бы ее.
Тебе нужно создать пустой список, а потом аппендить его в цикле ренжа, причем каждый цикл список будет пополняться на два числа: первым, равным сумме двух последних имеющихся в списке, и вторым, равным сумме первого и того, что перед ним.
Возьми какую-нибудь не сильно сложную задачу, которую нужно решить лично тебе и сделай все по правилам.
Придется 2-3 раза все переписать с нуля, но экспа появится, базарю.
Мой личный пример - делал для себя быстрый интерфейс на Tkinter для ffmpeg чтобы быстренько нарезать шебм для двача, кек.
С первая версия была лютым говнокодом, с третьей попытки получилась конфетка.
Можно даже оформить и выложить во всеобщий доступ, совсем не стыдно будет, но мне лень.
Такие дела.
Спасиб за ответ, думал над этим. Проблема, собсна, в том, что отсутствуют личные задачи, которые я мог бы решать. От нечего делать пытался в написание нормального DS-бота, и тупо стакнулся, рерайтов там была хренова гора, но по итогу все в одно говно скатывалось. Собственно выше потому и спрашивал про всякие кейсы.
Энивэй, за ответ спасибо. Кстати, есть конфы / места где челы делятся своими проектами / ищут группы? Или все сами друг-друга на хабе ищут и находят? Новый во всем этом прогерском окружении, сорян за тупые вопросы.
>Хотел бы я в опен-сорс коммитить, но проблема выше не позволяет.
Как раз самое то в попенсорс контрибьютить. И код твой обоссут, и тесты написать попросят. Пока не сделаешь все красиво, пр не примут. Тебе понравится.
В очелло ебать не будут?
Понял, принял, пошел искать интересные репы.
Как это сделать?
Я хуйню спизданул, прости.
Вот метод генерации списка Фибоначчи:
def fib_list(length: int) -> list:
--lst = [0, 1]
--for i in range(length - 2):
----new_num = lst[-1] + lst[-2]
----lst.append(new_num)
--return lst
>Как быстрее всего это сделать?
Конечно же, записаться на курсы онлайн-программирования Skillbox! Это чудестные прикрастные курсы, где лудшие учетиля тибя научат прогромеровать и уже черз читыре дня ты получиш сиртефекат об акончании и можеш сразу же устроица на работу с зар платой 300к/наносек!
Двачую слово "лучше" и с натяжкой "перспективнее". Джава, к сожалению, слишком популярна.
K P A C U B O
Уже проебал на джавараш 14к, но так ничего и не выучил. Спасибо, не надо
туплю очень сильно, попробую разобраться, спасибо. Но на всякий случай еще поищу что-то локальное
Пистон на хайпе среди вкатышей, но работы меньше чем на джаве.
https://medium.freecodecamp.com/so-whats-this-graphql-thing-i-keep-hearing-about-baf4d36c20cf а я на полном серьезе читаю.. так если это шутка, что делать то?
Напиши нормальный рест и разбей на несколько роутеров по бизнес логике приложения.
Лучше синтаксическими особенностями. У решетки есть автосвойства. У решетки есть божественный Linq. А у твоей жабы есть Linq? А? А?
>На жабу вакансий вроде больше
Я про это и написал.
>денег больше
Не зависит от языка вообще (если это не хтонический Кобол в двух с половиной компаниях на весь мир).
>Чем перспективнее?
Как минимум тем, что делает свою родную замену говноЖСа.
Боже, какую же несусветную чушь задают на этих ваших говнокурсах.
И ведь преподносят как "ЭТА ШТОБЫ РАЗВИВАТЬ СМИКАЛАЧКУ И НАГРУЖАТЬ МОСК ПОИСКОМ РИШЕНИЯ ЗОДАЧИ".
Но ведь можно давать задачи, которые действительно имеют отношение к будущей работе.
У моей жабы? Если б я писал на жабе, тут бы не сидел и людям моск не ибал.
Бесит, что на шарп в вакансиях требуют ещё и жс
Погугли REST
не сразу заметил
спасибо спасибо спасибо
>хочу вкатиться в программирование и начать зарабатывать деньги. Как быстрее всего это сделать? Английский не знаю
Тогда твой путь с низов - идешь в тестирование, растешь до автоматизации, перекатываешься в дева, если захочешь.
потому что, сука, буфферинг не может быть "\n". используй именованные параметры тогда newline="\n"
Опыт работы, в QA легче возмьмут, если просто в IT шаришь и немного кодить умеешь.
заебись задачки, простенькие, но со смекалочкой. иначе макакой будешь работать всю жизнь.
>Но ведь можно давать задачи, которые действительно имеют отношение к будущей работе.
Ты и в школе, наверное, отказывался математику и физику учить, типа задачки, которые решать заставляют, не имеют отношения к будущей работе.
Про то, что у тебя ошибка в suka тебе уже сказали.
suka можно переписать в одну строчку:
def suka(s, line):
____return set(line) >= set(s)
ну и естественно заинлайнить можно после этого
ощибку я там по невнимательности сделал, потом исправлять не стал, чтоб номерочки строк остались. а дурилка сам бы нашёл её, при обдумывании происходящего.
кстати, у тебя охуенный финт со сравнениями множеств, моё почтение.
Смотри документацию на множества в питоне
https://docs.python.org/3/library/stdtypes.html#set
С ними иногда можно проделывать довольно много финтов, куда более интересных и практичных.
set("word") - создаёт множество (set) из итерируемого типа, в данном случае из строки, соответственно получится множество букв-символов
для множеств переопределены логические операции, как & (пересечение), | (объединение), ^ (разница).
Для них же переопределены операции >, >=, которые показывают, что одно множество покрывает другое, то есть все элементы одного множества содержатся в другом множестве.
Для тех, кто изучал математику, вещи интуитивно понятные и магии тут особой нет. Надо только помнить факт, что такое поддержано в языке.
В целом иногда довольно полезно быстро проверить, что все элементы какого-то множества содержатся в другом множестве (в списке разрешённых значений, например). Вместо того, чтобы оформлять цикл, можно вот такой финт использовать.
Спасибо, понял.
Подскажите, эксперты, такой код имеет смысл или нужно писать нормальный пинг с сокетами и пакетами?
Под нормальным пингом ты имеешь в виду icmp? Это вообще не в тему.
В принципе, у тебя норм. Скопируй только все оригинальные заголовки из хрома + компрессию + таки лучше гет, а не хед.
В школе я был тупым рабом своих родителей, у меня таких мыслей даже сформироваться не могло. А так да, физику, изо и обж с биологией бы нахуй выкинул из своего курса.
>реализация слабого
Не полный функционирующий магазин, а понимание что куда и как взаимодействует хотя бы, минимум я там обозначил
>(товары, корзина, заказ, покупатели и менеджеры)
@Flake_DVR
У тебя апи само по себе? Или к чему-то? Вот в зависимости от того к чему твоё апи и что делает и надо делать выбор.
>Хочу написать рест апи на питоне
Какое-то бессмысленное предложение. Рест - это архитектура взаимодействия сервера и потребителя посредством их общения через рест-запросы. Рест уже существует, как ты его напишешь? Это как сказать: "Хочу сделать барокко с с помощью строительных материалов Леруа Мерлен".
Ладно, мистер зануда, хочу написать программу на языке питон, обрабатывающую хттп запросы в рестфул манере. Что там в вашем снобском клубе используют для таких целей?
Для начала скажи, будет ли у тебя ГУИ в виде http-страничек с кнопочками? Или это просто бэкенд-общение через консольку?
Ты вообще съеби в ужасе, мелкобуква.
я бы с ней помурлыкал
Единственное, что делает твоя программа, это "обрабатывает рестфул запросы"?
И зачем тебе именно рестфул?
Ты определись, на чём тебе делать функционал твоей проги. На том же сделаешь и апи.
Результаты импорта не одинаковые. В пером иморте обращение к функициям и классам будет как views.zalupa() а во втором просто zalupa()
Это замшелый баззворд.
Просто вызов функций через роуты и методы хттп, и то второе не всегда.
В QA задачи немного другие.
def f(x):
if x > 0:
return x
else:
return 0
Когда туда передается число, все норм. Когда передается numpy массив, то нет. Как разруливать такую ситуацию правильно?
Это вполне серьезный ответ.
np.all(x > 0)
Посмотрел уроки по Python - после нескольких курсов вроде как понял основы.
Учу Джанго - не понимаю паттерн создания сайта. Какие уроки и какие книги могут помочь.
И еще вопрос - хочу сделать сайт - стриминговый сервис, по типу GoodGame . ru, что нужно изучать чтобы сделать такой сайт?
В нее передаются объекты re.match, те же, что и при обычном поиске. Понимать что с ними должен ты, а не функция, лол.
>стриминговый сервис
Большие ресурсы для этого нужны (хороший сервер+трафик), изучать системные вещи, nginx, docker, ffmpeg, протоколы вроде rtmp/rtsp. Если питон использовать, то изучать сети и asyncio.
Если тебя впечатляют такие однострочники, посмотри:
http://dabeaz.com/py3meta/
Ближе к концу видео он импортирует xml файлы, то есть:
import file
будет помимо file.py искать еще file.xml и загружать его как модуль.
Ты охуенный.
Хочу сделать юрл типа /title/number. Если перейти в /title/, то все ок, джанго находит такое совпадение, но когда перехожу с title/ на title/number выдается ошибка. Хотя в локальных переменных я вижу , что kwargs получил мой title и number, но почему-то не нашел
https://pastebin.com/TSUWTj8T
Он гад новую книгу пишет, но не родит никак.
> The vectorize function is provided primarily for convenience, not for performance. The implementation is essentially a for loop.
@np.vectorize
def vectorize(x, a=0):
....return 0 if x < a else x
%timeit vectorize(arr)
2.23 ms ± 22.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.where(arr < 0, 0, arr)
63.9 µs ± 310 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
А я думал key-value.
if (row.pole == 'znachenie') {
}
А в питоне как с этим быть? if json['pole'] == 'znachenie' ?
Есть код:
import fileinput, string, sys
def replaceLineInFile(fileName, sourceText, replaceText):
file = open(fileName, "rb")
text = file.read()
file.close()
file = open(fileName, "wb")
file.write(text.replace(sourceText, replaceText))
file.close()
print("All went well, the modifications are done")
new_camera_distance_value = bytes(input("Enter new camera distance value:"), encoding="ascii")
replaceLineInFile("client.dll", b'1200', new_camera_distance_value)
Это для отдаления камеры в доте.
Пикрил - как должно быть
У тебя 1200 может встречаться ранее в файле, replace заменит первое совпадение только. Тебе нужно сначала найти позицию "Maximum visible distance" и уже начиная с нее заменять.
Вообще странно, что значение в виде строки, а не в бинарном формате, может быть ты нашел display значение, которое меняет только то, что отображается где-нибудь в менюшке, но не само отдаление камеры.
Я не понимаю ничего в питоне и кодинге в целом, ни слова не понял из того, что ты сказал
>replace заменит первое совпадение только
https://docs.python.org/3/library/stdtypes.html#str.replace
obj = json.loads(stroka_s_json)
if obj['pole'] == 'znachenie:
В JS тоже самое, тебе сначала надо строку в объект превратить с помощью JSON.parse(stroka_s_json)
anim.save('triangular_corr.gif')
Почему при вызове plt.show() анимация проигрывается с нормальной скоростью, а после сохранения в файл становится очень медленной?
Довольно хуевая идея так делать с бинарниками.
Вот тебе хорошая заготовка, надеюсь разберешься.
https://ideone.com/F2DAwX
Должно быть попутал с каким-то другим языком, где replace заменяет только один раз.
Я что с ними делать понимаю. Просто не могу понять, как он берет аргумент в функцию, как он понимает что я в m хочу передать все слова на "х", я же явно это нигде не указываю, вроде бы. Я наверное, что-то не понимаю..
Сори за тупой вопрос, а почему ты вручную не можешь поменять, просто найди строку которую хочешь поменять и поменяй, врятли это в игре, что-то изменит, но строчку можно и вручную поменять
Вторым аргументом sub ты ставишь строку, на которую заменяется каждое совпадение, или функцию, в которые они передаются и заменяются на результат этого вызова.
Ну да в документации так и написанно примерно
(If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.)
Просто интересно как именно она это делает, ладно забей, я думаю в соусе можно найти как она это делает.
Что значит как. Проверяется тип аргумента, если это функция, то она вызывается. Это банальный коллбек, дохуя где используется.
help(np.covariation)
Ну я недавно изучать питон начал, и первый раз такое увидел
Как называется различное поведение одного и того же метода в разных классах?
экз в шараге, в интернете такой хуйни вообще нигде не найти
Он не про то спрашивает, а про реализацию кастомного класса, для которого работает искаробочный len, например.
Это перегрузка, не?
А то чего в питоне нет, как раз полиморфизм, лол.
Пчел,
>Перегрузка методов – это объявление в классе методов с одинаковыми именами при этом с различными параметрам
В питоне нет Java/C-подобной перегрузки, типа
def a(a: int):
--return a
def a(a: int, b:str):
--return a, b
Код сразу пошлет нахуй при попытке вызвать a(5).
>про реализацию кастомного класса, для которого работает искаробочный len
Это вообще переопределение метода класса.
Ты меня ошарашил, всю жизнь я думал, что полиморфизм это как раз первое, а второе перегрузка, и так же оно работает в том же шарпе, про жабу не знаю.
> A class can implement certain operations that are invoked by special syntax (such as arithmetic operations or subscripting and slicing) by defining methods with special names. This is Python’s approach to operator overloading, allowing classes to define their own behavior with respect to language operators.
ИНКАПСУЛЯЦИЯ - ЭТО СОКРЫТИЕ
Ну это надо почитать какой-то ебанутый жаберский или шарперский кирпич, где половину объема занимают рассказы кто родил кого. В скриптоте мне это не очень интересно - как работает и для чего нужно понятно, а больше и не особо надо.
Ну, если твой потолок - питоноскрипты, то да, ООП не нужен.
Но на будущее: ни одно интервью не обходится без "трех китов ООП".
Сначала надо ебать байты в си, потом ебать абстрактные фабрики, а потом можно уже на пенсию спокойно писать питоновские скрипты.
>В нем перегрузка достигается костылением через необязательные (дефолтные) параметры.
Это не костылирование. Просто перегрузка в стиле C++ и дефолтные параметны несовместимы концептуально и технически.
Ну или очень сложно совместимы, с кучей потенциальных граблей.
При выборе одного из двух я однозначно за параметры по умолчанию. Одна из фишек, за что я просто дико люблю питон, чего не хватает в других языках.
>Просто перегрузка в стиле C++ и дефолтные параметны несовместимы концептуально и технически
Вообще дефолтные параметры и перегрузка несколько разные вещи.
Перегрузка нужна, чтобы разные функции вызывать в зависимости от типа параметра. С учётом, что питон динамически типизируемый, это довольно сложно сделать на уровне языка.
В таких случаях извращаются скорее с isinstance, чем с дефолтными параметрами.
Нет, не одинаков. В первом атрибут класса, во втором аттрибут объекта, у каждого объекта свой.
data = {'TaxPayerVATNumber':'123213213123'}
class TestModel(BaseModel):
tax_payer_vat_number:str
class Config:
alias_generator = to_camel
allow_population_by_field_name = True
arbitrary_types_allowed = True
to_camel не проглатывает.
def to_camel(string:str):
return ''.join(word.capitalize() for word in string.split('_'))
Точно!
>Правильно ли я понимаю, что 1 и 2 вариант, абсолютно одинаков
Нет, варианты 1 и 2 совершенно разные.
В варианте 1 у объекта не создаётся переменная, name переменная класса. Просто питон видит, что переменная объекта не определена и обращается к переменной класса. Как только ты сделаешь self.name = '' или a.name = '' эта переменная будет создана.
Тебе тоже спасибо.
Можете объяснить, почему в данном коде не идет повторения того, что ввел пользователь? Я сделал так, чтобы не выводился "quite" при завершении программы, но при этом, теперь не выводится вообще ничего.
После нескольких тестов заработало само. Класс. Почему-то, на https://www.programiz.com/python-programming/online-compiler/ не всегда выводятся ответы.
Встал другой вопрос:
Почему если if убрать из цикла, он не будет нормально работать?
https://ideone.com/5a4U4p
Лучше юзать repl.it, твой интерпретатор какой-то конченный и работает через жопу.
>Почему если if убрать из цикла, он не будет нормально работать?
Что в твоем понимании "нормально работать"? Он работает именно так, как написан.
>Что в твоем понимании "нормально работать"?
Это будущий заказчик подрастает. Готовится к написанию задач.
Описание в Джире:
%Фичанейм% работает неправильно. Надо, чтобы нормально работала.
>%Фичанейм% работает неправильно
Слишком подробно, можно догадаться.
Лучше
>НИЧЕГО НЕ РАБОТАЕТ!11!!1!!!
> Будет
Тогда я не могу понять, почему если message = input(prompt) и для if тоже, print(message) не выводит то, что вводится пользователем.
Потому что код не доходит до if. Он в цикле while. А while выполняется заново бесконечное количество раз (до StackOverflowException, конечно, но не в этом случае), пока он True.
Большое спасибо! Действительно забыл про бесконечность цикла.
И всё что я могу, так это писать примитивные скрипты. А ещё фрэймворки, паттерны, миллион библиотек, алгоритмы, и всякие книги "программируем как профи" и т.д.
Я думал у вас попроще
Теория автоматов, гит и прочая инфа, что студентики учат 4 года в своих вузиках
Попроще чем что? Дома никогда не научишься кодить, твоя цель устроиться на работу, а для этого упор делай чисто на фреймворки, зазубривание теории и типовых вопросов для вкатунов.
мимокрок
This, а еще пора пилить свой пет-прожект. Похуй что, что взбредет в голову, хоть напоминалка дней рождения, читающая из csv-файлика, которую можно бесконечно наращивать новыми фичами, лишь бы нарабатывать практику кодинга.
в каждом словаре пиздец много ключей-значений, нужно фильтронуть этот лист словарей только оставить в словарях все ключи 'name' и их значения
пишу:
data = [item for item in data for k, v in item.items() if k == 'name']
Получаю исходный лист словарей нихуя не фильтрануло :/
Что ему ему не так?
Пет-прожект слишком громко для миллионого калькулятора. Достаточно выполнить тестовые уровня запилить систему абитуриентов и залить их на гитхаб.
Бле понятно что ему не так
Он просто видит в словаре ключ name и оставляет весь словарь item
Как добиться желаемого эффекта?
Есть класс A, у него есть переменная classvar.
Создаём экземпляр этого класса objA, у objA есть переменная classvar.
Изменяем значение переменной КЛАССА (не экземпляра) на другое значение. Почему значение меняется и уже созданных экземпляров? Это как-то связано может с ссылками на память? Мол, все экземпляры хранят именно ссылку на память, и при изменении переменной изменяется содержимое в памяти, при этом другие экземпляры всё ещё ссылаются на ячейку?
Есть один курс, и есть одна простая задачка. Собственно, задачка решена, но криво. Препод курса делает вот такую вещь в решении, которую до этого вообще не показывал - потому и я её нормально назвать не могу (привязывание списка к строке?).
Прошёлся по книжкам - не нахожу чёт.
Подскажите, анончики, как это называется. Прикреплейтед.
Разве это не создание листа и потом вытаскивание его элемента?
v = [1,2,3]
v[1]
сначала ты создаёшь лист "[]", и потом вытаскиваешь значение из созданного [1]
Бля, вот так работает, как сделать в одну строку по типу что выше закоментировано?
Вроде, нет. Ни элемента такого в списке нет (это строка выше), тем более это не является номером элемента в списке.
Всмысле нет? раздели на несколько переменных
mySuperList = ["сыр", "кетчуп"]
myElement = mySuperList[1] (присвоить первый элемент листа mySuperList, то-есть кетчуп)
Только тут это сразу делается
mySuperElement = ["сыр", "кетчуп"][1]
(грубо говоря переменной mySuperElement сразу присваивается значение листа который ты задаёшь прямо в переменной)
сабскрипт оператор
Хочу в бэк программирование вкатитсья, что можете посоветовать для питона?
Потому что переменная classvar одна на всех, в этом и суть переменной класса.
Днём было про это уже.
Питон, когда ты спрашиваешь переменную объекта, смотрит сначала, не определена ли эта переменная для объекта. Если определена, то использует её. Если не определена, то смотрит, не определена ли для класса эта переменная.
При этом если ты попытаешься изменить значение переменной объекта, записать что-то в переменную, которая определена для класса, но не объекта, то переменная класса не изменится, а будет создана переменная для этого объекта.
То есть переменная класса это переменная по-умолчанию и только для чтения.
Понял, спасибо.
Хочу сделать такой мини проект, чтобы мозги размять немного, сам не программист, но на работе ебошу иногда скрипты в юпитер ноутбуках, поэтому в целом понимаю что и как, но с какой стороны подойти не знаю.
Хочу раз в n времени проверять есть ли новые посты в паблике в вк. Если есть то проверять содержит ли пост указанный текст. Если содержит, то кидать пуш / смс или любое другое оповещение пользователю. В идеале бы это все оформить в бота в телеге с юзер френдли интерфейсом, чтобы не программист тоже мог воспользоваться, заранее благодарю за советы
Создай standalone приложение для ВК, получи токены и разрешения использовать АПИ, проделай то же самое с Телеграм. Если бот будет просто чекать посты ВК, то асинхронность не обязательно использовать, а то щас aiogram популярна библиотека. Я в этой асинхронности плаваю как кал сцуко.
Найти бы упражения для отработки асинхронности, многопоточности и всей этой хитрой хуйни. Может кто видел? Можно и для другого языка, главное задачки.
>Ни элемента такого в списке нет (это строка выше), тем более это не является номером элемента в списке
А ниче, что строка выше - это переменная, равная выполненной функции eval, что есть int?
>Найти бы упражения для отработки асинхронности, многопоточности и всей этой хитрой хуйни
В питоне я вкатывался в асинхронность через создание десктопных приложений посредство PyQt. Как известно, приложение по умолчанию работает в одном потоке, и если у тебя есть кнопочка "Просканировать пидоров вокруг", занимающая 10 секунд на выполнение данной операции, то после нажатия на нее десктопное окно попадет в состояние "Не отвечает", пока не пройдет 10 секунд, после чего оно одуплится. Поэтому любые функции должны отрабатываться в отдельном потоке, для чего в Qt есть встроенный QThread. Вот можешь с него начать.
Но в питоне асинхронность пилить довольно заебно.
Вот то ли дело в шарпе, ммм:
public async void ScanFaggotsButtonClick()
{
List<string> faggots = await Task.Run(() => ScanFaggotsInArea(10))
}
>Ну за решение в 1 строчку я бы тебе ебнул бы, лучше пиши в несколько строк конкретно это решение потому что оно очень просто читается и с первого раза понятно что происходит, а в 1 строчку ты заебёшся вчитываться в эту сточку ебаную, там же блять лист компрехеншен в методе экстенд у листа и потом [0] сразу хуй пойми чего делает этот 0
>Годно выглядит
В случае 'key1' выглядит как полный пиздец, потому что проще напрямую обратиться по ключу key1, чем в цикле проходить по всем ключам и сравнивать с key1. Такое распечатывать и на стенку вешать как шедевр программирования.
Хотя в исходном ТЗ, как я понимаю, надо не по набору ключей, а по чему-то типа регулярки тестировать, тогда такое уже нормально.
Но если будет регулярка или какая другая сложная проверка, то в одну строчку уже не запихнёшь, или уж очень тяжеловесно будет.
data = [{"name": "John", "age": 12}, {"name": "Jane", "age": 24}]
result = [{"name" : obj["name"]} for obj in data if "name" in obj]
>Хотя в исходном ТЗ, как я понимаю, надо не по набору ключей
Мне нужно было именно по ключу, эта вся хуйня нужна чтобы выдрать из REST нужные мне данные, собрать в словарь и из словаря запилить CSV по шаблону а она удобно пилится csv.DictWriter со словарями
>в асинхронность через создание десктопных приложений посредство PyQt
Это всё-таки многопоточность, асинхронность это то, что через asyncio.
Но в неё тоже вкатиться не так просто, имхо лучше с других языков начать с этими технологиями играть.
Я бы посоветовал или JS, или Go глянуть на предмет конкурентного программирования.
В JS промисы и async/await намного более предсказуемые, чем в питоне.
Roger that, bro. Go go go
По-моему, всё правильно делает.
Ну зазипуй словари, но всё равно какая-то хуйня, какой смысл вообще?
ну такполучилось что у меня листы с диками. Нужно их записать.
Есть вариант запихнуть всё в один лист но как-то сложно.
алсо zip не помог, оно кортеж делает а writerows их не ест
Кол-во одинаково в обоих
разные нужные заголовки в разных словарях, тут либо слить пытаться в один словарь либо хз
Для начала сформулируй, что ты именно хочешь. И пример, как это в таблице будет выглядеть.
Потому что тут в одном списке три элемента, в другом два элемента, и визуально они никак между собой не связаны, не пересекаются по каким-либо значениям.
Руками список собери в случае чего.
Вот тут нагляднее
Я попытался слить в один словарь но не вышло правильно.
У меня есть 2 словаря из которых нужно слепить один csv
>Это всё-таки многопоточность, асинхронность это то, что через asyncio
Можешь пояснить языком даунов (хоть как в том примере про электричество и говно), в чем разница?
Мимо
Да это не имеет смысла, специально сделали враппер, чтобы красиво выплюнуть всё по ключам, а ты хочешь это через жопу провернуть для своего наркоманского случая. Делай построчно тогда без этих удобств.
В случае тредов ты запускаешь задачи, а переключение их происходит в случайные моменты времени. У тебя есть проблема thread safe кода, в остальном тебе адаптировать код не нужно.
asyncio требует основательной переработки кода, принцип асинхронности такой, что задача сама должна отдать управление циклу обработки задач. Обычно ты это делаешь тогда, когда блокируешься на сокетах. Оператор await для задачи позволяет отдать управление, но есть нюансы. В целом асинхронность такая удобнее, чем через треды, более производительная, но нужно, чтобы код поддерживал.
Библиотеки вроде Qt не поддерживают asyncio.
Держи в курсе.
Можете чекнуть мой гитхаб и сказать куда дальше расти?
Да и вообще скажите про косяки в коде
https://github.com/Tr0ub1e
>Можете чекнуть мой гитхаб
Думаешь кто-то таким занимается в принципе?
Вот зашёл в Wangan-Midnight, ни описания никакого, что это, зачем, как запускать.
Открываю исходник, main.py. Вижу там
start_im = pygame.image.load("C:\\Users\\Tr0ub1e\\Desktop\\Folder3\\mid.png").convert()
Какой-то адовый хардкод, завязанный на какой-то ник, да ещё в винде.
То есть я без правки исходников запустить твою прогу, которая ещё не понятно, что делает, не могу. А это уже очень-очень дурной стиль. Особенно с учётом, что документации на это нет.
Не воспринимай мои советы слишком лично, я всего лишь токсичный анон-теоретик, кому лишь бы придраться.
Я бы посоветовал, как минимум, минимально оформить твои программы, презентация в таких вещах ключевое, она первое впечатление создаёт.
Убрать хардкод, особенно вот эти глобальные пути, завязанные на ник пользователя и на ОС, как вариант добавить конфиг файл.
Если честно, мне не понятна такая мания к публичным гитхабам. Просто есть такое мнение, что если ты что-то публикуешь, то оно должно быть кому-нибудь полезно. А по факту это "лабы" для себя, без документации, не понятно, зачем нужны, чтобы в них разобраться, скилл нужен не меньший, чем чтобы их написать.
Что подвигает к тому, чтобы смотреть их критически, найти что-нибудь плохое, чтобы плохо думать об авторе. То есть если кто-нибудь будет смотреть, то с подсознательной установкой найти что-нибудь плохое. Все для себя тесты какие-то делают, чтобы что-то пощупать, но не все их на широкую публику выкладывают. Обычно сделают и потом удаляют.
Вот, пример, как недостатки искать:
https://github.com/Tr0ub1e/Auto-Ria-data-research/blob/master/data_analytics.py
Строки 81-111, смотрится стрёмно, дублирование кода, и т.п. Слёту вариант
if i in sorted_value:
____sorted_value += 1
else:
____sorted_value['NaN'] += 1
Игрушку, равно как и другое, запускать не стал. Оценить игрушку в плане качества кода или что посоветовать не могу, немного другими вещами занимаюсь.
рандомно и слёду, не вдумываясь:
https://github.com/Tr0ub1e/music-downloader/blob/master/tools.py
некорректная аннотация, строка 30:
def find_track(req:requests.Request) -> str:
у тебя там генератор строковых значений, а не функция, возвращающая строку
with open(str(path+'/'+filename)+".mp3"
во-первых, os.path.join лучше для этого, хотя не очень критично, и потом, если читаешь что-то по сети и сохраняешь, лучше всё-таки ошибки контролировать, это же штатная ситуация.
Более глобально вопросы есть. Скажем если бы я для себя делал подобную утилиту (что в файле main.py), то разумно предусмотреть возможность, чтобы сохранять не один файл, а много. Один и руками несложно, много уже утомительно. А так, в поле input ввести через пробелы номера, потом уже в скрипте разбить на номера и циклом всё скачать. Просто разумно предусмотреть более ёмкий и при этом полезный функционал, и несложный. Это же главная цель автоматизации.
>Можете чекнуть мой гитхаб
Думаешь кто-то таким занимается в принципе?
Вот зашёл в Wangan-Midnight, ни описания никакого, что это, зачем, как запускать.
Открываю исходник, main.py. Вижу там
start_im = pygame.image.load("C:\\Users\\Tr0ub1e\\Desktop\\Folder3\\mid.png").convert()
Какой-то адовый хардкод, завязанный на какой-то ник, да ещё в винде.
То есть я без правки исходников запустить твою прогу, которая ещё не понятно, что делает, не могу. А это уже очень-очень дурной стиль. Особенно с учётом, что документации на это нет.
Не воспринимай мои советы слишком лично, я всего лишь токсичный анон-теоретик, кому лишь бы придраться.
Я бы посоветовал, как минимум, минимально оформить твои программы, презентация в таких вещах ключевое, она первое впечатление создаёт.
Убрать хардкод, особенно вот эти глобальные пути, завязанные на ник пользователя и на ОС, как вариант добавить конфиг файл.
Если честно, мне не понятна такая мания к публичным гитхабам. Просто есть такое мнение, что если ты что-то публикуешь, то оно должно быть кому-нибудь полезно. А по факту это "лабы" для себя, без документации, не понятно, зачем нужны, чтобы в них разобраться, скилл нужен не меньший, чем чтобы их написать.
Что подвигает к тому, чтобы смотреть их критически, найти что-нибудь плохое, чтобы плохо думать об авторе. То есть если кто-нибудь будет смотреть, то с подсознательной установкой найти что-нибудь плохое. Все для себя тесты какие-то делают, чтобы что-то пощупать, но не все их на широкую публику выкладывают. Обычно сделают и потом удаляют.
Вот, пример, как недостатки искать:
https://github.com/Tr0ub1e/Auto-Ria-data-research/blob/master/data_analytics.py
Строки 81-111, смотрится стрёмно, дублирование кода, и т.п. Слёту вариант
if i in sorted_value:
____sorted_value += 1
else:
____sorted_value['NaN'] += 1
Игрушку, равно как и другое, запускать не стал. Оценить игрушку в плане качества кода или что посоветовать не могу, немного другими вещами занимаюсь.
рандомно и слёду, не вдумываясь:
https://github.com/Tr0ub1e/music-downloader/blob/master/tools.py
некорректная аннотация, строка 30:
def find_track(req:requests.Request) -> str:
у тебя там генератор строковых значений, а не функция, возвращающая строку
with open(str(path+'/'+filename)+".mp3"
во-первых, os.path.join лучше для этого, хотя не очень критично, и потом, если читаешь что-то по сети и сохраняешь, лучше всё-таки ошибки контролировать, это же штатная ситуация.
Более глобально вопросы есть. Скажем если бы я для себя делал подобную утилиту (что в файле main.py), то разумно предусмотреть возможность, чтобы сохранять не один файл, а много. Один и руками несложно, много уже утомительно. А так, в поле input ввести через пробелы номера, потом уже в скрипте разбить на номера и циклом всё скачать. Просто разумно предусмотреть более ёмкий и при этом полезный функционал, и несложный. Это же главная цель автоматизации.
>>895087
Дополню себя же. На самом деле сложно что-то советовать. Надо просто делать что-нибудь, изучать, думать над своим кодом, как его улучшить и сделать более надёжным-полезным-читаемым.
Всё сильно зависит от того, что именно ты хочешь осваивать в первую очередь.
Факторов, что можно улучшить, безграничное количество. У любого.
Код может быть местами ужасный, но он и у махровых сеньёров в серьёзных продуктах бывает местами адовый, не говоря уже о средних прогерах. Все иногда говнокодят, куда же без этого.
Там нечего обсуждать, скрипты-однодневки.
Ну да, поюзал либы, решил какие-то задачки, молодец.
я концептуально это понимаю так:
многопоточность - это когда одна команда в формуле-1 может выставить, в зависимости от бюджета, до 4 машин одновременно на трассу. допустим, победа зависит от максимального времени, проведенного на треке, и в этом случае заведомо выигрывает команда, выставившая на трек 4 машины. бедная команда ставит на трек 1 машину и она ездит кольцами, накатывает время, а богатые буратины ставят 4 машины и эти машины за один круг проводят время в 4 раза больше, чем бедняки.
асинхронность - это когда на том же треке тачки заезжают на пит-стопы. у богатых 4 тачки на треке, но на 4 пит-стопа денег не хватило и они ездят все в один. отсюда затраты времени на ожидание в очереди + плюс время на работу. бедняки с одной машиной и одним пит-стопом не тратят время на ожидание и могут за счет этого кое-что наверстать, но все резко меняется, когда богачи добавляют еще пит-стопов и каждая их тачка заезжает в свой собственный и вообще движется по своему графику, независимо от остальных.
гуру асинхронности, правильно понимаю, не?
Man, these are some hard-to-swallow pills I gotta say.
Не совсем. Точнее, понял, но не то. Тебе главное нужно понять разницу между parallel и asynchronous. Оба используют multithreaing (multiprocessing) как базу, но подход местами принципиально иной. Очень часто асинк вообще локов и contest for resources не имеет.
Добавь только что мощность движка обратно пропорциональна количеству машин и гиперпынемобиль команды "HYPERPYNIA"приедет быстрее каждой из машин команды где много машин.
> асинхронность
Это когда пилотов обкололи веществами и им кажется что они едут одновременно, хотя на само деле у них одна тачка и они садятся в неё по очереди, и когда очереждной пилот вылезает из машины он залипает и не помнит ничего до момента как е8го сного пригласят сесть за руль.
Понял, спасибо большое за развернутый ответ)
>правильно понимаю, не?
Не совсем.
Главное, многопоточность была создана не для того, чтобы производительность наращивать. Сама технология разрабатывалась тогда, когда процессоры были одноядерными.
Thread safe программирование тот ещё ад, когда ты работаешь на чём-то низкоуровневом, там просто на чём угодно можно споткнуться очень больно. В питоне такой проблемы почти нет, но потому что там лочится по поводу и без повода и как результат многопоточность фактически однопоточная в плане ресурсов процессора.
Конкурентное программирование, это когда у тебя в программе несколько логических потоков исполнения. Не для того, чтобы производительность поднять, а потому что логика работы такая. И тебе необходимо как-то взаимодействие между этими потоками обеспечивать.
Разница между тредами и async/await в том, кто отвечает за переключение потоков исполнения и как они происходят. В случае тредов скорее процессор или система, в случайный момент времени. Что просто, но неудобно и не оптимально. В случае async/await отвечает уже сама программа, об этом надо думать, но переключение идёт лишь в нужные моменты, оптимально, за счёт этого код сильно разгоняется.
Допустим, у нас есть Константин Петрович Потоков, добропорядочный семьянин, верный муж и заботливый отец. Петрович будет у нас программой на питоне. Петровичу очень хочется пожрать, но для этого нужно выполнить три задачи: помыть посуду, сварить пельмешки и сходить за хлебом.
Петрович может выполнить все задачи синхронно однопоточно: помыть посуду, потом сварить пельмени, потом сходить за хлебом. Недостаток такого варианта в том, что Петрович бесполезно тратит время, тупо глядя как нагревается вода, а мог бы что-нибудь полезное делать.
Петрович может выполнить задачи асинхронно однопоточно(asyncio): поставить кастрюльку на огонь, пока вода закипает помыть посуду, потом забросить пельмешки и пока они варятся сходить за хлебушком. Тут могут возникнуть проблемы, если нельзя переключится с одной задачи на другую(то есть задача не отдает поток выполнения), например, Петрович так долго ходил за хлебом, что пельмени сгорели.
Петрович может выполнить задачи асинхронно многопоточно(multithreading): позвать семью, каждому выдать по задаче, и лежа на диване ждать доклада об успешном выполнении. Или не лежать на диване, а выполнять одну из задач. При таком раскладе может возникнуть ситуация, когда, допустим, нет чистой кастрюльки и жена ждет пока Петрович её помоет, да еще в коридоре стоит дочка в шубе и валенках, ожидая когда батя даст денег на хлеб. То есть один поток блокирует остальные.
>Допустим, у нас есть Константин Петрович Потоков, добропорядочный семьянин, верный муж и заботливый отец. Петрович будет у нас программой на питоне.
судьба человека
1) допилить бекенд-фичу, завязанную на кучу разных сервисов, поднятых под докером.
2) изменить дизайн web-based интерфейса, цвета, расположение кнопок и т.п.
3) посмотреть серию анимешного сериала
4) прочитать двач
5) съесть пиццу с колой
Истинная параллельность:
Над монитором висит телевизор, в нём крутится сериал. Перед тобой стоит тарелка с пиццей, ты жуёшь её. Параллельно говоришь, чтобы голосовым набором настрочить пост на двач. Одной рукой набираешь бэкенд часть, другой рисуешь дизайн на другом компьютере.
Это самая эффективная схема, ты независимо делаешь пять дел одновременно.
Многопоточность. У тебя висит секундомер. Каждые две минуты ты переключаешься с задачи на задачу. Посмотрел две минуты аниме, закрыл плеер, загрузил докер, поднял окружение и пилишь свою таску. Через две минуты закрыл редактор, до конца строку с кодом не дописав, взял пиццу, пожевал. Ещё через две минуты убрал тарелку в сторону, рагрузил редактор, рисуешь кнопки. Ещё через две минуты закрыл, открыл двач.
Асинхронность. Открыл бэкенд таску, реализовал часть, закоммитил, закрыл, переключился на пиццу. Сжевал кусок, довольный переключился на двач. Начал писать ответ, дописал, глянул на часы, ужаснулся, что потратил два часа на это, переключился на дизайн. Подвинул кнопку так, что самому понравилось, включил аниме.
>а переключение их происходит в случайные моменты времени
Нет каждый 5 мили секунд если переключение возможно, или 100 машинных операций в питоне 2
Охуенно, схоронил, буду периодически почитывать и вникать.
Так, а когда кнопочка на ГУИ выполняет time.sleep(20), но форма при этом перетаскивается по экрану, не зависая, это асинхронно однопоточно или многопоточно?
time.sleep синхронная функция же, в однопотоке гуй зависнет, ее либо в отдельный поток, либо в отдельный процесс отправлять на выполнение.
Так я про случай, когда не виснет. Я хуй знает, как это в пистоне, но в шарпе это достигается через async/await.
Боже, что за настырность. Я не о том спрашиваю. Я спрашиваю: когда действие кнопки не фризит окно ГУИ, это какой сценарий: асинхронный однопоточный или асинхронный многопоточный?
Платиновый вопрос, но стоит ли вкатываться в питон для работы бэкэндером? Или из-за хайпа среди гречневых онлайн курсов теперь вкатиться нуфагу не реально?
В QT такие вещи насколько я знаю разруливаются в многопотоке.
>питон для работы бэкэндером
Не лезь, бля, дебил, сука, ебаный.
Срсли, питон - параша в большом проекте. Что бы там тебе маслятки не навешали на уши, факт остается фактом: динамическая типизация в ООП - кусок говна и идет нахуй.
Можешь питон рассматривать как способ заработка в датасаенсе (функциональное программирование, скриптики-хуиптики), но не более.
Большой проект это сколько строчек кода? Нормально питон заходит если писать чистый код и использовать типизацию.
>В каком мире ты живешь, если пишешь чистый код, приходишь в компанию, где до тебя уже написан чистый код
Проблема для всех языков программирования. Ад, который происходит на C/C++/Java куда хлеще, чем на многих других платформах. Статическая типизация этот ад только усиливает, а тяжеловесные системы сборки в стиле cmake+make делают его невыносимым.
Ты окружён жуткой архитектурой, которая конкретно зацементирована, в том числе из-за статической типизации. Потому что у тебя выстроена система классов из дикого количества слоёв наследования, на которую уже всё завязано, тебе надо мелочь какую-нибудь изменить, но добраться до неё невозможно, потому что она где-то в корне иерархии.
любая картинка это в основном трёхмерный(четырех) тензор с каналами R G B (А), просто возьми этот тензор картинки из finplot и загрузи в pyplot и посредством pyplot сохраняй
Не проблема языка, говна с кучей багов полно на любом легаси проекте, особенно если писали его пидарасы.
петяня, ты новое словосочетание в книге прочитал, чтоли? поясни что за хуйня за такая, и как она проектам жить мешает?
Это опять ты? Буквально недавно тебя в жс-треде обоссывал
На любом проекте есть своя доля говнокода, говнокода нет только там где пишут "для себя и на века", но от таких прожектов всегда отдает легаси-душком. "Чистого кода" на коммерческих проектах нет и не было
>Это опять ты? Буквально недавно тебя в жс-треде обоссывал
Ебать ты шизлонг, можешь меня еще под кроватью поискать, а потом принять таблетки на ночь.
>Срсли, питон - параша в большом проекте. Что бы там тебе маслятки не навешали на уши, факт остается фактом: динамическая типизация в ООП - кусок говна и идет нахуй.
Ты вообще прав, но зачем так подрываться? Бекенд - это не обязательно большой проект.
Если найду - выебу, жопу готовь. 21 см это тебе не шутки нах
Я их не смотрел, хотя желание было посмотреть, как и некоторые другие большие курсы.
Тыкал в случайные места. Моё мнение, там лекции по алгоритмам, а питон лишь инструмент, на котором их реализуют.
То есть вероятно нормальный курс по алгоритмам, базовым, тыкаю в случайные места, и почти везде всё мне знакомо, отчасти поэтому немного лень смотреть.
С точки зрения именно изучения питона точно нет, плохой вариант. Куда не тыкал, везде какой-то самый минимум, общий для большинства языков. Лучше просто открыть книжку именно по питону, как вариант "intermediate python", в библиотеке в шапке где-то есть (причём на русском вроде бы даже), или в официальной документации, не обязательно всех этих лутцов брать, если прогать более-менее умеешь.
В общем для подтягивания алгоритмической базы, всякие сортировки, обходы деревьев, перестановки и т.п., видимо нормальный вариант и как раз на питоне.
Для другого вряд ли.
По стилю мне не очень нравится, я бы деда какого-нибудь предпочёл, но лучше не могу предложить.
В общем мне 24, есть 4 года опыта работы в геймдеве, стек юнити-c# и питончик для внутренних утилит + задачи по зрению (ну скелет там распознать и пр) + профильная вышка
И сейчас мне этот геймдев подзаебал - это не похоже на программирование совсем. Думаю перекатиться в питон разработку. Скажите, чем вы занимаетесь вообще ? Какой стек юзаете? Или питон на вашей работе, скорее, вспомогательный язык? Знакомых спросить нет, а после прочтения интернета создается ощущение что на питоне “достаются данные из бд” и “кладутся туда”. Но бля понятно, что такое объяснение только кухаркам подавай и питон разработка - дело не простое. Вообще круто, если кто-нибудь приведет кейс сложной задачи на работе, в идеале, чтобы примерно понимать с каким втф сталкиваются разрабы (а так бы хоть кто-нибудь ответил бы))
Так же вопрос, есть ли вероятность залететь питон прогером с моим беграундом сразу на нормальную позицию? очень не хочется в плане зп терять (было 70).
Буду рад адекватным анонам) спасибо) а то я немного в прострации с этой хуйни
Где-то читал интервью одного прогера из Яндекса, он говорил о том, что они с остальными молодыми приходили посидеть за спиной у Сысоева, смотрели как он кодит.
есть
Охуеть. 4 года опыта и 70к? У программистов же зп только 300+
Может мне инженером остаться на тех же 70к
Ну анончик, если синхронная функция не блокирует исполнение гуя, очевидно же что в отдельном потоке она исполняется, значит многопоточная.
>>895860
Это если не углубляться, а то под капотом там все не совсем так. Как анончик выше писал, там что в асинкио, что в мультитрединге внутри все равно кооперативная многозадачность.
Хм, похоже, ты смотрел более поздние его лекции. Я вот прям с первой начал, и там объясняются весьма базовые вещи (що такэ строка, присваивание, ХеллоВорд и т.д.). Мне наоборот показалось, что он начинает с уж совсем низменных понятий.
да я еще пол года назад в унике был
для студентоны 70к было норм
сейчас подзатрахало как зп, так и место работы
Тогда вообще круто. Возвращаюсь во вкат в ойти
Сложный запрос (который в себя включает несколько пунктов вышеперечисленных)
Я значит решил с помощью питона связать два компа, чтобы на них можно было играть в пинг понг, ну чтобы мячи через экраны летал. И при попытке передать координаты мяча у меня буфер сокета на сервере забивается из-за того, что на нём висят старые координаты мяча и не удаляюются. Как собственно мне удалить старые координаты мяча из буфера сервера?
https://pastebin.com/1hhJ9Hdr - Это правый кусок программы, у левого логика идентична
https://pastebin.com/cNVCvWiX - Это сам сервер
В плане БД используй что угодно, есть и для реляционных и для Nosql удобные библы.
В плане графики и гуи есть PyGame.
Но вообще, скажу, что подобные вещи на пайтоне не самое удобное делать. Ну если забавы ряди для себя, то конечно почему бы и нет. Но в целом по удобству, и по эффективности, лучше джавы и c# смотреть.
Это копия, сохраненная 26 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.