Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы: https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации https://dumpz.org/ - можно постить листинги, не требует регистрации https://pastebin.com/ - для листингов, регистрация не обязательна https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
Вопросы-ответы: — А стоит ли читать Лутца, том номер N? Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х? Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать? Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом? Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Как можно без лишней возни ускорить программу на питоне 1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь. 2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником. исходник: https://dumpz.org/bASGKD8cCFDf
>>1883433 → Кхм, спасибо. Значит, первый вариант лучше. Хотя мне не очень нравится загромождать код лишними буквами (типа, почему бы сразу в параметре не установить нужное дефолтное значение, а не оперировать на основании None он или нет), но если так правильнее, то я приму.
>>1883524 Ах черт, ну конечно. У меня ж там рандом, а со второй записью self.a всегда будет возвращать одно и то же число, сгенерированное на старте программы. Тогда конечно это херня.
>КОКОКО У НАС ЯЗЫК БЕЗ ЧЕТКОЙ ТИПИЗАЦИИИ ВСЕ РАБОТАЕТ И ТАК ЗАЕБИСЬ >ПУК СЕРЕНЬК ЦИКЛ ФОР НЕ РАБОТАЕТ С ДАННЫМИ ТИПА ИНТЕДЖЕР))))) Пиздец параша, нахуй я только время потратил на эту недопарашу? Лучше попробовал доучить кресты.
>>1883698 Главное на C++ начинать с "fuck you", а не с "пошёл нахуй". Иначе сначала придётся курить мануалы по работе с юникод-строками, переводе из одной кодировки в другую и т.п.
Гайз, а программирование на питоне ещё бурно развивается? Или самый мощный бум уже прошел и тем, кто знает джанго в совершенстве можно писать 3 строчки в день, есть пиццу флорентину и не развиваться дальше?
>>1883948 Спасибо Я просто уже месяц в ваш питон вкатываюсь. И думаю: "а надо ли мне оно". Может в инженегрии остаться перспективным специалистом за 320 рублей в час. У нас с начала 00-ых (когда начали везде ПЛК ставить) ничего не изменилось. И то это изменение на мне косвенно сказалось.
Олсо напишу что меня бесит в ваших тредах: Жалобы, что приходится думать и что вы пишете при этом всего 100 строчек в день. Я, например, могу 2-3 дня над чем-то поразмышлять, а потом как обезьяна месяц сидеть и реализовывать. И я вам в этом действительно завидую.
>>1883948 И ещё вопрос. На моём заводе считается работать 60 часов в неделю - обычным делом (бывали месяца, когда я меньше 70 ч. не работал). А в целом по специальности если звонят в выходные, то обязан ответить иногда и если что зайти на совещание.
Слышал, что у программистов дикие переработки. Насколько дикие?
>>1883971 >Слышал, что у программистов дикие переработки Это зависит от конторы и очень зависит от ПМа. Если твой ПМ - бесхребетный слизняк, который не может или не хочет отстаивать интересы своей команды, то в тебя будут постоянно лететь блокеры, хуёкеры. Типична внезапная смена приоритетов, когда ты два дня корпишь над задачей, а потом она внезапно попадает в холд и надо срочно сделать вот это и вообще оно уже должно быть сделано вчера. В таких условиях твои попытки запланировать свои законные выходные дни могут быть смехотворными. Выходишь в субботу и не ебёт. Потому что НАДА.
>>1883982 >Типична внезапная смена приоритетов, когда ты два дня корпишь над задачей, а потом она внезапно попадает в холд и надо срочно сделать вот это и вообще оно уже должно быть сделано вчера.
Бля, это моя фирма на 100%. Особенно про вчера.
Но у нас поинтересней. Задача ПМа - выжать из тебя все соки, за как можно меньшие деньги. И обычна цена рабочих часов o-малое от срывания сроков (потому что твою работу ждет десяток других инженегров) или благосклонности заказчиков. А за сотрудников впрягаются руководители отделов, их цель, чтобы работник никуда не ушел.
>>1883964 >а потом как обезьяна месяц сидеть и реализовывать Обычно так и бывает. Месяц строчишь как угорелый, вываливаешь море функционального кода.
Спустя полгода надо добавить маленьку фичу или что-то подправить, ты открываешь код, ругаешься матом на того, кто этот говнокод высрал, неделями думаешь, как именно внести несколько строк кода, чтобы заработало и не развалилось.
добрый анон, помоги. вкатываюсь в питон. прочитал и изучил книгу "укус питона" по совету из прошлого треда, и подошел следующий вопрос - что дальше? пока прохожу проект эйлера по питону, но не знаю что именно читать и учить дальше.
У тебя объект может иметь какие-то атрибуты, переменные, с которыми ты можешь работать напрямую class MyClass: ____def __init__(self): ________self.num = 0
obj = MyClass() obj.num = 123
Это не всегда хорошо, потому что у тебя нет контроля. Ты можешь некорректное значение присвоить, число не из диапазона или не число вообще. Может быть пользователь вообще не должен менять сам эту переменную - например, это счётчик количества вызовов метода и др.
Вот для этого и нужны property. Они для тебя как просто переменные объекта. Но реально прямого доступа у тебя к ним нет, он делается через сеттеры-геттеры.
Вот в этой программе у объекта нет переменной name. Но для пользователя эта переменная есть, всё выглядит так, как будто эта переменная есть. Но ты не можешь присвоить некорректное имя, пустое в данном случае. Ты можешь какие-то дополнительные действия делать, если меняешь имя.
В принципе это лишь синтаксический сахар, без сеттеров-геттеров это делается сознанием методов setName() getName() и работой через них.
>>1884062 Лол, помню баловался шарпом в бородатые годы, там эти геттеры-сеттеры надо было руками прописывать на каждую хуйню, пиздец занятие. Потом вроде добавили сахарку под это дело.
>>1884344 тупанул, есть последовательность beep сигналов разной длины морзе которая дается на вход, каким образом можно расшифровать эту последовательность? По факту, мне нужно узнать только длину этих сигналов, и дальше уже сопоставлять с алфавитом, но каким образом можно узнать длину сигнала?
>>1884345 А как получаешь? Через микрофон? Ну так пиши стрим и анализируй любой либой что работает с форматом того стрима, что пишешь. Это примерно как найти начальную { и конечную } но другой формат данных.
>>1884175 Я уже месяц как вкатываюсь. У меня была программа: 1 курс от Bioinformatics institute, теперь второй курс. ЕЩё алгоритмы почитал "grokhing alghoritms"
>>1884465 Потому что open() строит класс, одним из методов которого является метод .write() который что-то записывает в твоей файл.
Вызвать метод во время инициализации класса незя.
Но если очень хочется, то можно, просто вместо реального файла используй виртуальный. Модуль io класс BytesIO() позволяет сразу что-то в виртуальный файл записать.
>>1884478 Потому что метод .write() экземпляра класса файла принимает только 1 аргумент, а ты передаешь ему 2 строки. Напиши "some_function" + "\n" и ошибок не будет.
Q all! Как в проектах с гитхаба искать откуда оно все начинается? Точку входа, так сказать. Клонировал проект себе, открыл и охуел от количества файлов и классов. А так хочется посмотреть как люди делают годные вещи, освоить методологию разработки.
>>1884594 Логикой. Тут же большая часть - описание полей для моделей и формочек, прочей, можно сказать, серверной версткой, а остальное все за тебя делается.
>>1884645 И суть даже не в том, что в Джанго ограниченые возможности на кастомизацию логики, а в том, что Джангоебы как правило ограниченные сами по себе и считают, что кроме их фреймворка ничего не существует.
>>1883441 (OP) как я понял, при запуске файла *.py интерпретатор вставляет вместо всех импортов код соответствующих модулей, вместо всех вызовов функций - код самих функций, а есть возможность посмотреть на код, который после всех этих махинаций получится? не спрашивайте нахуя это мне
Господа, помогите, пожалуйста. Хочу в JSON оставить только уникальные ключи. Никак не могу сообразить как сделать. Щит-код тут https://ideone.com/Zy3e6s
>>1884864 тут вопрос в том, что в JSON пары {owner_id : media_id}, а твой код вернет только уникальные значения owner_id без пары media_id, что, как сам понимаешь, нас не устраивает. нужен еще один какой-то хитрый ход.
>>1884876 да, из JSON owner_id вместе с media_id должен уйти. сорян, если туплю. вот так должно получиться: {'result': [{'owner1': 'media1'}, {'owner2': 'media2'}, {'owner3': 'media3'}]}
>>1884717 >при запуске файла *.py интерпретатор вставляет вместо всех импортов код соответствующих модулей, Нет, не верно. Интерпретатор "делает импорт" и запускает код из модуля только один раз. То есть если ты в нескольких файлах проекта импортируешь скрипт, то он выполнится лишь один раз.
Ты можешь легко в этом убедиться, вставив отладочный print в модуль.
>>1884955 Привет. Я думаю в джангу вкатываться. Но я пока совсем слаб и изучаю теорию. Думаю до джанги дорасту через месяц. Вот на этом я остановился >>1884752
>>1885288 Где ты видел джунов которые маназины делают за 3 дня? По твоей логике, за год выодит до 100 магазинов. Я мастеров-старперов с таким кол-вом не видел
>>1885427 >>1885198 Как я понял задачу, должны быть только уникальные значения. То есть owner2 не должен выводиться вообще, поскольку дважды присутствует.
Сначала считаем, сколько раз owner в owner_id присутствует, можно руками, но корректнее используя collections, потом проходим по owner и добавляем в вывод те элементы, число вхождений которых = 1.
Может быть Counter даже может какие-то ещё для этого инструменты имеет, но я слёту не вижу.
Если данные какие-то особо большие, то можно думать об оптимизациях, в зависимости от данных.
Например, если там словарь размером в сотни тысяч, а уникальных значений единицы, то надо иной подход использовать, чтобы не перебирать весь этот огромный список.
>>1885442 я так-то мимовкатыш, вообще про collections не слышал. сделал вроде https://ideone.com/Kcxv9F, щас погоняю на данных, посмотрю где отрабатывает, где не отрабатывает.
>>1885427 вот оно отличие профи от вкатыша. не сообразил, что можно сделать все сразу.
>>1885440 любая точка B (x; y), координаты которой удовлетворяют уравнению (x)2 + (y)2 = R2, принадлежит окружности радиуса R или в твоем случае (x)2 + (y)2 = (D/2)2
>>1885529 Что document.querySelector('.message').innerText возвращает? Потому как ты запостил визуальное отображдение DevTools, и в зависимости от того, есть ли там linebreaks и любые другие символы типо табов в "сыром тексте" - регекс будет разный.
Можно, конечно, сделать более униваерсальный, но тогда производительность его будет раз в 5-7 хуже.
>>1883441 (OP) Парни, мне приспичило добавить новый метод в объект, ноч-то я обсираюсь с реализацией
Кратко поясню что творится. Есть Присвоение вроде self.employee_repository = CachedRepository(EmployeeRepository())
Как вы наверное поняли CachedRepository выступает как декоратор и работа с EmployeeRepository осуществляется через через небольшой набор методов этого декоратора. Мне приспичило его немного расширить, но вносить изменения напрямую в класс CachedRepository для одного моего кейса - уебанство. Я попытался сделать трюк вроде: self.employee_repository.my_shitty_method = EmployeeRepository.my_shitty_method
Но закономерно обосрался, потому что этот метод первый принятый аргумент постоянно интерпретирует как self да и вообще я работаю с методом не того класса. Как это сделать нормально?
>>1885657 Не понял, но КО подсказывает, что надо сделать свой класс, унаследовав его от CachedRepository, и переопределить в нём нужный метод. Причём если не хочется переписывать весь метод, то можно его в твоём классе декорировать
class MyCachedRepository(CachedRepository): ____def shitty_method(self, args): ________do_some_stuff ________ret = CachedRepository.shitty_method(self, args) ________do_more_stuff ________return ret
>>1885657 >Как вы наверное поняли CachedRepository выступает как декоратор и работа с EmployeeRepository осуществляется через через небольшой набор методов этого декоратора.
Посоветуйте книжку по питону для неновичка, перекатывающегося с C++ или java или типа того? Чтобы за 3-4 вечера вкатиться и через неделю устроиться на новую работу.
>>1885805 >Человек имеет 20-летний опыт программирования. Это не имеет значения. Питон сильно отличается от крестов или джавы, поэтому перекатится за пару дней не получится.
>>1885817 В принципе можно устроиться на работу на язык X, не имея никакого опыта работы на языке X. Особенно для таких языков, как питон, на C++/Java сложнее.
Но для этого надо иметь какую-то особую компетентность, нужную в проекте. Просто опыт программирования вообще ни о чём, слишком разные направления есть, ты можешь быть очень крутым в одном, но совершенно не знать другую область и у тебя просто мозги к другой области не подготовлены.
>>1885838 >Всем. Ну в смысле очень многим. > >Вообще, если когда ты долго пишешь на языке X, а потом за неделю учишь язык Y, ты потом будет на Y писать как на X. А ничего хорошего в этом нет. > >Разные языки это разные возможности и поэтому разные подходы к написанию кода и проектированию программы.
Так я именно такую книгу и прошу, в которой будет объясняться не как hello world написать, а в чём нюансы устройства языка.
Есть алгоритм на C++, там много файлов и h, и cpp, но графику гораздо удобнее прописать на python. Как можно вызвать функцию в которую вложено дохуя других функций из питона? Учить CLI нет ни времени, ни желания надо сдать проект в уни. Про C API знаю, но можно ли там, допустим, написать функцию, которая принимает аргументы из питона, форматирует их и вызывает нормальные cpp функции?
>>1886021 Есть специальные инструменты для контроля. Причём даже в рантайме можно контролировать.
Но это, конечно, не статическая типизация.
Статическая типизация там, где код компилируемый, и переменная отображается на машинный или байт код, и один тип просто физически не может быть заменён другим без специальных телодвижений.
В питоне же всё объект, а переменная это всего id этого объекта. Причём в случае иммутабельных типов вроде int при изменении значения переменной каждый раз меняется ссылка, потому что мы меняем сам объект, а не значение переменной в объекте.
С такой архитектурой добавить статическую типизацию без радикальной переделки платформы невозможно. То есть получается, что помимо id объекта переменная должна ещё хранить как-то его тип и сверять этот тип при каждом изменении значения. Это сложно, криво и накладно.
Любая фича имеет свои большие плюсы и минусы. Динамическая типизация в том числе. В той сфере, в которой используется питон, динамическая типизация скорее в плюс. Многие вещи на C++/Java просто рехнёшься писать, или же они там будут криво и неудобно сделаны.
>>1885842 Как вариант, в шапке есть книга intermediate-python.pdf (и epub возможно). Как раз про разные нюансы и фичи языка.
Хотя и этого недостаточно.
Во-первых полезно поднимать какие-то кишки.
Во-вторых просто нюансов недостаточно, потому что мало знать про инструмент, надо ещё уметь им правильно пользоваться. А это только с опытом приходит.
Потому что вот когда пишешь на одном языке, ты просто привыкаешь решать какие-то задачи одним способом, и даже уже не задумываешься. А тут тебе надо их решать совсем иначе. То есть ты можешь делать, как привык, но это криво будет.
Пистоны памаХите Есть лист со словарями нада бы сдвинуть все значения в ключе ассет на пустые значения снизу ну мол если одно занчение пусто то один раз, если два - то два раза т.е. на кол-во пустых ключей последних
>>1886347 Та изи же Вот есть принт первый там дву пустых внизу - это мой кейс Нужно сдвинуть значения ключей вниз как на принте 2 Только на принте 2 я просто заменил первые 2 на последние а первые потёр но мне нужно именно сдвигать дальше оставляя вначале пустые
Учу джаву. Недавно посмотрел видос про http и там клиент-сервер был на питоне. Очень удивился, что у вас можно возвращать несколько значений из одной функции и это применяется в таких основах. Это действительно удобно?
>>1886486 Не знаю, что ты видел, наверно, что-то вроде
def foo(): return 1, "qwerty", 2
Это не несколько значений, а одно, это кортеж(tuple), просто набор значений, коллекция. Здесь нет ничего такого, что было бы принципиально невозможно в джаве, просто в питоне это сделано так, что применять легко удобно и естественно. Да это применяют, но не сказать, что б прям очень часто
Там использование функции для коннекшона было. Логику то такую можно замутить в джаве завернув в классы и геттеры. Но вот именно способ прямая противоположность джаве. С одной стороны вон как легко и лаконично. А с другой думаешь, уж если где то можно запутаться в переменных, то в таких случаях.
>>1886666 Но ты просто подумай, вокруг кодинга - щас хайп, каждый дебик стремится. Задумайся какая конкуренция, в би уже писали что это приводит к снижению зп. И задумайся, сколько анонов хотят того же, и вот, чем ты лучше дургих и почему именно ты?
Пожалуйста научите пользоваться asyncio как PRO. Где взять инфу?
Конкретная задача: Каждые 30 секунд запускать 100 одинаковых асинк методов которые отличаются только разными аргументами. Аргументы инициализируются один раз при запуске кода и записываются допустим в лист.
Пацаны, а можно как-то узнать, если метод вызвали из функции? Т.е., я перегружаю __add__, но хочу чтобы если его вызывали присваиванием, то возвращался новый инстанс класса, а если вызывали, например, через print(A(anus)+B(пися)) возвращалось что-то другое, гуглить не умею там все на ангельском...
Есть Лист в котором лежит один OrderedDict Как достать этот словарь и записать в переменную чтобы избавится от List-a поверх него в одну строку, ну чтобы переменная была просто словарём а не словарём внутри листа ну я могу циклом ФО но как-то тупо выглядит
Привет аноняши, хочу вкатиться в программирование и начать зарабатывать деньги. Как быстрее всего это сделать? Английский не знаю, компьютер - МакБук 15
Что функция брала как аргумент сет (лист/тупл) и рекурсивно повторяла себя несколько раз, ветвясь, каждый раз дополняя сет новым (но различным для разных ветвей) значением?
Для этого обязательно использовать копию или можно как-то иначе?
Коллеги, есть модель A и модель B для изображений для модели A. В модель A загружаю зип архив и через save распаковываю архив и сохраняю через bulk_create() все файлы в модель B в цикле через A.objects.bulk_create([ 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())
>>1883657 >>КОКОКО У НАС ЯЗЫК БЕЗ ЧЕТКОЙ ТИПИЗАЦИИИ ВСЕ РАБОТАЕТ И ТАК ЗАЕБИСЬ >>ПУК СЕРЕНЬК ЦИКЛ ФОР НЕ РАБОТАЕТ С ДАННЫМИ ТИПА ИНТЕДЖЕР))))) >Пиздец параша, нахуй я только время потратил на эту недопарашу? Лучше попробовал доучить кресты.
Господа data sience что вы делаете на работе? Обрабатываете таблички бабы сраки из бухгалтерии и на основании их делать ml модель, презентацию, power bi графику?
Colleagues, good afternoon! There is a model book and a model chapter. Each book has many chapters. Each chapter is tied to a specific book, and if the slug of the chapter is made unique, then when book1 - chapter1, I cannot create book2 - chapter 2, an error is generated. If you make the slug non-unique, then an error is issued that one argument was expected, but 2 was passed.
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)
>>1888269 >Как быстрее всего это сделать? Конечно же, записать на курсы онлайн-программирования Skillbox! Это чудестные прикрастные курсы, где лудшие учетиля тибя научат прогромеровать и уже черз читыре дня ты получиш сиртефекат об акончании и можеш сразу же устроица на работу с зар платой 300к/наносек!
>>1886021 >питон не будет ругаться если ты положишь туда что нибудь другое ИДЕЯ ругается, но только ворнингами, конечно. Но вообще это довольно раковая хуйня. Особенно когда-то какой-нибудь восторженный еблан, радуясь охуенности питона, пишет метод, который возвращает кортеж из инта, строки, даты, говна, мочи, еще одной строки, неба и Аллаха, а ты потом разгребаешь это дерьмо в дебаге.
>>1885817 Представлю как чел с плюсов, будет в хуилион строчек пытаться добиться оптимизации, в то время как дзен питона говорит "простое лучше чем сложное, явное лучше чем не явное ". По PEP8 тоже нужно выдрачиваться, не смотря на автокоррекцию IDE.
Есть объект collect Есть метод fill Когда вызываю collect.fill() То внутри происходит замена полей и разная херня. Этот объект не присваивается никому, только сам себя обновляет. Как замокать его, чтоб он подменялся на этом методе на нужные мне данные?
>>1885657 >>Но закономерно обосрался, потому что этот метод первый принятый аргумент постоянно интерпретирует как self да и вообще я работаю с методом не того класса. Как это сделать нормально? в статик метод заверни, я про декоратор @staticmethod , при таком декораторе первый аргрумент больше не self, но и self в теле фунции больше использовать нельзя
>>1889589 is_raining переименовываешь в not_raining и приравниваешь это к True, потом if (not_raining or beaufort <= 4) and temperature > 20: print('Идём гулять, на улице хорошо')
>>1889589 Если is_raining будет false, то есть дождя нет, то часть логического выражения в скобках будет true. И как будто бы можно идти гулять, если температура норм
>>1889674 Так в самом условии стоит it_raining = False. А в теле уже not is_raining (соответственно, not is_raining == True, т.е. дождь идет. Опять же, следуя логике, если отсутствие дождя it_raining = False)
Пишу не с целью доебать, просто пытаюсь понять, что я делаю не так. После того как в начал тупить в редакторе - исписал весь лист а4.
И самое странное, что это же, блять, элементарно. Циклы, алгоритмы, рекурсия были намного проще. А тут какой-то пиздец.
>>1889589 Основное правило составления условий: для if ты пишешь положительное утверждение, для elif'ов - все остальное. Никаких ! или not в первой строке не писать, если это возможно. Поэтому:
if (is_raining or beaufort > 4) and temperature <= 20: --print('Сидим дома, читаем Практикум')
else: --print('Идём гулять, на улице хорошо')
Поэтому теперь ты можешь спокойно менять булку is_raining с False на True и следовать логике условия.
Этого >>1889589 ни в коем случае не слушать, никаких переменных или методов с not в имени быть не должно, чтобы в коде никогда не было каловой массы вида if not is_not_registered()
>>1889893 Ну, это плохой пример. Ревью у вменяемого разраба он бы не прошел. Главное правило кода - писать так, чтобы его можно было легко читать. Потому в разработке 90% потраченного времени - это чтение того, что уже есть. Когда ты тратишь дохуя времени, чтобы вникнуть, что за хуйня написана в условии, то должна прийти разумная мысль переписать это говно. >>1889895 Такие тонкости переходят, что называется, из уст в уста в рабочей среде. Синьоры всегда подпнут джуна на ревью, говнокод не пройдет, что называется. Опять же, в разных коллективах разные нюансы по код-стайлу. Я помню, как в моей рабочей флудилке срались даже по поводу того, надо ли обосабливать ретурны пустой строкой. Спойлер: надо.
Colleagues, good afternoon! There is a model book and a model chapter. Each book has many chapters. Each chapter is tied to a specific book, and if the slug of the chapter is made unique, then when book1 - chapter1, I cannot create book2 - chapter 2, an error is generated. If you make the slug non-unique, then an error is issued that one argument was expected, but 2 was passed.
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)
>>1889913 >pr >не можешь в ангельский? Да, конечно. От качества твоего "англесского" смеемся всем Гарвардом. >а не высирал это Высираешься тут только ты своей стеной говнокода без отступов. В шапке куча ссылок на шаринг кода, не хочу постить ссылку, хочу, чтоб скроллить полчаса надо было. Хотя что еще ожидать от мелкобуквы?
Привет! До внесённых изменений этот код нормально работал. Я только импортировал подчёркнутый модуль и задал значение атрибутов в методе-конструкторе, который до этого, были = 0 Задание было таким: при создании каждый объекта класса должен получать случайный значения атрибутов. Я подчеркнул их красным. Ошибок программа не выдаёт, но метод mood возвращает теперь только значение переменной m = "ужасно". Подскажите, почему так?
>>1890056 >>1890054 Спасибо за ответы. Я импортировал модуль random внутри __init__ и там же присвоил случайные значение нужным атрибутам. Теперь, при создании, каждый объект класса получает разные атрибуты. Потом подумаю как написать красивее, пока вот так. Но я выявил новую проблему: Методы eat и play не меняют значение этих атрибутов. На что обратить внимание?
Кто-нибудь сталкивался с таким видом даты: image_date = "2011-12-04T21:33:40.000Z"? Можно ли как-нибудь распарсить ее через datetime или все-таки как str парсить?
>>1890294 >Кто-нибудь сталкивался с таким видом даты: image_date = "2011-12-04T21:33:40.000Z"? Да. >Можно ли как-нибудь распарсить ее через datetime Через dateutil.parser.parse()
Господа, как получить количество лайков и комментов (на КПДВ подчеркнуто красным), используя Selenium? Цифры появляются только при наведении курсора на элемент.
>>1890347 Пользовался сам? Для меня оно показалось каким-то замудренным. Надо через Фейсбук создавать какое-то приложение, давать разрешения, получать временные токены.
>>1890346 >получить количество лайков и комментов, используя Selenium Это как забивать гвоздь кувалдой, когда есть молоток. Используй requests, юный падаван.
>>1890423 Обожаю, когда человеку прямым текстом что-то говорят, например "недопустимый символ 'а' в строке '1254а', преобразование в число невозможно", а он спрашивает: "Чего это от меня шайтан машина хочет?"
>>1890432 как я понимаю, когда i=1, то он хочет сложить 1 и 2 индексы, но не находит число на втором индексе, но он же должен был добавить число, когда i был равен нулю.
Достаточно давно изучаю и пишу всякую хрень на питоне и, по моим ощущениям, знаю его синтаксис и функциональность, ну как минимум, на уровне джуна, а вот с проектированием и реальными проектами трабблы дикие.
Грубо говоря, SOLID и базис я знаю, и в принципе соблюдать умею без особых проблем, нюанс в том, что когда дело доходит до действительно модульного проекта, я просто теряюсь, не понимаю с чего начать и, зачастую дропаю, либо начинаю говнокодить с точки зрения ООП забивая на SOLID напрочь. С одной стороны, это неудивительно, а с другой, хочется чето менять.
Проблема imo в отсутствии опыта в работе над хоть сколь-нибудь серьезными вещами в команде, сам себе программируя опыта хорошего кодинга не наберешься. Пытался читать проект на хабе, и это ужас. Даже несколько десятков связанных файлов вызывают приступ нечетаемости, ибо просто невозможно разобраться в идеях создателей, в особенности если классы очень хорошо сделаны в плане абстракций, а строчки импорта доходят до 30-40 строк. Непонятно откуда и куда читать, если особенно если это распределенная асинхронная система.
Короче, как такое бороть? Где искать задания по проге не аля "Напишите программу, которая создаст два класса животных и рассчитает ежедневную необходимость в количестве корма", а более менее реальные кейсы, хоть с каким-нибудь ТЗ, и желательно, примерами кода, который должен был по итогу получится. Где искать конфы таких же рофло-челов, как и я, которые пытаются в код и работают над своим проектом? Хотел бы я в опен-сорс коммитить, но проблема выше не позволяет. Да и кому я со своей экспой нужен там
Извиняюсь за длиннопост, коллеги. Кстати, если у кого есть свои проекты подобного рода, буду заинтересован.
>>1890451 Очевидно, первая a запоминается до генерации второго списка, после чего ты начинаешь с нею работать. Уже на второй итерации итератор спрашивает третий элемент a, но у нее их всего два. Ты не можешь одновременно итерировать массив и тут же его менять в процессе. В твоем случае питон просто запомнил первую декларацию a, а потом начал создавать вторую a, но по окончании, если бы все закончилось успешно, просто перезаписал бы ее.
Тебе нужно создать пустой список, а потом аппендить его в цикле ренжа, причем каждый цикл список будет пополняться на два числа: первым, равным сумме двух последних имеющихся в списке, и вторым, равным сумме первого и того, что перед ним.
>>1890460 Возьми какую-нибудь не сильно сложную задачу, которую нужно решить лично тебе и сделай все по правилам. Придется 2-3 раза все переписать с нуля, но экспа появится, базарю.
Мой личный пример - делал для себя быстрый интерфейс на Tkinter для ffmpeg чтобы быстренько нарезать шебм для двача, кек. С первая версия была лютым говнокодом, с третьей попытки получилась конфетка. Можно даже оформить и выложить во всеобщий доступ, совсем не стыдно будет, но мне лень. Такие дела.
>>1890563 Спасиб за ответ, думал над этим. Проблема, собсна, в том, что отсутствуют личные задачи, которые я мог бы решать. От нечего делать пытался в написание нормального DS-бота, и тупо стакнулся, рерайтов там была хренова гора, но по итогу все в одно говно скатывалось. Собственно выше потому и спрашивал про всякие кейсы.
Энивэй, за ответ спасибо. Кстати, есть конфы / места где челы делятся своими проектами / ищут группы? Или все сами друг-друга на хабе ищут и находят? Новый во всем этом прогерском окружении, сорян за тупые вопросы.
>>1890460 >Хотел бы я в опен-сорс коммитить, но проблема выше не позволяет. Как раз самое то в попенсорс контрибьютить. И код твой обоссут, и тесты написать попросят. Пока не сделаешь все красиво, пр не примут. Тебе понравится.
Привет аноняши, хочу вкатиться в программирование и начать зарабатывать деньги. Как быстрее всего это сделать? Английский не знаю, компьютер - МакБук 15
Мне нужно питоновской фтп либой получить данные о файлах на сервере (рекурсивно) типа: название, размер, дата создания и модификации, путь на сервере. Как это сделать?
>Как быстрее всего это сделать? Конечно же, записаться на курсы онлайн-программирования Skillbox! Это чудестные прикрастные курсы, где лудшие учетиля тибя научат прогромеровать и уже черз читыре дня ты получиш сиртефекат об акончании и можеш сразу же устроица на работу с зар платой 300к/наносек!
Если у меня стомильёнов таких записей в юрлах, как мне их сделать красивее и презентабильнее? мб есть возможность их группировать по разным переменным?
>>1890871 Лучше синтаксическими особенностями. У решетки есть автосвойства. У решетки есть божественный Linq. А у твоей жабы есть Linq? А? А? >На жабу вакансий вроде больше Я про это и написал. >денег больше Не зависит от языка вообще (если это не хтонический Кобол в двух с половиной компаниях на весь мир). >Чем перспективнее? Как минимум тем, что делает свою родную замену говноЖСа.
>>1890905 Боже, какую же несусветную чушь задают на этих ваших говнокурсах. И ведь преподносят как "ЭТА ШТОБЫ РАЗВИВАТЬ СМИКАЛАЧКУ И НАГРУЖАТЬ МОСК ПОИСКОМ РИШЕНИЯ ЗОДАЧИ". Но ведь можно давать задачи, которые действительно имеют отношение к будущей работе.
>>1890622 >хочу вкатиться в программирование и начать зарабатывать деньги. Как быстрее всего это сделать? Английский не знаю Тогда твой путь с низов - идешь в тестирование, растешь до автоматизации, перекатываешься в дева, если захочешь.
>>1890924 >Но ведь можно давать задачи, которые действительно имеют отношение к будущей работе. Ты и в школе, наверное, отказывался математику и физику учить, типа задачки, которые решать заставляют, не имеют отношения к будущей работе.
>>1891062 ощибку я там по невнимательности сделал, потом исправлять не стал, чтоб номерочки строк остались. а дурилка сам бы нашёл её, при обдумывании происходящего.
кстати, у тебя охуенный финт со сравнениями множеств, моё почтение.
С ними иногда можно проделывать довольно много финтов, куда более интересных и практичных.
set("word") - создаёт множество (set) из итерируемого типа, в данном случае из строки, соответственно получится множество букв-символов
для множеств переопределены логические операции, как & (пересечение), | (объединение), ^ (разница).
Для них же переопределены операции >, >=, которые показывают, что одно множество покрывает другое, то есть все элементы одного множества содержатся в другом множестве.
Для тех, кто изучал математику, вещи интуитивно понятные и магии тут особой нет. Надо только помнить факт, что такое поддержано в языке.
В целом иногда довольно полезно быстро проверить, что все элементы какого-то множества содержатся в другом множестве (в списке разрешённых значений, например). Вместо того, чтобы оформлять цикл, можно вот такой финт использовать.
>>1891264 Под нормальным пингом ты имеешь в виду icmp? Это вообще не в тему. В принципе, у тебя норм. Скопируй только все оригинальные заголовки из хрома + компрессию + таки лучше гет, а не хед.
>>1891058 В школе я был тупым рабом своих родителей, у меня таких мыслей даже сформироваться не могло. А так да, физику, изо и обж с биологией бы нахуй выкинул из своего курса.
>>1885435 >реализация слабого Не полный функционирующий магазин, а понимание что куда и как взаимодействует хотя бы, минимум я там обозначил >(товары, корзина, заказ, покупатели и менеджеры)
>>1891323 >Хочу написать рест апи на питоне Какое-то бессмысленное предложение. Рест - это архитектура взаимодействия сервера и потребителя посредством их общения через рест-запросы. Рест уже существует, как ты его напишешь? Это как сказать: "Хочу сделать барокко с с помощью строительных материалов Леруа Мерлен".
>>1891472 Ладно, мистер зануда, хочу написать программу на языке питон, обрабатывающую хттп запросы в рестфул манере. Что там в вашем снобском клубе используют для таких целей?
При вызове scipy.integrate.quad передаю limit=2, но все равно вылезает предупреждение: IntegrationWarning: The maximum number of subdivisions (2) has been achieved. То есть алгоритм пытается дальше брать субинтервалы. Как сделать так, чтобы он не пытался этого делать?
Как выучить Django? Посмотрел уроки по Python - после нескольких курсов вроде как понял основы. Учу Джанго - не понимаю паттерн создания сайта. Какие уроки и какие книги могут помочь.
>>1892213 >стриминговый сервис Большие ресурсы для этого нужны (хороший сервер+трафик), изучать системные вещи, nginx, docker, ffmpeg, протоколы вроде rtmp/rtsp. Если питон использовать, то изучать сети и asyncio.
>>1892197 Если тебя впечатляют такие однострочники, посмотри: http://dabeaz.com/py3meta/ Ближе к концу видео он импортирует xml файлы, то есть: import file будет помимо file.py искать еще file.xml и загружать его как модуль.
Хочу сделать юрл типа /title/number. Если перейти в /title/, то все ок, джанго находит такое совпадение, но когда перехожу с title/ на title/number выдается ошибка. Хотя в локальных переменных я вижу , что kwargs получил мой title и number, но почему-то не нашел https://pastebin.com/TSUWTj8T
>>1892863 У тебя 1200 может встречаться ранее в файле, replace заменит первое совпадение только. Тебе нужно сначала найти позицию "Maximum visible distance" и уже начиная с нее заменять. Вообще странно, что значение в виде строки, а не в бинарном формате, может быть ты нашел display значение, которое меняет только то, что отображается где-нибудь в менюшке, но не само отдаление камеры.
>>1892215 Я что с ними делать понимаю. Просто не могу понять, как он берет аргумент в функцию, как он понимает что я в m хочу передать все слова на "х", я же явно это нигде не указываю, вроде бы. Я наверное, что-то не понимаю..
>>1892892 Сори за тупой вопрос, а почему ты вручную не можешь поменять, просто найди строку которую хочешь поменять и поменяй, врятли это в игре, что-то изменит, но строчку можно и вручную поменять
>>1893050 Вторым аргументом sub ты ставишь строку, на которую заменяется каждое совпадение, или функцию, в которые они передаются и заменяются на результат этого вызова.
>>1893157 Ну да в документации так и написанно примерно (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.) Просто интересно как именно она это делает, ладно забей, я думаю в соусе можно найти как она это делает.
Посоветуйте шпаргалку или краткий курс по NumPy. Внутреннюю кухню по мат.статистике знаю, мне бы справочник по функциям типа np.covariation(arr) выдает коээфициент ковариации.
>>1883441 (OP) Как называется различное поведение одного и того же метода в разных классах? экз в шараге, в интернете такой хуйни вообще нигде не найти
>>1893311 Полиморфизм это называется. >>1893314 Перегрузка применима к методу только одного класса и в питоне она даже не существует. В нем перегрузка достигается костылением через необязательные (дефолтные) параметры.
>>1893330 Он не про то спрашивает, а про реализацию кастомного класса, для которого работает искаробочный len, например. Это перегрузка, не? А то чего в питоне нет, как раз полиморфизм, лол.
>>1893331 Пчел, >Перегрузка методов – это объявление в классе методов с одинаковыми именами при этом с различными параметрам В питоне нет Java/C-подобной перегрузки, типа
def a(a: int): --return a
def a(a: int, b:str): --return a, b
Код сразу пошлет нахуй при попытке вызвать a(5).
>про реализацию кастомного класса, для которого работает искаробочный len Это вообще переопределение метода класса.
>>1893339 Ты меня ошарашил, всю жизнь я думал, что полиморфизм это как раз первое, а второе перегрузка, и так же оно работает в том же шарпе, про жабу не знаю.
Вот, например, в питоньем доке то же пишут https://docs.python.org/3/reference/datamodel.html#special-method-names > 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.
>>1893359 Ну это надо почитать какой-то ебанутый жаберский или шарперский кирпич, где половину объема занимают рассказы кто родил кого. В скриптоте мне это не очень интересно - как работает и для чего нужно понятно, а больше и не особо надо.
>>1893330 >В нем перегрузка достигается костылением через необязательные (дефолтные) параметры. Это не костылирование. Просто перегрузка в стиле C++ и дефолтные параметны несовместимы концептуально и технически.
Ну или очень сложно совместимы, с кучей потенциальных граблей.
При выборе одного из двух я однозначно за параметры по умолчанию. Одна из фишек, за что я просто дико люблю питон, чего не хватает в других языках.
>>1893534 Вообще дефолтные параметры и перегрузка несколько разные вещи.
Перегрузка нужна, чтобы разные функции вызывать в зависимости от типа параметра. С учётом, что питон динамически типизируемый, это довольно сложно сделать на уровне языка.
В таких случаях извращаются скорее с isinstance, чем с дефолтными параметрами.
Правильно ли я понимаю, что 1 и 2 вариант, абсолютно одинаков, и __init__ нужен исключительно для случаев как в варианте 3? Чтобы можно было создавать имена "интерактивно"
>>1893738 >Правильно ли я понимаю, что 1 и 2 вариант, абсолютно одинаков Нет, варианты 1 и 2 совершенно разные. В варианте 1 у объекта не создаётся переменная, name переменная класса. Просто питон видит, что переменная объекта не определена и обращается к переменной класса. Как только ты сделаешь self.name = '' или a.name = '' эта переменная будет создана.
Привет ребят, есть задача сохранять подряд пачку графиков на удаленном сервере(свечи и обычные) рисовал их с помощью finplot но не нашел в его доках функции сохранения. В общем как рисовать и сохранять свечи в большом количестве подряд?
Можете объяснить, почему в данном коде не идет повторения того, что ввел пользователь? Я сделал так, чтобы не выводился "quite" при завершении программы, но при этом, теперь не выводится вообще ничего.
>>1893883 Лучше юзать repl.it, твой интерпретатор какой-то конченный и работает через жопу. >Почему если if убрать из цикла, он не будет нормально работать? Что в твоем понимании "нормально работать"? Он работает именно так, как написан.
Вот у меня есть цикл. Пока сообщение не quit, сообщением будет то, что вводит пользователь. Вопрос: будет ли message = input(prompt) и для if тоже (который находится не в цикле?) или же message = input(prompt) только в while?
>>1894009 Потому что код не доходит до if. Он в цикле while. А while выполняется заново бесконечное количество раз (до StackOverflowException, конечно, но не в этом случае), пока он True.
Как же сложно вкотиться. Я уже 2 месяца по ~4 часа в день учу этот питон, bash И всё что я могу, так это писать примитивные скрипты. А ещё фрэймворки, паттерны, миллион библиотек, алгоритмы, и всякие книги "программируем как профи" и т.д. Я думал у вас попроще
>>1894041 Попроще чем что? Дома никогда не научишься кодить, твоя цель устроиться на работу, а для этого упор делай чисто на фреймворки, зазубривание теории и типовых вопросов для вкатунов. мимокрок
>>1894054 This, а еще пора пилить свой пет-прожект. Похуй что, что взбредет в голову, хоть напоминалка дней рождения, читающая из csv-файлика, которую можно бесконечно наращивать новыми фичами, лишь бы нарабатывать практику кодинга.
Бле есть лист словарей data в каждом словаре пиздец много ключей-значений, нужно фильтронуть этот лист словарей только оставить в словарях все ключи 'name' и их значения пишу: data = [item for item in data for k, v in item.items() if k == 'name'] Получаю исходный лист словарей нихуя не фильтрануло :/ Что ему ему не так?
>>1894065 Пет-прожект слишком громко для миллионого калькулятора. Достаточно выполнить тестовые уровня запилить систему абитуриентов и залить их на гитхаб.
Создаём экземпляр этого класса objA, у objA есть переменная classvar.
Изменяем значение переменной КЛАССА (не экземпляра) на другое значение. Почему значение меняется и уже созданных экземпляров? Это как-то связано может с ссылками на память? Мол, все экземпляры хранят именно ссылку на память, и при изменении переменной изменяется содержимое в памяти, при этом другие экземпляры всё ещё ссылаются на ячейку?
Есть один курс, и есть одна простая задачка. Собственно, задачка решена, но криво. Препод курса делает вот такую вещь в решении, которую до этого вообще не показывал - потому и я её нормально назвать не могу (привязывание списка к строке?).
Прошёлся по книжкам - не нахожу чёт.
Подскажите, анончики, как это называется. Прикреплейтед.
Питон, когда ты спрашиваешь переменную объекта, смотрит сначала, не определена ли эта переменная для объекта. Если определена, то использует её. Если не определена, то смотрит, не определена ли для класса эта переменная.
При этом если ты попытаешься изменить значение переменной объекта, записать что-то в переменную, которая определена для класса, но не объекта, то переменная класса не изменится, а будет создана переменная для этого объекта.
То есть переменная класса это переменная по-умолчанию и только для чтения.
Привет тред. Хочу сделать такой мини проект, чтобы мозги размять немного, сам не программист, но на работе ебошу иногда скрипты в юпитер ноутбуках, поэтому в целом понимаю что и как, но с какой стороны подойти не знаю.
Хочу раз в n времени проверять есть ли новые посты в паблике в вк. Если есть то проверять содержит ли пост указанный текст. Если содержит, то кидать пуш / смс или любое другое оповещение пользователю. В идеале бы это все оформить в бота в телеге с юзер френдли интерфейсом, чтобы не программист тоже мог воспользоваться, заранее благодарю за советы
>>1894261 Создай standalone приложение для ВК, получи токены и разрешения использовать АПИ, проделай то же самое с Телеграм. Если бот будет просто чекать посты ВК, то асинхронность не обязательно использовать, а то щас aiogram популярна библиотека. Я в этой асинхронности плаваю как кал сцуко. Найти бы упражения для отработки асинхронности, многопоточности и всей этой хитрой хуйни. Может кто видел? Можно и для другого языка, главное задачки.
>>1894054 >>1894065 Звучит хорошо. Спасибо что поддержали анончики! А то я совсем поник, когда понял, что соревнуюсь с людьми, которые учились 6 лет этой херне.
>>1894090 >Ни элемента такого в списке нет (это строка выше), тем более это не является номером элемента в списке А ниче, что строка выше - это переменная, равная выполненной функции eval, что есть int?
>>1894344 >Найти бы упражения для отработки асинхронности, многопоточности и всей этой хитрой хуйни В питоне я вкатывался в асинхронность через создание десктопных приложений посредство PyQt. Как известно, приложение по умолчанию работает в одном потоке, и если у тебя есть кнопочка "Просканировать пидоров вокруг", занимающая 10 секунд на выполнение данной операции, то после нажатия на нее десктопное окно попадет в состояние "Не отвечает", пока не пройдет 10 секунд, после чего оно одуплится. Поэтому любые функции должны отрабатываться в отдельном потоке, для чего в Qt есть встроенный QThread. Вот можешь с него начать. Но в питоне асинхронность пилить довольно заебно.
Вот то ли дело в шарпе, ммм: public async void ScanFaggotsButtonClick() { List<string> faggots = await Task.Run(() => ScanFaggotsInArea(10)) }
>>1894245 >>1894152 Годно выглядит, спасибо. И мб подскажите как там в этих ваших продакшенах на смотрят на длиннокод когда можно в одну строку всё сделать генератором? Всем похуй или нет?
>>1894435 >Ну за решение в 1 строчку я бы тебе ебнул бы, лучше пиши в несколько строк конкретно это решение потому что оно очень просто читается и с первого раза понятно что происходит, а в 1 строчку ты заебёшся вчитываться в эту сточку ебаную, там же блять лист компрехеншен в методе экстенд у листа и потом [0] сразу хуй пойми чего делает этот 0
>>1894435 >Годно выглядит В случае 'key1' выглядит как полный пиздец, потому что проще напрямую обратиться по ключу key1, чем в цикле проходить по всем ключам и сравнивать с key1. Такое распечатывать и на стенку вешать как шедевр программирования.
Хотя в исходном ТЗ, как я понимаю, надо не по набору ключей, а по чему-то типа регулярки тестировать, тогда такое уже нормально.
Но если будет регулярка или какая другая сложная проверка, то в одну строчку уже не запихнёшь, или уж очень тяжеловесно будет.
>>1894482 >Хотя в исходном ТЗ, как я понимаю, надо не по набору ключей Мне нужно было именно по ключу, эта вся хуйня нужна чтобы выдрать из REST нужные мне данные, собрать в словарь и из словаря запилить CSV по шаблону а она удобно пилится csv.DictWriter со словарями
>>1894865 Для начала сформулируй, что ты именно хочешь. И пример, как это в таблице будет выглядеть.
Потому что тут в одном списке три элемента, в другом два элемента, и визуально они никак между собой не связаны, не пересекаются по каким-либо значениям.
>>1894813 >Это всё-таки многопоточность, асинхронность это то, что через asyncio Можешь пояснить языком даунов (хоть как в том примере про электричество и говно), в чем разница? Мимо
>>1894923 Да это не имеет смысла, специально сделали враппер, чтобы красиво выплюнуть всё по ключам, а ты хочешь это через жопу провернуть для своего наркоманского случая. Делай построчно тогда без этих удобств.
>>1894922 В случае тредов ты запускаешь задачи, а переключение их происходит в случайные моменты времени. У тебя есть проблема thread safe кода, в остальном тебе адаптировать код не нужно.
asyncio требует основательной переработки кода, принцип асинхронности такой, что задача сама должна отдать управление циклу обработки задач. Обычно ты это делаешь тогда, когда блокируешься на сокетах. Оператор await для задачи позволяет отдать управление, но есть нюансы. В целом асинхронность такая удобнее, чем через треды, более производительная, но нужно, чтобы код поддерживал.
>>1895039 >Можете чекнуть мой гитхаб Думаешь кто-то таким занимается в принципе?
Вот зашёл в Wangan-Midnight, ни описания никакого, что это, зачем, как запускать.
Открываю исходник, main.py. Вижу там start_im = pygame.image.load("C:\\Users\\Tr0ub1e\\Desktop\\Folder3\\mid.png").convert()
Какой-то адовый хардкод, завязанный на какой-то ник, да ещё в винде.
То есть я без правки исходников запустить твою прогу, которая ещё не понятно, что делает, не могу. А это уже очень-очень дурной стиль. Особенно с учётом, что документации на это нет.
Не воспринимай мои советы слишком лично, я всего лишь токсичный анон-теоретик, кому лишь бы придраться.
Я бы посоветовал, как минимум, минимально оформить твои программы, презентация в таких вещах ключевое, она первое впечатление создаёт.
Убрать хардкод, особенно вот эти глобальные пути, завязанные на ник пользователя и на ОС, как вариант добавить конфиг файл.
Если честно, мне не понятна такая мания к публичным гитхабам. Просто есть такое мнение, что если ты что-то публикуешь, то оно должно быть кому-нибудь полезно. А по факту это "лабы" для себя, без документации, не понятно, зачем нужны, чтобы в них разобраться, скилл нужен не меньший, чем чтобы их написать.
Что подвигает к тому, чтобы смотреть их критически, найти что-нибудь плохое, чтобы плохо думать об авторе. То есть если кто-нибудь будет смотреть, то с подсознательной установкой найти что-нибудь плохое. Все для себя тесты какие-то делают, чтобы что-то пощупать, но не все их на широкую публику выкладывают. Обычно сделают и потом удаляют.
with open(str(path+'/'+filename)+".mp3" во-первых, os.path.join лучше для этого, хотя не очень критично, и потом, если читаешь что-то по сети и сохраняешь, лучше всё-таки ошибки контролировать, это же штатная ситуация.
Более глобально вопросы есть. Скажем если бы я для себя делал подобную утилиту (что в файле main.py), то разумно предусмотреть возможность, чтобы сохранять не один файл, а много. Один и руками несложно, много уже утомительно. А так, в поле input ввести через пробелы номера, потом уже в скрипте разбить на номера и циклом всё скачать. Просто разумно предусмотреть более ёмкий и при этом полезный функционал, и несложный. Это же главная цель автоматизации.
>>1895039 >>1895087 Дополню себя же. На самом деле сложно что-то советовать. Надо просто делать что-нибудь, изучать, думать над своим кодом, как его улучшить и сделать более надёжным-полезным-читаемым.
Всё сильно зависит от того, что именно ты хочешь осваивать в первую очередь.
Факторов, что можно улучшить, безграничное количество. У любого.
Код может быть местами ужасный, но он и у махровых сеньёров в серьёзных продуктах бывает местами адовый, не говоря уже о средних прогерах. Все иногда говнокодят, куда же без этого.
>>1894922 я концептуально это понимаю так: многопоточность - это когда одна команда в формуле-1 может выставить, в зависимости от бюджета, до 4 машин одновременно на трассу. допустим, победа зависит от максимального времени, проведенного на треке, и в этом случае заведомо выигрывает команда, выставившая на трек 4 машины. бедная команда ставит на трек 1 машину и она ездит кольцами, накатывает время, а богатые буратины ставят 4 машины и эти машины за один круг проводят время в 4 раза больше, чем бедняки.
асинхронность - это когда на том же треке тачки заезжают на пит-стопы. у богатых 4 тачки на треке, но на 4 пит-стопа денег не хватило и они ездят все в один. отсюда затраты времени на ожидание в очереди + плюс время на работу. бедняки с одной машиной и одним пит-стопом не тратят время на ожидание и могут за счет этого кое-что наверстать, но все резко меняется, когда богачи добавляют еще пит-стопов и каждая их тачка заезжает в свой собственный и вообще движется по своему графику, независимо от остальных.
>>1895185 Не совсем. Точнее, понял, но не то. Тебе главное нужно понять разницу между parallel и asynchronous. Оба используют multithreaing (multiprocessing) как базу, но подход местами принципиально иной. Очень часто асинк вообще локов и contest for resources не имеет.
Добавь только что мощность движка обратно пропорциональна количеству машин и гиперпынемобиль команды "HYPERPYNIA"приедет быстрее каждой из машин команды где много машин.
> асинхронность
Это когда пилотов обкололи веществами и им кажется что они едут одновременно, хотя на само деле у них одна тачка и они садятся в неё по очереди, и когда очереждной пилот вылезает из машины он залипает и не помнит ничего до момента как е8го сного пригласят сесть за руль.
Главное, многопоточность была создана не для того, чтобы производительность наращивать. Сама технология разрабатывалась тогда, когда процессоры были одноядерными.
Thread safe программирование тот ещё ад, когда ты работаешь на чём-то низкоуровневом, там просто на чём угодно можно споткнуться очень больно. В питоне такой проблемы почти нет, но потому что там лочится по поводу и без повода и как результат многопоточность фактически однопоточная в плане ресурсов процессора.
Конкурентное программирование, это когда у тебя в программе несколько логических потоков исполнения. Не для того, чтобы производительность поднять, а потому что логика работы такая. И тебе необходимо как-то взаимодействие между этими потоками обеспечивать.
Разница между тредами и async/await в том, кто отвечает за переключение потоков исполнения и как они происходят. В случае тредов скорее процессор или система, в случайный момент времени. Что просто, но неудобно и не оптимально. В случае async/await отвечает уже сама программа, об этом надо думать, но переключение идёт лишь в нужные моменты, оптимально, за счёт этого код сильно разгоняется.
>>1894922 Допустим, у нас есть Константин Петрович Потоков, добропорядочный семьянин, верный муж и заботливый отец. Петрович будет у нас программой на питоне. Петровичу очень хочется пожрать, но для этого нужно выполнить три задачи: помыть посуду, сварить пельмешки и сходить за хлебом. Петрович может выполнить все задачи синхронно однопоточно: помыть посуду, потом сварить пельмени, потом сходить за хлебом. Недостаток такого варианта в том, что Петрович бесполезно тратит время, тупо глядя как нагревается вода, а мог бы что-нибудь полезное делать. Петрович может выполнить задачи асинхронно однопоточно(asyncio): поставить кастрюльку на огонь, пока вода закипает помыть посуду, потом забросить пельмешки и пока они варятся сходить за хлебушком. Тут могут возникнуть проблемы, если нельзя переключится с одной задачи на другую(то есть задача не отдает поток выполнения), например, Петрович так долго ходил за хлебом, что пельмени сгорели. Петрович может выполнить задачи асинхронно многопоточно(multithreading): позвать семью, каждому выдать по задаче, и лежа на диване ждать доклада об успешном выполнении. Или не лежать на диване, а выполнять одну из задач. При таком раскладе может возникнуть ситуация, когда, допустим, нет чистой кастрюльки и жена ждет пока Петрович её помоет, да еще в коридоре стоит дочка в шубе и валенках, ожидая когда батя даст денег на хлеб. То есть один поток блокирует остальные.
>>1895744 >Допустим, у нас есть Константин Петрович Потоков, добропорядочный семьянин, верный муж и заботливый отец. Петрович будет у нас программой на питоне. судьба человека
Допустим тебе надо сделать несколько задач: 1) допилить бекенд-фичу, завязанную на кучу разных сервисов, поднятых под докером. 2) изменить дизайн web-based интерфейса, цвета, расположение кнопок и т.п. 3) посмотреть серию анимешного сериала 4) прочитать двач 5) съесть пиццу с колой
Истинная параллельность: Над монитором висит телевизор, в нём крутится сериал. Перед тобой стоит тарелка с пиццей, ты жуёшь её. Параллельно говоришь, чтобы голосовым набором настрочить пост на двач. Одной рукой набираешь бэкенд часть, другой рисуешь дизайн на другом компьютере. Это самая эффективная схема, ты независимо делаешь пять дел одновременно.
Многопоточность. У тебя висит секундомер. Каждые две минуты ты переключаешься с задачи на задачу. Посмотрел две минуты аниме, закрыл плеер, загрузил докер, поднял окружение и пилишь свою таску. Через две минуты закрыл редактор, до конца строку с кодом не дописав, взял пиццу, пожевал. Ещё через две минуты убрал тарелку в сторону, рагрузил редактор, рисуешь кнопки. Ещё через две минуты закрыл, открыл двач.
Асинхронность. Открыл бэкенд таску, реализовал часть, закоммитил, закрыл, переключился на пиццу. Сжевал кусок, довольный переключился на двач. Начал писать ответ, дописал, глянул на часы, ужаснулся, что потратил два часа на это, переключился на дизайн. Подвинул кнопку так, что самому понравилось, включил аниме.
>>1894939 >а переключение их происходит в случайные моменты времени Нет каждый 5 мили секунд если переключение возможно, или 100 машинных операций в питоне 2
>>1895744 Так, а когда кнопочка на ГУИ выполняет time.sleep(20), но форма при этом перетаскивается по экрану, не зависая, это асинхронно однопоточно или многопоточно?
>>1895816 Боже, что за настырность. Я не о том спрашиваю. Я спрашиваю: когда действие кнопки не фризит окно ГУИ, это какой сценарий: асинхронный однопоточный или асинхронный многопоточный?
>>1883441 (OP) Платиновый вопрос, но стоит ли вкатываться в питон для работы бэкэндером? Или из-за хайпа среди гречневых онлайн курсов теперь вкатиться нуфагу не реально?
>>1895822 >питон для работы бэкэндером Не лезь, бля, дебил, сука, ебаный. Срсли, питон - параша в большом проекте. Что бы там тебе маслятки не навешали на уши, факт остается фактом: динамическая типизация в ООП - кусок говна и идет нахуй. Можешь питон рассматривать как способ заработка в датасаенсе (функциональное программирование, скриптики-хуиптики), но не более.
>>1895833 >если писать чистый код Ahaha_oh_wow.jpg Сам себя послушай. В каком мире ты живешь, если пишешь чистый код, приходишь в компанию, где до тебя уже написан чистый код, а главное: где тебе разрешают писать чистый код? >>1895838 Пикрелейтед.
>>1895852 >В каком мире ты живешь, если пишешь чистый код, приходишь в компанию, где до тебя уже написан чистый код Проблема для всех языков программирования. Ад, который происходит на C/C++/Java куда хлеще, чем на многих других платформах. Статическая типизация этот ад только усиливает, а тяжеловесные системы сборки в стиле cmake+make делают его невыносимым.
Ты окружён жуткой архитектурой, которая конкретно зацементирована, в том числе из-за статической типизации. Потому что у тебя выстроена система классов из дикого количества слоёв наследования, на которую уже всё завязано, тебе надо мелочь какую-нибудь изменить, но добраться до неё невозможно, потому что она где-то в корне иерархии.
>>1895889 любая картинка это в основном трёхмерный(четырех) тензор с каналами R G B (А), просто возьми этот тензор картинки из finplot и загрузи в pyplot и посредством pyplot сохраняй
>>1895833 Это опять ты? Буквально недавно тебя в жс-треде обоссывал На любом проекте есть своя доля говнокода, говнокода нет только там где пишут "для себя и на века", но от таких прожектов всегда отдает легаси-душком. "Чистого кода" на коммерческих проектах нет и не было
>>1896162 >Это опять ты? Буквально недавно тебя в жс-треде обоссывал Ебать ты шизлонг, можешь меня еще под кроватью поискать, а потом принять таблетки на ночь.
>>1895828 >Срсли, питон - параша в большом проекте. Что бы там тебе маслятки не навешали на уши, факт остается фактом: динамическая типизация в ООП - кусок говна и идет нахуй. Ты вообще прав, но зачем так подрываться? Бекенд - это не обязательно большой проект.
Насколько хороши, полны и актуальны лекции Хирьянова? Понятное дело, что это лишь база (которую он, собсна, и зачитывает первоходам какой то там хабзы). Но мне так нравится его академический стиль повествования... будто реально вернулся в универ на лекцию по АоИПу какому. Стоит ли придерживаться его курса при знакомстве с Питонюгой (помимо чтения профильный литературы само собой)?
>>1896428 Я их не смотрел, хотя желание было посмотреть, как и некоторые другие большие курсы.
Тыкал в случайные места. Моё мнение, там лекции по алгоритмам, а питон лишь инструмент, на котором их реализуют.
То есть вероятно нормальный курс по алгоритмам, базовым, тыкаю в случайные места, и почти везде всё мне знакомо, отчасти поэтому немного лень смотреть.
С точки зрения именно изучения питона точно нет, плохой вариант. Куда не тыкал, везде какой-то самый минимум, общий для большинства языков. Лучше просто открыть книжку именно по питону, как вариант "intermediate python", в библиотеке в шапке где-то есть (причём на русском вроде бы даже), или в официальной документации, не обязательно всех этих лутцов брать, если прогать более-менее умеешь.
В общем для подтягивания алгоритмической базы, всякие сортировки, обходы деревьев, перестановки и т.п., видимо нормальный вариант и как раз на питоне.
Для другого вряд ли.
По стилю мне не очень нравится, я бы деда какого-нибудь предпочёл, но лучше не могу предложить.
Аноны, привет. Вопрос не совсем по синтаксису питона, так что прошу не бить палками В общем мне 24, есть 4 года опыта работы в геймдеве, стек юнити-c# и питончик для внутренних утилит + задачи по зрению (ну скелет там распознать и пр) + профильная вышка И сейчас мне этот геймдев подзаебал - это не похоже на программирование совсем. Думаю перекатиться в питон разработку. Скажите, чем вы занимаетесь вообще ? Какой стек юзаете? Или питон на вашей работе, скорее, вспомогательный язык? Знакомых спросить нет, а после прочтения интернета создается ощущение что на питоне “достаются данные из бд” и “кладутся туда”. Но бля понятно, что такое объяснение только кухаркам подавай и питон разработка - дело не простое. Вообще круто, если кто-нибудь приведет кейс сложной задачи на работе, в идеале, чтобы примерно понимать с каким втф сталкиваются разрабы (а так бы хоть кто-нибудь ответил бы)) Так же вопрос, есть ли вероятность залететь питон прогером с моим беграундом сразу на нормальную позицию? очень не хочется в плане зп терять (было 70). Буду рад адекватным анонам) спасибо) а то я немного в прострации с этой хуйни
А есть стримы, где люди программируют онлайн? Хочется посмотреть как они переименовывают классы, методы, переменные, как получают ошибки. Короче, обычная разработка. Я бы посмотрел. Где-то читал интервью одного прогера из Яндекса, он говорил о том, что они с остальными молодыми приходили посидеть за спиной у Сысоева, смотрели как он кодит.
>>1895815 Ну анончик, если синхронная функция не блокирует исполнение гуя, очевидно же что в отдельном потоке она исполняется, значит многопоточная. >>1895860 Это если не углубляться, а то под капотом там все не совсем так. Как анончик выше писал, там что в асинкио, что в мультитрединге внутри все равно кооперативная многозадачность.
>>1896456 Хм, похоже, ты смотрел более поздние его лекции. Я вот прям с первой начал, и там объясняются весьма базовые вещи (що такэ строка, присваивание, ХеллоВорд и т.д.). Мне наоборот показалось, что он начинает с уж совсем низменных понятий.
Хочу сделать пет проект ввиде аналога хертсоун. Начну пожалуй с бд. На ск это сложно через гуи реализовать. Поиск по бд(класс, редкость карты, стоимость карты) Сложный запрос (который в себя включает несколько пунктов вышеперечисленных)
Всем драсте, у меня встал вопрос. Я значит решил с помощью питона связать два компа, чтобы на них можно было играть в пинг понг, ну чтобы мячи через экраны летал. И при попытке передать координаты мяча у меня буфер сокета на сервере забивается из-за того, что на нём висят старые координаты мяча и не удаляюются. Как собственно мне удалить старые координаты мяча из буфера сервера? https://pastebin.com/1hhJ9Hdr - Это правый кусок программы, у левого логика идентична https://pastebin.com/cNVCvWiX - Это сам сервер
>>1896785 В плане БД используй что угодно, есть и для реляционных и для Nosql удобные библы. В плане графики и гуи есть PyGame. Но вообще, скажу, что подобные вещи на пайтоне не самое удобное делать. Ну если забавы ряди для себя, то конечно почему бы и нет. Но в целом по удобству, и по эффективности, лучше джавы и c# смотреть.