Из help(dict): > | fromkeys(iterable, value=None, /) from builtins.type > | Returns a new dict with keys from iterable and values equal to value. Что значит >from builtins.type ?
>>1159688 >кому надо тот сам комитит Ты я смотрю, не сильно понимаешь в менеджменте. А ведь ирония в том, что ленивые куски говна часто бывают гениальным разработчиками и чтобы им чего-то добиться, нужно, чтобы рядом были не менее гениальные менеджеры, понимающие в то же время в разработке. Классический пример - Стив Возняк, который в одно рыло сделал Apple II, но все же знают, что он бы его сам никогда не создал, всё это стало возможным, только потому что его вдохновлял Стив Джобс...
>я тебе советовал не смотреть а стриммить Ну, во-первых, я другой анон. Во-вторых, логично сначала посмотреть на то, как это происходит у других, чтобы потом решить нужно ли оно тебе и если да, то что можно улучшить.
>>1159941 >ленивые куски говна часто бывают гениальным разработчиками так себе утешение
>сам никогда не создал я со свечкой не стоял, спорить не буду, знаю точно кто реально хочет — тот делает, остальные погружаются в маня-оправдания
>логично сначала посмотреть нет, если тебе просто нужна мотивация, качай обс заводи и погнал, а если тебе надо найти йобыря, посветить сракой и собрать донаты со школьников, то да, гугли, рисуй кнопочки, пердолься с оверлаями, мультистримами и тд и тп
>>1159952 Ты снова делишь на ноль. Сначала предлагаешь стримить, а потом предлагаешь это делать ни для кого, что равносильно тому, чтобы не стримить. При этом, похоже, ни одно стримера ты сам ни разу не смотрел даже.
>кто реально хочет — тот делает Как у тебя всё просто! Еще скажи, что мотивация либо есть, либо ее нет... Мир, блядь, не сводится к нулю и единице и мотивация вполне может описываться единичным вектором в двумерном гильбертовом комплексном пространстве, а суперпозиция с мотивациями других людей может давать интерференционную картину, где все выигрывают, даже если по отдельности вероятность каждого из них стать единицей была крайне мала...
>>1159954 >а потом предлагаешь это делать ни для кого я сразу это предложил, ты читаешь мой текст и не понимаешь не то что сути, а даже конкретно написанного
запустить стрим — это проявить усердие и дисциплину по подготовке процесса, продумыванию задачи на перед, а это уже 90% успеха, когда ты примерно знаешь что будешь делать сильно мотивирует и успокаивает, нежели прыжок в неизвестность
я пробовал расписывать подробные туду листы, но стримы для двух человек оказались в тыщу раз производительнее
смотрел мэда лол, как и все, но это раньше, а щас смотрю стримы алегоритмик и эпиков, но в записи, ибо жалко времени на весь этот бесполезный пездежь, и да там нету звона монеток кек, раньше были котики, но эпики сослали няшку-комунити-парнишку в испашку и поставили заместо него колхозное бабо-ебало и больше нет котиков, и большая часть стримов превратилась в унылое говнище, проще ченджлист на форуме пролистать
>Как у тебя всё просто! так и есть родной
>мотивация либо есть, либо ее нет бывают замотивированные на половину лол?
ты либо тащишься от того что делаешь, либо убеждаешь себя в этом
ключевой момент не сидеть на жопе ровно когда дендриты тебя палкой пиздят, они просто хотят что бы ты стал лучше
>>1159958 >запустить стрим — это проявить усердие и дисциплину по подготовке процесса Запустить стрим - это нажать одну кнопку. Сама настройка занимает еще 5-10 минут. Олсо так сложилось, что я очень много стримов организовывал и провел. И в рамках хобби и по работе. В живую выступал перед аудиторией с лекциями, еще преподавал в аспирантуре. Всё это полезный опыт, но не нужно его переоценивать, более того, это вообще далеко не всем подходит, у многих вред от стресса значительно превысит любые положительные эффекты. Не говоря уже о том, что огромное время, потраченное на подготовку подачи материала, можно было бы посвятить изучению чего-то для себя нового.
>бывают замотивированные на половину лол? Да. А еще бывает эмоциональное и профессиональное выгорание, депрессии, потеря цели в жизни, ощущение бессмысленности того, что делаешь и много всякого другого. Конечно, если ты еще молод, вряд-ли с чем-то подобным сталкивался.
>либо тащишься от того что делаешь, либо убеждаешь себя в этом К сожалению, ты и сам не заметишь как одно превратится в другое. Кроме того, невозможно занимать всегда тем и только тем, что доставляет тебе удовольствие...
>хотят что бы ты стал лучше Нет. Мозг и тело хотят только лениться и бесконечно сберегать энергию, удовлетворяя при этом основные первичные потребности, но не более того. И такой потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе все бы становились учеными, стремились сделать великие открытия, разделяли идеи трансгуманизма и т.п. Но по факту мы имеем миллионы тупиц и единицы тех, кто пытается не быть тупым, но нихуя не понимает ни как этого добиться, ни, главное, - зачем!
>>1159962 >Запустить стрим - это нажать одну кнопку. заставляешь меня думать что я перфекционист, я например хоть и кормлю людей говном, но стараюсь делать это хорошо и продуманно
>вред от стресса дальше можно было не читать, ты просто прямым текстом сказал что сидите не рыпайтесь, да и вообще анон жизнь жизнь, каждый норовит обидеть, слишком много стресса, может выйти в окно?
>эмоциональное и профессиональное выгорание, депрессии, потеря цели в жизни, ощущение бессмысленности того, что делаешь и почему все это? ты внутренний диалог с собой не ведешь что ле!?
>если ты еще молод, вряд-ли с чем-то подобным сталкивался бросил институт на 2 курсе, работал фотографом днем, потом во вторую смену на складе, после первой ночи фотографирования в ночном клубе украли камеру(спустя 2 недели после покупки на лове-подарок к др) в метро тому шо уснул, потом был немножко сиджи артистом, граф дизайнером и вот теперь к 26 докатился до тридешки в риалтайме
и таки да братуха, все по изичу, кушаю ноотропы нет и мне заибись ага спойлерИРОНИЯ
>бесконечно сберегать энергию, удовлетворяя при этом основные первичные потребности ахаха мне можешь про это не рассказывать без работы со сбившимся режимом и маминым борщиком быстро скатываешься до животного брр нахуй
>потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе мы бы сидели и дальше на ветках и срали друг другу на головы
>ни, главное, - зачем! даже на ошеломляющую пропоганду в совке все было не так радужно, хоть и имело успех, я при всем уважении к заслугам предков, считаю капитализм более совершенной формой, где отвественность за мотивацию лежит на индивиде, а скажем какой нибудь илон маск пробует тебя подзадорить
>>1159982 Я в целом понимаю тебя и твою позицию (ты хочешь быть чем-то большим чем есть). Но тем не менее, вижу, что у тебя масса заблуждений в голове. Ну вот например: >>потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе >мы бы сидели и дальше на ветках и срали друг другу на головы Иронично, но люди - социальные животные, впрочем, как и все приматы. Именно социализация обусловила чрезмерное развитие коры головного мозга в результате чего мы стали, скажем так, разумными. А что есть социализация, ты задумывался когда-нибудь? Это обеспечение себе более высокого места в иерархии себе подобных! Считается, что это инстинкт. А еще мы уверенно можем заявить, что всё это завязано на размножение - более успешный, богатый, видимый и значимый человек всегда будет более востребован противоположным полом...
Однако социализация != саморазвитию. И появившееся в последнее время деление интеллекта на, скажем так, классический и интеллект социальный - прямое тому доказательство. Человек хорош только в том, в чем постоянно совершенствуется и нельзя стать лучше в программировании, тратя все свои силы на обеспечение более высокого места в социальной иерархии...
Если сказать совсем простыми словами - люди разные. И то, что ты это чуть-ли не прямо отрицаешь - такое себе.
>считаю капитализм более совершенной формой Ну да, вот только если глянуть как живут в самой крутой стране мира - Швейцарии, то быстро придешь к выводу, что там нихуя не капитализм, а скорее социализм! Если же посмотреть на Японию - лишь немногим менее благополучную страну, то там до сих пор чуть-ли на кастовое общество, полное условностей. Вывод напрашивается очевидный - дело не вовсе не форме как таковой, а в социуме и тех негласных и гласных договоренностях, которых соблюдаются. Индвиды же вроде Илона Маска как раз выбиваются из общей картины, потому что они никаких договоренностей не соблюдают как раз! Но ирония в том, что вряд-ли ты когда-нибудь станешь хотя бы валютным миллионером, не говоря уже о том, чтобы стать оригиналом, о котором будут говорить окружающие...
полез в дебри, сделал все сложно и загрустил, анон не надо так
если тебе не нужен такой навык как социализация ок, капитализму нужны дети только лишь для передачи капитала, будь спецом, подыми лове, и даже лысым тебя полюбит какая нибудь соска спойлер и ты ее полюбишь, хотя бы на 2 года и все у вас будет хорошо, только не будь унылым депрессивным говном, вот уж точно такой никому не нужен самое забавное смотреть на няшных тян в таком состоянии, вот уж блять реально не понято чего им сука не хватает
>люди разные снаружи, побитые окружающей средой и стартовыми условиями, но суть одна — чудовищные приспособленческие способности и бесконечные возможности такого гибкого органа как мозг
>вот только если глянуть то да, а если пожить там с пару лет, да еще изучить историю хотя бы лет за 500, то дааа
а инфантильные япошки с маленькими писюнами, ну тут вообще все очевидно, ну и вообще островные народы так себе
>что вряд-ли ты когда-нибудь станешь хотя бы валютным миллионером пфф
>о котором будут говорить окружающие... лел, я же анонимус, мне такого даром не надо
Релевантно ли начинать учить питон в 2д18 году? Сейчас занимаюсь в порядке хобби в основном жс говном: юзерскрипты, мелкая хуйня на электроне, думаю о ноде, как о бэкенде. Понятно, что порчти всё это может и питон(qt, flask etc), но стоит ли выбирать питон? Может лучше го какой-нибудь? Задачи: небольшие десктоп приложения, серверные вещи(бэкенды, боты, кравлеры).
>>1160058 Так ведь плюсы сами по себе вообще не имеют графических библиотек никаких, так что вариант еще хуже, чем ява. Что до последней - там надо как минимум мочь в MVC, иначе будет не гуй, а хуй...
Сап, анон. Появилась такая проблема. Возможна ли реализация вот такой 3D задачи: есть некоторая функция: S(x, y), где x - полярный угол, y - азимутальный угол. Есть вектор k который описывает сферу, т.е. координаты (k, x,y) (сферические). Эта сфера должна быть разноцветная, где цвет указывает величину S(x,y). Можно ли сделать реализацию в matplotlib и если можно, то как? Если еще короче: как привязать цвет в координатах (k,x,y) к величине S(x,y)?
>>1159822 Да, я как увидел reduce, я прям почувствовал, что это именно та функция которая мне нужна скорее всего из-за англ значения, потому что когда я сам пытался писать обход, у меня получалось типа {dir: [subdir1, subdir2], subdir1: [subdir1.1, subdir1.2]...}. То есть мне нужно было объединить части словаря очень хитрым способом, я за это даже не брался, потому что думал что для этого должно быть какое-то элегантное решение, ибо задача common use как мне кажется. >>1159825 > >reduce(dict.get, ['a', 'b'], my_dict) Да вот, в том и проблема. Я обычно для понимания по коду из примеров в терминале прохожусь, но подобную функцию так и не смог заставить работать. Однако в коде примера она работает. Но в любом случае большое спасибо. Хорошо объяснил и пример отличный. И я наконец-то сообразил, какую роль играет там dict.get! Пиздец, прочитал описание, понял что он делает, но... Эти знания не никак не скореллировали с тем что происходит в коде. Чувствую себя идиотом, который пытается вставить куб в круглое отверстие.
Но всё ещё остался вопрос, почему list_of_keys берётся [:-1] Всё, понял. Спасибо няш :3.
>>1160095 Построить сферу на которой цвет будет отображать значение посчитанной мною функции, которая зависит от углов. P.S. Картинка похожа на то что нужно.
>>1160109 В общем, да, правильнее будет покрасить. Тогда перестрою вопрос таким образом: ваши картинки (2 и 3) это грубо говоря карта, на которой цветом задана величина функции, которая зависит от координат. Вопрос 1: как привязать цвет к значению функции, а второе, как такую карту натянуть на сферу. Насчет вершин не понял вопрос: под вершиной имеется ввиду точка на карте?, если да, то вершин будет 360х360
Хорошо знаю жс. Хочу вкатиться в питон. Нужен ресурс где про синтаксис быстро пояснят, без воды. Дальше уже сам справлюсь. Посоветуй, ресурсов плз, анон.
>>1160117 >карта, на которой цветом задана величина функции, которая зависит от координат еще ни разу никто не формулировал понятие World Space Normal так точно лол
>как привязать цвет к значению функции я без понятия, тыж программист
>как такую карту натянуть на сферу 3д модель состоит из вершин, каждая из которых имеет координаты и направление(что бы полики нормально шейдились)
так вот что бы натянуть карту нужно модель "развернуть" UV Unwrap т.е разрезать модель по заранее выбранным ребрам и все 3д вершины переложить на Х и У (U и V по нашему) а дальше интересный момент, поскольку тебе нужно 360 вершин то на полюсах придется убрать по одной вершине и тогда развертка превращается в говно, либо ее можно сделать прямоугольной, но тогда будет лютый очевидный стреч
ну и рисовать саму мапу тебе соотсвенно нужно под развертку
сколько цветов нужно отобразить и в каком качестве, анон пиши подробно чо хочешь еба
Анон а как положено, вот я позаимствовал кусок кода с сайта\гитхаба, я теперь должен указать его в исходниках? Вначале документа? Как это должно выглядеть чтоб не моветон?
>>1160182 Если что-то распространённое, например реализация связного списка, можешь вообще забить на копирайт. Ну или дополнительно имена переменным заменить. Ссылку в коде хорошо держать в первую очередь для себя самого. Даже если на тебя начнут залупаться юридически, что крайне маловероятно, просто удаляешь этот кусок и пишешь заново.
>>1160077 Использовать функцию проекции сферы на 2д поверхность (причём это может быть как в географических атласах разворот сферы, может быть текстура для натягивания в opengl, может быть как бы фотография сферы с расстояния). Далее попиксельно для всей картинки вычислять в какую точку сферы падает луч, брать её полярные координаты, вычислять S, вычислять функцию цвета от результата S (три компоненты RGB), записать цвет в этот пиксель. Для антиалиасинга советую делать пикселей больше, например в 16 раз, а потом уменьшить картинку до целевого размера.
>>1160498 Искать. Списка скорее всего не будет, так как питон плохо подходит для графики. Есть по сути стандартная библиотека pillow, есть множество обёрток над сишными к примеру cairo, есть те которые завязаны на 3д апи (opengl), можешь хоть профессиональными рендер-движками управлять из питона в блендере. Если ты тот что со сферой возится, рисуй попиксельно, либо в numpy вычисли всё, потом переведи в pillow и сохрани как картинку.
>>1160525 Но ведь нет, у него толком виджетов-то даже никаких нет, он скорее для создания графических приложений, а не конкретно интерфейсов. Разумеется, на его базе можно что угодно сделать, и есть всякие pyglet-gui.
Аноны, нужно запилить одностраничное приложение, какой фреймворк заюзать? Хочу попробовать что-нибудь новое и то, что в перспективе может пригодиться(хотя бы для пет прожектов). Джанго и Фласк уже юзал много раз, сейчас вот между Пирамидой и Ботлом выбираю.
>>1159952 >так себе утешение Это и не было утешением. "Гениальные кодеры бывают ленивыми кусками дерьма" близко к "ленивые куски дерьма бывают гениальными кодерами", но ни там не там нет утверждения, из которого можно понять, что если ты "ленивый кусок дерьма", то ты автоматом "гениальный кодер", которому просто нужен манагер.
>>1160627 Вот как раз сегодня задумывался о том что импликация это не эквивалентность. Можно прикинуть: даже если 50% гениальных кодеров ленивые жопы, гениев всего 0.1%, а ленивых жоп 95%, то вероятность того что будучи ленивой жопой ты станешь гениальным кодером: 0.5 × 0.001 / 0.95 = 1/1900 ~ 0.0526%
>>1159798 (OP) Подскажите, пожалуйста. Пытаюсь поиграться с tkinter используя pycharm но выходит пикрелейтед. Пакеты установлены в систему (Mint 18). При запуске не через pycharm импортит корректно.
Анон, есть вопросы по первой картинке. 1) Что бля вообще происходит? Я знаю про декораторы функций - этой функции, которые принимают 1 функцию и возвращают одну функцию. Я знаю про декораторы классов - это функция, которая принимает 1 класс и возвращает 1 класс. А что тут делают вот этим @Property. Это же вообще не функция, а класс. Как они используют ее в виде декоратора? Класс же даже ничего не возвращает. 2)Как работает extension? Ведь на него применяются два декоратора (где первый мне непонятен, а второй обычный декоратор функции). Но ведь декораторы работают так: @decorator def foo(): после чего создается object reference с именем foo связанный с результатом работы декоратора. Значит после @Property def extension, extension будет равен результату работы декоратора - объекту класса Property (непонятно как), а после @extension.setter def extension, extension станет равен результату работы декоратора - самому себе. Как это понимать? Второй пик для понимая, что я имею в виду.
>>1160650 У тебя похоже модуль не установлен в том виратуальном окружении, в котором запускается код из шарма. Предположу, что ты его поставил в глобал, а запускаешь в шарме в каком-то из venv-ов.
>>1160646 Декоратор может вернуть что угодно. Да в общем-то и принять на вход что угодно. Вот только синтаксис не даст применить его через @ на что-то кроме функции или класса.
То что у тебя в книжке называется дескрипторы. Это как если бы ты переопределил --getattr--, --setattr--, сделал там много if по разным именам атрибутов, и в каждом таком if прописал какое-то кастомное поведение. То есть дескрипторы с их меджик методами вызываются непосредстенно внутренностями питона. Если хочешь посмотреть что там вернули декораторы, никто не воспрещает, возьми да сделай print(..), print(dir(..)), print(type(..)), и тайны приоткроются.
>>1160684 Ох уж эти ваши кривые дистрибутивы... Пользуйся арчем или генту - это единственные два линукса, где все пакеты, включая ядро, используются в неизмененном ванильном виде.
Блядь анон, я не понимаю!1 Сука! Есть список из ключей подсловаря. Пытаюсь применить к нему sorted(listfromkeys), а он мне TypeError: 'dict' object is not callable. Я уже как только не пытался, пиздец! Что з ахуйня, чё он мне пиздит? Меня уже трисёт нахуй!!!
>>1160686 если тебе надо отсортировать словарь словарей по ключам вложенных словарей, то это можно сделать, например, так: sorted(d.items(), key=lambda x: x[1]['key'])
>>1160689 Мне нужен лишь список ключей для "вывода" текста. Ключи -- заголовки, но прежде чем вывести их надо отсортировать. Сам словарь сортировать мне не нужно. Просто этот грёбаный список. Я не понимаю, почему мне говорит тайперрор dict object is not callable, когда это по всем параметрам список, хоть и создан из ключей.
>>1160695 Тут особо показывать нечего. Сейчас в терминале не работает то, что работает в коде. Я в ахуе короче! Просто В АХУЕ! Вот тот код что в строке работает. 3 пик подключаем в терминале ту же базу, выполняем тот же сорт и...
>>1160685 >это единственные щас арчовые репки с ауром уже в любом нормальном дистрибутиве с граф инстллером, манжара топчик например, можно даже сразу с и3 ВМ накатывать
>>1160684 а убунтоподобные загибаются да, каканинал похуй на десктоп, они ушли за баблом на сервера
При этом если убрать строку __slots__ то все работает нормально, но я хочу сделать с ней и не понимаю двух вещей. Почему и PyCharm и repl подсвечивают все атрибуты в __init__, говоря, что их нет в __slots__, когда это атрибуты класса дескрипторы же, а не экземпляра? Ну и почему соответственно вываливается с ошибкой "Product' object has no attribute '__id'" Понятно, что его нет, цель setter'a установить этот атрибут.
>>1160847 Во-первых, ты нахуя в __dict__ объекта лезешь, если сам же __slots__ ему указал? Наркоман? Во-вторых, кто там атрибуты класса, всё у тебя экземпляра же. В-третьих, виноват name mangling (гугли), но разбираться в этой каше (я не эксперт, но я бы за такой код премию не дал) лень, но если заменить все "__" на "_", то работает нормально.
>>1160870 >нахуя в __dict__ Потому что я хотел проверить, как устанавливаются атрибуты, уже исправил поставив нормальный __str__. >Во-вторых, кто там атрибуты класса, всё у тебя экземпляра же. Декораторы добавляют в класс атрибуты id, name и т.д. Питон видя в __init__ self.id, self.name ищет эти имена в словаре. А его нет. Тогда он ищет их в классе и находит их в словаре класса. Значит это атрибуты класса, не? >В-третьих, виноват name mangling Знаю что такое, но забыл про него. Заменил name = "__"+atr_name на name = "_{}__{}".format(cls.__name__, atr_name), все работает, спасибо. >я не эксперт, но я бы за такой код премию не дал Почему?
Как во фласке применить before_request только к определенному роуту? Я в принципе придумал как, создать отдельные blueprint'ы для нужных мне роутов, но это хуёво с точки зрения архитектуры. Собственно, сабж.
>Krita is a Qt-based application. In principle, you can use any Python binding to Qt as long as it's using exactly the same version of Qt that Krita uses. Вчера релизнулась крита 4.0, помимо всего прочего завезли питония, так что кому нехуя делать и кто хочет потискать кути5 - идите на форума и аскайте художников за реквесты
Сап аноны, знаю синтаксис но не знаю как кодить, читаю чужой код и мало что понимаю. Сам похожее написать не смогу. Жду ваши ответы какую книгу начать зубрить.
Сап, двач, нужен совет. Давеча оформил на Google cloud VPS, один хрен 300 баксов в подарок, а хочется потрогать писечку как она есть. За полгода халявы глядишь чему полезному научусь, подумал я и все заверте... Сразу скажу, что опыта в программировании у меня хуй да нихуя (html и css знаю, на Javascript немного пишу для веба, php на уровне быдлокодера)
Мне нужна доступная инструкция как на платформе гугла развернуть свой веб-проект на Python и Django, (желательно с django CMS) склеить его с базой данных MySQL и сцепить его через Git с моим домашним ломанным pyCharm. как это сделать? Справки гугла не помогают (или это я такой тупой, что не могу въехать)
Допустим я хочу создать сайт (имиджборду, дейтинг, форум, поебать) я иду в Google cloud, регаю аккаунт, получаю 300 баксов на счет, на них могу позволить себе машину в 2 ядра 4 гига на полгода, окей, для обучения должно хватить, беру машину на CentOS или Debian (я хз, что лучше, посоветуйте) и тут начинается непонятная хуйня, доступ по SSH есть, команды работают, куда копать дальше? Как настроить доступ по FTP? Как сделать так, чтобы Python 3.6 работал всегда, а сервер не подсовывал мне 2.7? Гугл юзал, вторые сутки вникаю, не выходит. До этого спокойно настраивал по мануалам VPS на шаред хосте под php, держал несколько Wordpress сайтов, проблем не было.
>>1161266 Установить python3. Освоить virtualenv, не пользоваться пакетами дистрибутива, ставить через pip внутри этого virtualenv. Гиту достаточно наличия ssh, хотя я предпочитаю локально написанный скрипт, который делает zip файл, вливает его по scp, далее через ssh -c запускает там определённый набор команд и всё разворачивается. То есть правило хорошего тона это не держать на серваке никаких скриптов отвечающих за деплой, только голый ssh наружу.
>>1161266 Тебе скорее в сисадминов тред с такими вопросами. В двух словах даже и не объяснить как поднять веб-сервер с пайтон-сайтом... И да, можно всё сделать руками, но сейчас как бы эра девупсов - автоматизация через системы управлениям конфигурациями, микросервисы на докере и всё такое.
>>1161267 Бро, сразу извиняюсь, если заебываю вопросами:
>Установить python3
Установил 3.6, по запросу # python вываливается 2.7 (понимаю, что так наверное и должно быть, просто я тупой)
>Освоить virtualenv
Вот,информацию, что это - я нашел, не могу дойти, зачем это юзать и в чем преимущества.
> не пользоваться пакетами дистрибутива
не понимаю, о чем идет речь.
>ставить через pip внутри этого virtualenv.
Это ты о Django и остальных инструментах?
>Гиту достаточно наличия ssh, хотя я предпочитаю локально написанный скрипт, который делает zip файл, вливает его по scp, далее через ssh -c запускает там определённый набор команд и всё разворачивается. То есть правило хорошего тона это не держать на серваке никаких скриптов отвечающих за деплой, только голый ssh наружу.
тут все более-менее понятно, инструкцию по привязке Git нарыл, но мне до этого еще как до африки пешком.
Смотри, я полный нуб, о существовании Python узнал пару лет назад, месяц назад прошел курс обучения в приложении Solo learn, со стандартной библиотекой разбираюсь, как завещали. Суть в чем: везде пишут, что Python и Django - это самые, блять, простые решения и на них веб-проект поднять легче, чем член школьника во время первой ебли, и дескать любой может не отвлекаться на тонкую настройку а СРАЗУ, блять, начинать писать код, а по итогу я луплю в консоль вторые сутки и не могу понять, как мне развернуть свой проект на сервере и иметь к нему доступ. Есть какие-то пошаговые мануалы, ветки форумов, где это все можно в более-менее доступной форме усвоить?
Есть информация, что кодить лучше начинать с реально поставленной задачи, вот я и хочу сделать понятный мне тестовый проект, пусть он будет велосипедом и никому нахуй не нужен, зато построен в привычном для большинства программистов пайплайне.
>>1161273 >по запросу # python вываливается 2.7 python3 надо писать же.
>virtualenv Чтобы все твои зависимости были установлены не глобально, а в отдельную папку - так можно быстро переключиться с одного проекта на другой, например. Делается так:
>>1161271 Да мне бы без объяснений лишних, просто ссылкой, куда пойти.
Понятно, что к админам, но неужели никто тут не разворачивал на своем VPS платформу для работы? Раз уж мимохую вроде меня это понадобилось, наверное, решение где-то должно быть.
кстати, у того же гугла есть готовый солюшен под Джанго, по сути - та же ВМ на Дебиане, но с ней ровно та же история. СЛОЖНА, НИХУЯ НИПАНЯТНА.
>Чтобы все твои зависимости были установлены не глобально, а в отдельную папку - так можно быстро переключиться с одного проекта на другой, например. Делается так:
Пагни нид хелп Кто-то работал с кубернетис клиентом? Суть в том что у меня фейлится соединение с https сервером из-за socket ssl проверки, хотя я и сконфигурил verify_ssl в False. ВТФ??? Как-же заебало это ебучее ssl все время из-за него какие-то проблемы
Анон, я понимаю, что скармливая путь os.path функциям в питоне в виде строки, мне надо или использовать raw string или эскейпить все \ как \\. Но почему при выводе этих путей Питон сам их зачем-то эскейпит как \\?
начал копать фляжку, как организован ввод переменных? где читать? Есть у меня html страница, в ней форма, как запилить что эта форма принимает переменную? Подскажите, дальше как по маслу пойдет.
>>1161452 Ну эскейпит и эскейпит, тебе жалко, что ли? Это только в интерактивном эскейпит, если что, а print(s) всё ок отображает. Что интересно, s.__repr__() заэскепит те слеши, которые служили эскейпом изначального, превращяя r'\a' в \\\\a, лол.
Sup чешуйчатые. Есть словарь, значения элементов которого тоже словари. Более того значения значений элементов словаря тоже словари. Такой вот многомерный массив. Выглядит примерно так:
Вопрос в следующем: Как взять по одному листочку на каждой конечной ветке, таким образом получить множество длиною в количество родительских ветвей листьев? Более того нужно перебрать все возможные комбинации взятия листьев при незнании ни количества ветвей, ни количества листьев, т.е. при неизвестном количестве вложенных циклов. Гугл говорит через рекурсию, но как это запилить сложна, сложна, непонятна
Сап, питонисты. Подскажите, каким образом можно составить изображение по пикселю, которые поступают последовательно из ком порта? Формат и разрешение известны.
>>1159798 (OP) Прочитал теорию из книги "Автоматизация рутинных задач..." Свейгарта. Через треть книги начинаются примеры автоматизации, и я в них жестко спотыкаюсь, зависая на каждой строке в попытках понять, зачем оно и почему работает. Плюс очень неудобно из-за того, что электронный формат. Сама книга очень дорогая, жаба душит полторы штуки отдавать, хотя кажется полезной. Можете подсказать какую-нибудь книжку, которую вот реально не жалко купить, и чтобы она охуенно все расписывала. Типа Лутца вашего, но их же у него много. Есть что-то универсальное?
>>1161649 Ну хочешь иди работай на пхп. Что тебе ещё сказать? К сожалению кроме питона нужно знать ещё очень и очень много других вещей, и эти вещи часто повторяются где бы ты ни работал, базы данных например.
>>1161652 Хорошая статья. В очередной раз убедился в том, что нужно учить не язык, а программирование и уметь продать свой труд.
Сама постановка вопросов "какой язык учить?", "На чем пишешь?" и т.д. - это глупость. Нужно именно учиться программировать в реальных условиях и на тех инструментах, которые сейчас востребованы. Но чтобы это уметь нужно 1) уметь программировать, 2) постоянно изучать новые технологии (если их стоит изучать, конечно).
А на одном лишь питоне сложно будет.
Повторю то, что я уже много раз говорил. Первый язык должен быть ассемблер, потом изучаете Си, дальше C++ или Java. Ну а потом можно и скриптовые языки типа Питона или Руби. Понятно, что это не такая четкая схема 1->2->3->4, но что-то типа того.
Ну а битарды и дальше могут продолжать свои "Питон клевый молодежный язык..."
>>1161680 То есть по факту я переношу то, что уже есть в книге, на цифровой вариант, который у меня уже и так есть и в котором неудобно ориентироваться. Хорошая идея.
>>1161682 >Первый язык должен быть ассемблер, потом изучаете Си, дальше C++ или Java. Ну а потом можно и скриптовые языки типа Питона или Руби Хороший совет для тех, кому уже за 20 и они решили попробовать себя в программировании. Дескать, ребята, потратьте еще пару лет на теорию, потом что-нибудь предпринимайте.
>>1161673 >Автоматизация рутинных задач..." Свейгарта >Сама книга очень бесплатная, вот тут https://sites.google.com/view/pypry/ есть видос где индус ее вместе с тобой будет проходить
>>1161682 вот этого в президенты шапку кроме ассемблера это клиника, всегда нужно думать о цели в первую очередь и минимально необходымых средствах для ее достижения, а подрочить теч можно и на пенсии
>>1161683 просто иногда надо снять стресс, вытащить наружу свою проблему и поделиться её с понимающим аноном
>>1161686 >Хороший совет для тех, кому уже за 20 Мир жесток. Работай хоть уборщиком, но асм изучи. Пока ты не понимаешь, как работает проц, ты не программист, а так, быдлокодер. Но я соглашусь, что асм надо изучать еще в школьные годы. Я сам его изучал, когда мне было 14 лет. Тогда еще был жив васм.ру (сейчас он переродился). wasm.ru - это реинкарнация assembler.ru. А ньюфаги и не слышали.
Потом на одном лишь асме кодить надоело и я начал использовать C. Писал разные утилитки, драйвера для Windows XP. Помню изучал серию статей Four-F по написанию драйверов под WinNT. Ну а потом начал больше писать на C++ и Perl. Потом ушел из перла и начал вместо него использовать питон. Но скриптовые языки у меня использовались как вспомогательные, а не основные. Если думаешь, на чем писать в продакшен, то выбирай джаву. Ну а для души asm/C++/python.
>>1161690 >Пока ты не понимаешь с ходу что здесь написано, 0111001101101111011100110110100100100000011010000111010101101001001000000110001001101001011001000110110001101111, ты не программист, а так, быдлокодер.
>>1161688 >бесплатная, вот тут https://sites.google.com/view/pypry/ Зачем мне, я ее и так читаю. Сказал же, треть книги осилил. Но бэктречить по pdf-файлу, который является сканом, дюже неудобно.
>>1161694 >0111001101101111011100110110100100100000011010000111010101101001001000000110001001101001011001000110110001101111 Надеюсь, ты это хотя бы сгенерировал, а не писал от руки?
Почаны, кто-нибудь использовал Gevent в хайдлоаде, как оно, много ли нынче геммороя? Собираюсь делать приложения для анализа кремлеботов и сисянботов и нужно будет собирать из интернета большую биг дату
>>1161706 Почаны, кто-нибудь использовал Молоток в плетении из бисера, как оно, много ли нынче геммороя? Собираюсь делать поклейку из бумаги и картона и нужно будет много ватманов и ножниц.
>>1161690 >>Пока ты не понимаешь, как работает проц, ты не программист, а так, быдлокодер. Блять, вот прям досконально изучать АСМ нахуй не надо, только ознакомиться. Всё равно писать на нем скорее-всего не придётся. Если охота понять как железо работает, лучше не ебаться а ассемблером, а Архитектуру компьютера от Таненбаума почитать, а ассемблер там будет, в целях нужных количествах для ознакомления.
>>1161553 Элементарно жи. Шаг 1. Напиши хотя бы просто рекурсивный обход одной ветки, чтобы получить на выходе список ['a', 'b', 'c', 'd']. Шаг 2. Заметь, что до точки 'c' обе линии одинаковы, и лишь на c расходятся, значит на этой точке нужно дублировать имеющийся на тот момент список ['a', 'b', 'c'], добав далее к одной копии 'd', а к другой — 'e' (разумеется, рекурсивно вызвав функцию обработки следующего элемента).
Ну и если всё правильно написано, дальше магия сама всё за тебя сделает.
>Параметры print() >... >flush – если задано значение True, поток принудительно сбрасывается в файл. Значение по умолчанию: False. Кто-нибудь, объясните, что это значит. Нахуя нужен этот флаш?
https://repl.it/repls/ScientificUnimportantCategories А как бы ты это сделал, анон? Мне не нрав, что я сначала хуярю целый генератор, чтобы потом применить на него any(), но как по-другому в функциональном стиле сделать я не знаю. (без него сделал бы обычный for который или выбрасывался бы с False, как только встречает неверный символ, или в конце возвращает True). И как уместить это все в 25 строк?
>>1161738 Если ты будешь писать по одному символу, то каждый раз перезаписывать целый сектор на диске размером 512/4096 байт очень дорого. Поэтому всё-всё-всё буферизуется и накапливается в достаточном количестве чтобы записывать один раз. Иногда по одному символу выводить всё-таки нужно, например точечки в терминал для прогрессбара, или для чятиков по TCP передавать маленькие куски текста немедленно, не накапливая на полноразмерный пакет. Вот для этого flush.
>>1161749 >Иногда по одному символу выводить всё-таки нужно, например точечки в терминал для прогрессбара >Вот для этого flush
Вот, тогда следующий вопрос: Я гуглил побуквенный вывод на экран, и там в примере был этот flush. Я удалил из кода flush, и все работает абсолютно так же: https://repl.it/repls/ClumsyFirebrickCompilerbug
>>1161752 Только что запустил этот код в ipython и оно ждёт, затем выплёвывает всю строку разом. Эта штука в браузере не полностью эмулирует реальные ОС.
>>1161752 >Так в чем цимес? Очевидно в том, что кто-то другой где-то принудительно вызывал flush, или stdout без буфера в шелле открыт. В интерактивном режиме питон точно вызывает его, например.
>>1161690 >очередные манятеории о том, кто такой настоящий программист, когда на швитом жападе давно разделили российского ПРОГРАММИСТА на три категории
>>1161754 Ааа, вон оно что. Понятненько. В той ветке форума, где я это гуглил, что-то такое тоже писали, а я недоумевал, что у меня все норм в repl.it А можно тогда сразу вопрос: у меня там end='' стоит, так вот, если я попытаюсь после этого текста вбить еще одну функцию print(), то второй текст будет на этой же строке, что и первая. Как это починить?
>>1161758 >второй текст будет на этой же строке, что и первая. Как это починить? >Я не вылил воду из стакана, и когда я начию в него лить из новой бутылки, перелевается через край. Как починить? Ты дурак или что?
>>1161764 >Ну, так и как закрыть кран, чтобы вода не лилась дальше? Ты путаешь. Кран открывает когда ты вызываешь print(). По-дефолту после вызова каждого принта меняется стакан (end="\n"). Если ты делаешь end="", по под краном остаётся тот же стакан, поэтому при следующем вызове print'а вода льётся в тот же стакан. Догадаешь, как поменять стакан самому?
>>1161756 >>1161708 >>1161694 Я вам не собираюсь ничего доказывать, но скажу вам следующее. Если у вас не базы (т.е. фундаментальных знаний), то не удивляйтесь, что вас не будут брать на работу. Это нормально, что студентов без знаний не хотят брать в уже наработанный коллектив. Но даже если вас возьмут на работу, то максимум, что вам светит - это миддл. Это будет вашим потолком в том случае, если вы скрипткидди. Не плачьтесь потом на имиджбордах, что нет работы.
>>1161778 Там есть 1) Programmer - должен писать код, тесты, документацию, выбирать наилучшее решение согласно заданию. 2) Software engineer - это программер + немного аналитик + немного архитектор + общение с заказчиком\проджект менеджером. 3) Computer Scientists - разработка и оптимизация алгоритмов + умение кодить, но не обязательно так же хорошо, как программер
Даже SE нельзя назвать тем, кто должен знать asm, сишку и прочую низкоуровневую шелуху, все зависит от специальность, а именно python\c++\java\js\еще какой нибудь языкdeveloper. Какому нибудь шарписту вообще не важно, как именно работает процессор на уровне asm команд. Не пытайтесь стать универсалом, который знает ВСЕ. it слишком разнообразно, что бы уместить все в голове.
>>1161786 доширачная зелень приходит сюда что бы ее подбодрили и задали вектор, а не послали нахуй дрочить основы четверть жизни, обозвав унтерменьшом
ведешь себя как занудный старпер, вот рилли, нахуй грузить зеленых ебалой!? или ты думаешь когда анон с дошика перекатится в рестораны с чеком под 10к, и устанет от этого, он сам не догадается дрочнуть фундамент ? ? ? если нет, то он не помидор, и никогда им не будет даже с четвертьвековыми основами
>>1161792 Это все хуета, которая используется менеджментом для составления бумажек. В реале есть просто программисты, которые пишут 1) низкоуровневый код (микроконтроллеры, embedded, ОСи etc) 2) прикладники 3) Ворлд Вайд Въеб и прочие скрипткидди.
Причем последний не обязательно означает, что человек чмо. Это вполне может быть хороший программер, который имеет большой опыт. Просто на среднего такого фронтэндера нельзя полагаться ни в чем.
Вообще, developer - они в строительных компаниях работают. А нормальные люди себя называют programmer. Даже термин software engineer уже постепенно впадает в немилость.
>>1161796 Я просто ответил на вопрос. Тут анон плакался, что ему не дают нет работы, а я поделился своим опытом. У вас же сразу срезанировало и начался термоядерный бомбеж. Это и понятно, ведь вы не программисты.
>>1161786 Как бы чтение Таненбаума, которого я предлагал и даст фундаментальные знания по работе железа, причем даже на более низких уровнях, чем уровень архитектуры команд. Или ты предлагаешь страдать ненужной хуйнёй и учиться досконально разбираться во всех изъёбствах ублюдочной x86-64 или какую ты там ещё архитектуру для изучения предлагаешь?
>>1161800 >Это все хуета, которая используется менеджментом для составления бумажек Кто сам-то? Пруфы того, что ты охуеней тех, кто придумал все это есть?
>>1161808 Какие тебе пруфы нужны? Пачки денег в подвале? Паспорт США с супом?
Если ты еще не понимаешь, что вся эта терминология не используется программистами, а используется менеджментом для составления бумаг наверх, то что я могу сделать?
>>1161810 >Если ты еще не понимаешь, что вся эта терминология не используется программистами, а используется менеджментом для составления бумаг наверх А у нас ее программисты используют
>>1161805 Как бы я низкоуровневым программированием не занимаюсь, потому на АСМ не пишу, нахрен мне это не надо. Но в случае чего, ассемблерные листинги читать могу и что там происходит понимаю. (Пришлось кстати однажды с этим поебаться, так как в одном проекте компилятор в определенных условиях лютую хуйню выдавал, которая не работала) Я тебе о том, что чтобы понимать, как в принципе работает ДВС не нужно уметь перебирать конкретный мотор батиной девятины.
>>1161810 >меня называл старпером ты же не подумал что это как то коррелирует с возрастом?
насколько надо быть умным и одаренным ПРОГРАММИСТОМ что бы с такой неистовой силой отрицать чужое мнение и выставлять свое, как единственно правильное и возможное!?
>>1161815 >с такой неистовой силой отрицать чужое мнение и выставлять свое, как единственно правильное и возможное!? Я просто сказал, что думаю. Еще раз, антош. Тут есть два типа людей: 1) имеют базу и работают. 2) плачутся, что им не дают.
>>1161819 >Ты не можешь найти работу? Нет, с работой у меня всё норм. Просто покоробили заявления о том, что зелёному неприменно нужно учить ассемблер иначе он нахуй не нужен
>>1161826 >Зачем? Это основы основ. Даже если ты изучаешь питон, то тебе нужно изучить, как работает его виртуальная машина (которая тут называется интерпретатором).
>>1161828 >это типы личности антош Соглашусь. Я никого не пытался менять. Просто выразил свое мнение на вопрос, почему у него нет работы. А в итоге началась бомбежка.
>>1161835 Затем, что если ты не знаешь, что под капотом, то ты не программист. Твой потолок - это мидл, но с возрастом тебя уже не будут брать никуда.
Просто если ты не хочешь ни в чем разбираться, то у тебя нет воли к тому, чтобы учиться. Я когда был маленький, то всегда разбирал всякие вещи правда потом не мог собрать и из-за этого получал пиздюлей, но меня это не останавливало.
А вот у тебя, видимо, нет желания разбираться, что там за этими абстракциями. Это значит, что ты плохой программист. Хороший программист смотрит вглубь.
>>1161840 Вот сделали конкретные определение с разделением обязанностей >>1161792 Если ты не можешь составить такое же четкое определение в рамках своего понимая настоящего программиста, то ты не можешь говорить о том, кто такой настоящий программист, а кто нет
>>1161832 >то тебе нужно изучить, как работает его виртуальная машина ок, но на том же примере с УКЛАДКОЙ кабеля для ПИТАНИЯ предварительно СМОНТИРОВАННОЙ розетки, мне вовсе не обязательно знать что по жилам кабеля протекает направленный поток заряженных частиц, все что нужно знать — так это не браться голыми руками за два оголенных провода, вот и всё
так и с машиной твоей, в любом учебнике по языку есть введение на пару страниц, этого будет достаточно
из спортивного интереса ты свободное время ты всегда можешь подрочить любую литру какую хочешь, хоть блять Ландао, он ведь тоже дохуя полезный, а чо ебать
но не надо этим засирать голову доверчивому анону, он сюда приходит пушо здесь все его друзья, а они его так жестко наебывают, не надо так занудная хуила блядь
>>1161830 Например для того, чтобы потом не охуевать и не ломать голову из-за чего у приложения в продакшене время от времени случаются дикие провалы по производительности, да такие, что приложение половину запросов в эти моменты проёбывает. (Тру стори из реальной практики, было такое. jit промахивался с предположениями относительно большого куска кода, а потом при промахе, деоптимизировал его и вываливал в интерпретацию)
>>1161846 >ему не дают БЛЯТЬ НИ РАЗУ НЕ ЗА НЕЗНАНИЕ СУКА ЕБАННОГО АСМА И УСТРОЙСТВА Х86 ебанный ж ты по голове перестань уже нагло врать и подменять понятия, все равно что с телками, ты будешь говорить анону с двача что ему не дают за всратое ебало, сука я понел ты траллируешь нас, а мы блять горим, больной ублюдок
>>1161849 >Ты не программист я девелопер, мне главное что бы работало, сносно работало, а чо там как там, я узнаю по ходу решения задачи, благо в рокетсаенс я не лезу
>>1161853 геймдевелопер же, но и таджика от кыргыза отличить сумею, а прорабы достойнейшие из людей, зарабатывают деньги тяжелым трудом, один таджик четверых руснявых алканов стоит, и яму под септик выкапывает за день
и я вообще не понел откуда такой негатив к ручным профессиям? конкретно мне для воссоздания виртуального мира нужна информация из реального, пусть не вся она релевантна, но знать наверняка это невозможно, так что иди нахуй комрад
Питонисты/пайтонисты/питонеры, поясните, среди вас действительно есть фрилансеры способные заработать денег с помощью пайтона, или это все троллинг уровня 300кк/наносекунду?
Ну че вы тут за срач развели. Настоящий программист это тот, который в течении года клавиатуру защищал и пиксели в зеленый цвет красил, чтобы красиво было. Не служил не программист.
А теперь помоги мне с домашним заданием нет. Вот нужно из кучи файлов отсортировать те, которые ещё не протухли. Я думаю взять текущее время time.time() и в цикле итерировать файлы, брать у каждого os.getmtime(), находить разницу с текущем и делить на количество секунд в сутках. Вот про секунды вопрос. Я хотел написать разница_в_секундах//(246060). И подумал. Питон будет это произведение считать каждый раз для каждого файла? Это нехорошо. Тогда может написать разница_в_секундах//86400. Но Питон про читаемость и понятность кода, а что это за 86400 такие? Тогда может вне цикла определить секунд_в_сутках = 246060, а в цикле писать разница_в_секундах//секунд_в_сутках? Как максимально красиво и pythonic way?
>>1161907 >Также проигрываю с тех, кто ведется и бомбит на толстоту про то что "в синьоры" не возьмут если в машинный код не можешь. Если посмотришь на мои посты, то в начале я даже не троллил, а вполне серьезно говорил. Но когда я столкнулся с непонимаением и неадекватом, то почему бы не потроллить?
>>1161949 Я наслушался охуительных историй от друга моего друга, который затирает, что он успешный мамин фрилансер на пайтоне. Я чую пиздеж. Как его вывести на чистую воду?
>>1161955 >Как его вывести на чистую воду? А зачем его выводить на чистую воду? Ты ему начинай втирать, что у тебя каждый день новая телка, а он потратил молодость на свой питон. Пусть его теперь дрочит.
Поясните за щёку, пожалуйста, на примере последовательности Фибоначчи: если я указываю верхний предел последовательности и пишу element = first_element + n t_list.append(element) first_element = n n = element То всё вроде нормально и в списке наибольшее число меньше указанного предела. Однако если я напишу element = first_element + n t_list.append(element) first_element, n = n, first_element + n
То наибольшее число выходит за границы предела. Почему так?
>>1162042 a = [Thread(target=func, args=[4]), Thread(target=func, args=[4]), Thread(target=func, args=[4]), Thread(target=func, args=[4])] for th in a: a.start() for th in a: a.join()
>>1162082 Хочу изъебнуться красиво, что-бы 10 потоков не писать на 10 строк. >>1162062 Этот анон передал что я хотел. Но я все таки думал что там можно по-другому это реализовать
>>1162080 Тут в прошлом треде один многомудрый анон втирал за склонность разработчика к лени. Зачем писать два лишних слова? А если тебе нужны две функции? Три? Будешь их через запятую перечислять?
Задача написать скрипт который будет считывать данные из всех csv и обновлять мой исходный JSON файл.
Сделанные шаги: 1) Считать все csv-файлы 2) Создать либо список списков, где базовым элементом будет строка параметра либо словарь с ключом-названием документа. 3) Найти общие строки-параметры для 3 юзеров 4) ??? 5) Загрузить это всё обратно в JSON без потери изначальной формы (Так бы я уже давно просто поменял всю структуру json'a под юзеров, но увы).
Так вот, я реально не понимаю, что мне делать. Строить страшные конструкции с миллионом if и for кажется убогим вариантом, да и скорее всего я что-то упущу. Может быть тут есть какое-то более приемлемое решение?
Допустим есть сервер на фласке. На сервере хранится 3 скрипта. В этих скриптах - GET запросы к серверу. Как убедиться, что GET запросы были отправленны именно со скриптов, именно от пользователя, который эти скрипты скачал с сервера, а не например через какой-то онлайн сервис по генерации запросов? Верификация по айпи - хуета, так как у пользователя может быть динамический ойпи, кастомные хэдеры можно так же подменить, или вставить в тех же онлайн сервисах. Есть ваще исходы какие-нибудь?
>>1162148 Шифрование с помощью открытого и закрытого ключа было изобретено в 1976 году Уитфилдом Диффи и Мартином Хеллманом (под влиянием работ Ральфа Меркле). Они основаны на том, что на принимающей и отправляющей стороне рассчитывается т.н. односторонняя функция, и отправитель и получатель передают друг другу два числа, позволяющие получить ключи для шифрования.
Господа, посоветуйте пожалуйста гайдов/туториалов/инструкций по созданию Django проекта. В библиотеке в шапках смотрел, там только справочники. Нужен именно пошаговый гайд для долбоебов, я так лучше воспринимаю, а уж потом углубляюсь в документации.
>>1162180 Далеко не всегда и не везде, тем более если значение очевидно и понятно и без префикса модуля. Да даже тот же >from x import • используется в стандартных библиотеках иногда.
>>1162129 Вкатываюсь и попытаюсь это сделать, если нормально объяснишь, что тебе нужно. Потому что я пока не понимаю. Для каждой строки csv надо найти, есть ли команда с заданными модулем, тестом и функцией, и если да, добавить в параметры этой команды юзера (который указан только в имени самого csv), а если нет - создать? Так что ли?
Блять, я тупой. Я не понимаю функцию def. Почему в одних примерах пишут, например, def function(): ..., а в других def function(time)? Почему в первом случае скобки пустые, а во втором там стоит переменная? Что, если в во втором случае я задефайню функцию, но переменную напишу другую? Как это, блять, работает?
>>1162221 Верно. Если дословно: Изменения могут быть следующие: 1) Добавлена новая команда 2) Удалена команда 3) Изменена команда (стала доступна для другого набора пользователей, перенесена в другой модуль, изменена вызываемая функция)
>>1162230 Покажи. Подобный аутизм можно даже в трядэ в майнкрафтах либо через аддон opencomputers, либо генерируя непосредственно NBT не запуская игру. Залипнуть можно надолго, но все эти алгоритмы с плотным размещением очень уж нетривиальные.
>>1162234 def это не функция, а ключевое слово языка, позволяющее определять функции. То что в скобках ты напишешь собственно полностью под твоим контролем. Можешь много параметров затребовать, можешь ни одного, в чём проблема-то?
>>1162235 Ну вот как я себе это представляю. Вложенных циклов дохуя, да, но if'ов вроде нормально. Не представляю, как без них можно проверять наличие команд и прочей шелухи. Другие аноны тоже оцените если можете. https://repl.it/repls/EthicalAbandonedMachinecodeinstruction лолирую с имен, которые repl генерирует
>>1162180 Вот таких как ты я чёт готов душить и расстреливать. Гугл не авторитет. Если у тебя файлы больше 1000-2000 строк, там да, это помогает. Но с другой стороны, такие большие файлы уже можно бы и поразбивать. Ещё бывает названия импортируемых фунции слишком generic лучше переименовать from os.path import exist as file_exists.
>>1162269 Ну допустим, есть веб сервис в котором зарегистрированные люди могут работать по api с другим сайтом, людей больше чем 1. Для работы с api другого сервиса, нужен будет http клиент
>>1162286 Нету , для работы с pyQt есть божественный Qt дизайнер, в котором рисуются формочки у wxpython тож есть какой-то дизайнер и у Gtk тож есть дизайнер
>>1162292 Нужен. urllib/requests блокирующие клиенты, то есть у тебя будет тредпул ограниченной размерности. Можешь ещё перейти на асинхронные дилды. Можешь соединения с определёнными сервисами тоже не закрывать раньше времени.
>>1162303 В pep8 не рекомендуют кастрировать язык. Если это так хуёво импортировать отдельные классы из модуля, напиши гвиде пеп пропозал вырезающий это из языка к ебени матери.
>>1162309 Рекомендуется абсолютное импортирование, так как оно обычно более читаемо и ведет себя лучше (или, по крайней мере, даёт понятные сообщения об ошибках) если импортируемая система настроена неправильно (например, когда каталог внутри пакета заканчивается на sys.path):
>>1162314 Что ты понимаешь под абсолютным импортированием? Покажи примеры по каждому пункту в стиле говно|охуенно: >более читаемо >ведет себя лучше >даёт понятные сообщения об ошибках Ну и непонятные заодно напиши. >импортируемая система настроена неправильно Надо что-то настраивать ещё? >каталог внутри пакета заканчивается на sys.path Это как?
>>1162262 Если бы я оценивал твой код, на тестовом задании бы собес и закончился.
Во-первых, пытаешься работать с параметрами командной строки напрямую вместо argparse, во-вторых, парсишь csv руками вместо стандартного модуля => не знаешь стандартную библиотеку.
(линтер я не включал - лениво) комментарии не по pep, строки совсем не 80 символов => понятия о code-style не имеешь.
* по поводу самого кода - такое обычно называют индусо-кодом или лашпекодом, а в приличных местах даже пиздят за это, и дополнительно пробивают c ноги за магические строки в коде.
>original = json.load(fin)["commands"] На кой ты здесь поломал оригинальную структуру? чтобы потом в конце дампить `{"commands": original}`?
>if len(sys.argv) > 1: раз уж пишешь свой говнокод, то поменяй условие в обратную сторону и заверши скрипт с описанием почему ты это сделал, вместо того, чтобы наращивать вложенность (касается всех твоих if)
>user+".txt" все что угодно - join, f"", %, format, но только не конкатенация строк плюсиком
>... по поводу структуры кода и возможности его переиспользовать и говорить не приходится.
>>1162330 >argparse Зачем мне использовать его тут, если единственные команды, которые будет кушать мой скрипт - имена .csv файлов? >стандартный модуль csv Я знаю про него. И опять - зачем он тут? В скинутом примере csv максимально простой, предполагаю, что остальные выглядят так же. Как и применение argparse это мне кажется пушкой по воробьям. Зачем? >комментарии не по pep, строки совсем не 80 символов В смысле не по пеп? 2 пробела от самого кода, #, пробел, комментарий. PyCharm завещал так делать. Та же PEP8 в Pycharm'е говорит про строки в 120 символов. >по поводу самого кода Ну а что не так то с самим кодом? Итерирую csv, беру из них необходимые параметры, ищу нужную команду в оригинале, изменяю/добавляю, если нет. Как это по другому сделать? >На кой ты здесь поломал оригинальную структуру? Оригинальная структура представляет из себя словарь с одним единственным айтемом. И нафига мне его через всю программу тащить, когда можно тащить сам айтем? чтобы везде в остальной программе не писать original["commands"] >раз уж пишешь свой говнокод, то поменяй условие в обратную сторону Тогда придется писать что-то типа sys.exit() или как он там. Лишняя строка, не? >все что угодно Зачем эти ненужные усложнения? Когда нужно вывести большую красивую строку - делаю их. Но тут то зачем? >по поводу структуры кода и возможности его переиспользовать и говорить не приходится Ну а ты как бы сделал? Я думал нахуярить coroutine'ов и сделать pipeline раз я их только выучил, хуле и нет, но конечная цель - поиск совпадений name,function,module все равно пришлось бы делать во вложенных циклах. По-другому я не придумал.
>>1162348 >argparse >Зачем мне использовать его тут, если единственные команды, которые будет кушать мой скрипт - имена .csv файлов? Как минимум, чтобы я мог сделать `./main.py --help` не заглядывая в код.
>стандартный модуль csv >Я знаю про него. И опять - зачем он тут? В скинутом примере csv максимально простой, предполагаю, что остальные выглядят так же. Как и применение argparse это мне кажется пушкой по воробьям. Зачем? Затем, что писать собственные велосипеды стоит в контексте саморазвития, во всех остальных случая стоит использовать готовые решения. В данном случае это готовое решение есть в стандартной библиотеке и не несет какого-то оверхеда. Помимо этого решение c argparcse/csv предоставляет гибкость и простоту расширения, чего нет в твоем коде.
>комментарии не по pep, строки совсем не 80 символов >В смысле не по пеп? 2 пробела от самого кода, #, пробел, комментарий. PyCharm завещал так делать. Та же PEP8 в Pycharm'е говорит про строки в 120 символов. > for command in original: # looking for command with same name,module and function Сдается, что кто-то здесь пиздит (и, 121 символ, что даже твой pycharm должен подчеркнуть как code-smell)
>по поводу самого кода >Ну а что не так то с самим кодом? Итерирую csv, беру из них необходимые параметры, ищу нужную команду в оригинале, изменяю/добавляю, если нет. Как это по другому сделать? декомпозировать, разделить обязанности, предусмотреть варианты возможных изменений в текущем коде и инкапсулировать их, предусмотреть возможные варианты развития и не усложнять их.
>На кой ты здесь поломал оригинальную структуру? >Оригинальная структура представляет из себя словарь с одним единственным айтемом. И нафига мне его через всю программу тащить, когда можно тащить сам айтем? чтобы везде в остальной программе не писать original["commands"] working_chunk = original["commands"] from ... in working_chunk: pass json.dump(original)
>раз уж пишешь свой говнокод, то поменяй условие в обратную сторону >Тогда придется писать что-то типа sys.exit() или как он там. Лишняя строка, не? а еще можно бросать исключения с детальным описанием проблемы и обработкой их в одном месте и корректным завершением приложения - еще больше строк.
>все что угодно >Зачем эти ненужные усложнения? Когда нужно вывести большую красивую строку - делаю их. Но тут то зачем? затем, что этим ты показываешь незнание того, как работает конкатенация строк и лень при написании пары лишних символов
>по поводу структуры кода и возможности его переиспользовать и говорить не приходится >Ну а ты как бы сделал? Я думал нахуярить coroutine'ов и сделать pipeline раз я их только выучил, хуле и нет, но конечная цель - поиск совпадений name,function,module все равно пришлось бы делать во вложенных циклах. По-другому я не придумал. см пункт про декомпозицию и обработку исключений (что по сути есть разделение приложения на функциональные слои)
>>1162347 Монада, если не вдаваться в анальные глубины общей алгебры, является удобным паттерном для функциональных языков. Монады позволяют набирать последовательные цепочки вычислений, тем самым гарантируется строгий порядок выполнения. Особенно это полезно для вызова сайд-эффектов, получается по сути императивный код на основе чисто функционального, где в общем случае порядок вычислений заранее неизвестен.
>>1162348 >Я знаю про него. И опять - зачем он тут? В скинутом примере csv максимально простой, предполагаю, что остальные выглядят так же. Как и применение argparse это мне кажется пушкой по воробьям. Зачем? Csv штука сложная. Ты наверное думаешь, что это просто разделенные сепараторами поля и не знаешь, что сепаратор может быть внутри кавычек.
>>1162371 >а еще можно бросать исключения с детальным описанием проблемы и обработкой их в одном месте и корректным завершением приложения А вот тут мне уже стало интересно. Покажи, как ты это делаешь.
>>1162385 Тебе нужно сначала осознать что в ФП средах порядок выполнения не определён. В ФП ты не описываешь последовательность действий вроде возьми то, сложи туда, возьми это, перенести туда. В ФП ты сразу пишешь что тебе надо вот эти две коробки в таком порядке, а компилятор/рантайм тебе уже сами додумывают как это размотать в нужную последовательность действий и где что когда выделить в памяти.
Допустим у тебя есть такой код:
print(sin(sqrt(2)))
Вот это хороший пример вычислений зависимых по цепочке. Рантайм сможет это посчитать только в единственной возможной последовательности: сначала двойка, затем корень, затем синус, затем print.
Но что если функции никак друг от друга не зависят, а в цепочку их слепить надо? Например
print('lol') затем print('kek') затем print('ayy')
Вот тут-то и нужны монады. Делаешь print('lol') bind print('kek') bind print('ayy'), получаешь выражение наподобие print(sin(sqrt(2))) с единственно возможным порядком выполнения. При этом нагромождения от тебя скрыты и ты видишь только красивый чистый синтаксис.
>>1162394 >Покажи, как ты это делаешь. Зависит от ситуации, в этом скрипте достаточно было бы: def handle_line(line): # разбираешь строку, бросаешь по необходимости исключения
if __name__ == '__main__': for line in file: try: handle_line(line) except CriticalCustomException as ex: print(ex, file=sys.stderr) sys.exit(1)
>>1162422 Тут мало по экцепшенам. Ты отдельные классы создаешь или один? Сколько параметров в классе и как это определяешь? На какой уровень вложности процедур надо расчитывать в try/except блоках?
>>1162432 >Common declarative languages include those of database query languages (e.g., SQL, XQuery), regular expressions, logic programming, functional programming, and configuration management systems.
>>1162434 У меня в гите смотреть особо не на что, лучше посмотри код опенсорсных проектов - сильно полезнее будет (начать можно с той же django). А по поводу остального, классы нужны если есть состояния(если их нет или можно избежать, то функциональщина может быть предпочтительнее), декомпозировать на классы нужно в соответствии с логикой, обязанностями и общей моделью/структурой приложения; количество параметров рекомендуют делать не больше семи. А по поводу вложенности процедур в try/except каких-то особых ограничений я не знаю, по крайней мере я не вижу проблем в том, чтобы оборачивать в try/except рекурсивные функции. Другое дело, что лучше не размазывать обработку ошибок по всему коду, а делать это в одном специальном месте.
И, ответы на эти ответы не абсолютны, а понимание их нужности/полезности приходит с опытом (есть книга макКонела "идеальный код", там он как раз об этих вещах пишет, но если у тебя совсем нет опыта толку от нее будет не много).
>>1162440 Не похвалил. Неопределенный порядок вычислений есть в каком-нить прологе или при выполнении sql, а в лиспах/хаскелях/кложурах (и либах добавляющих функциональщину к питону, php, js, java) порядок вычисления вполне себе конкретный, а примеры, которые ты написал в >>1162413 - дичь полная.
>>1162567 Потому что в первом варианте итерация происходит на уровне сишного кода, во втором на уровне питонов. Никто бы не делали эти ваши нампи если бы вот так скорость не прирастала.
>>1162475 >порядок вычисления вполне себе конкретный Вот это уже реально дичь. Нахуй тогда монады нужно-то? Вычисления могут быть детерминированными, то бишь повторяться одинаково при одинаковых входных данных и фазе луны. Но это не рассчитано на то чтобы какие-то задроты вроде тебя в уме разворачивали весь граф вычислений и писали код подглядывая в исходники ghc.
Анон помоги мне потушить пердак. https://pastebin.com/1w0AWjjY Какого черта меняются значения в listnew_? Я нигде не просил этого. Выглядит будто при передаче листу listnew_ значения list_, собственно передачи значения не происходит, а как будто передается только указатель и ссылаются оба на одно и тоже. Иначе как объяснить такое поведение? И как это исправить?
>>1162610 >Выглядит будто при передаче листу listnew_ значения list_, собственно передачи значения не происходит, а как будто передается только указатель и ссылаются оба на одно и тоже Ты не поверишь.
>>1162612 >>1162614 >>1162619 Спасибо аноны. Вам не кажется, что это является эталоном зашквара? Как вообще можно было до такого додуматься? Что поведение базового оператора зависит от контекста его вызова (в случае целых чисел, например, работает иначе). Стало быть python это не тот язык на котором можно просто писать, а нужно сидеть и пердолиться в изучение какие еще операторы в каких разных контекстах проявляют не ожидаемое поведение и где ждать подводные камни? Нах так жить посоны? Можно ли это как-то отключить, директивой какой-нибудь и т.п.? извините, у меня бомбануло
>>1162636 Просто у питона наглухо упоротый синтаксический сахар b = 4 это обёртка для b = int(4) или как то так я уж не знаю как там точно в интерпртитаторе хуярится
>>1162636 >>1162641 Блядь, они плодятся. Какая нахуй обёртка над int(4), что ты несёшь, это ты упоротый сахар, блядь. Уже потратил на тебя полночи, ты опять начинаешь.
>>1162636 >Вам не кажется, что это является эталоном зашквара? Это является эталоном работы с памятью через указатели.
Иди читай ветку от >>1158870 пока тред не смыло. А так же про указатели, референсы, значения, lvalue, rvalue и ещё что-нибудь полезное.
>>1162655 Блядские основы мне почему-то не помогают. Вот объясни, почему при list4 = [1, 2, 3, 4, 5, 6] ----for y in list4: ------if list4.index(y) % 2 == 0: ---------print(list4[y])
Он мне выдаёт 2, 4, 6? Индексация же с 0 начинается. Т.е. должен выдать 1,3,5. Или я опять чего-то не понимаю?
>>1162659 >Или я опять чего-то не понимаю? Во-первых, ты не понимешь, что далет >for y in list4 Во-вторых, ты не понимаешь, что ты вообще делаешь. Нахуя, спрашивается, ты обходишь в цикле массив по его элементам (по порядку), а потом берёшь индекс элемента? Почему сразу по циферкам от 0 до длины списка не пройтись?!
>print(list4[y]) На этой строке ты принишь y-тый элемент списка. y — значение элемента списка, а не его индекс, который ты только что проверил на чётность.
первая итерация: y = 1 index(1) % 2 == 0 list4[1] # 2 потому что это второй элемент списка
>>1162662 >Во-первых, ты не понимешь, что далет >Во-вторых, ты не понимаешь, что ты вообще делаешь. Возможно. Именно потому хочу понять и разобраться. Мне надо чётные индексы заменить на, например, какое-нибудь фиксированное значение. >>1162664 Дело в том, когда ты используешь метод for: То есть for не использовать?
>>1162636 Такое поведение абсолютно у всех по крайней мере динамических языков: PHP, Lua, Javascript, Perl, Ruby. Посмотри на это с другой стороны, вдруг у тебя есть структура размером 4Гб, потом ты делаешь какую-то элементарную мелочь и все 4Гб автоматически копируются. Ещё вдруг ты захочешь закинуть куда-то далеко в код структуру, но при этом иметь на неё ссылку и время от времени читать. Как такое сделаешь? Явно указатели будешь брать? Истина в том, что поведение copy на деле нужно ооочень редко.
>поведение базового оператора зависит от контекста его вызова (в случае целых чисел, например, работает иначе) А как иначе? 2 + 2 это далеко не то же самое что [2] + [2] или '2' + '2'. Кстати говоря, операторы наподобие + не изменяют структуры, а порождают новые. Изменяют структуры inplace вызовы методов например list.remove, list.clear, list.append.
>>1162688 нихуя сложного. это называется инвайронмент управляется либо через pip либо через conda вообще всю подобную херню по смене версий надо доверять пакетным менеджерам. Очень удобная штука. Всё для людей
>>1162702 Ну, мам! А если серьёзно, пердолиться с этой проблемой и тщетно искать ответ я могу неделями. Я пришёл с вопросом, и хочу получить на него прямой ответ.
>>1162697 Тебе уже ткнули. for x in lst перебирает элементы, а не индексы.
>написать как правильно? Ну введи ж ты в гугл python loops tutorial, первые же пара ссылок приведут куда надо и расскажут, что там и как. Ладно бы тебе нужно было срочно сделать, тогда бы дали ответ, но так-то нахуя? Ну напишут тебе тут наебал, не будет тут ответа, дальше что? Ты завтра с очередной такой же дебильной проблемой прибежишь.
>>1162703 Проблема в том, что твоя задача по факту не имеет смысла. У тебя есть массив, из которого ты пытаешься получить значение индекса, чтобы на его основе вызвать элемент массива. Масло масляное, ни добавить ни прибавить. Нахуя это вообще? Это как если бы пошел срать, но предварительно надевал на себя свитер, а потом снимал его тут же. Хотя можно было бы сразу пойти срать без свитера.
Посоны, есть ли строковая функция, которая яаляется обратной repr()? Мне нужно убрать экранирование из строк в файле, пока решил задачу костылем из print -> subprocess. Т.е. в файле изначально сохраняются строки вида "\nt\ty", а мне нужно, чтобы он выглядел как при print("\nt\ty")
>>1162636 Блжад. Ты и при инте передаешь ссылку на инт. Вот только изменить значение по ссылке ты не можешь, поэтому присвоение нового инта просто меняет ссылку
Я думал, что я понял все про object reference, но похоже нет. Вначале object reference b указывает на двойку. После первого a.append(b) в a хранится b - object reference на двойку. Потом после b=3 object reference b указывает на тройку. После второго a.append(b) в списке a на 0 и 1 местах хранится один и тот же object reference указывающий на одну и ту же тройку. Почему я получаю [2, 3]?
>>1162882 В питонах всё есть объект. Объекты хранятся в памяти и не имеют имён, только адрес, тип, значение, refcount. Твои a и b это только имена, которые ссылаются на адреса с объектами. Можешь считать что текущий контекст выполнения это такой dict с именами-строками (попробуй vars(), globals()). Кстати refcount это оно и есть, сколько имён привязано к конкретному объекту. Когда оно становится 0 сборщик мусора его автоматически удаляет из памяти.
>>1162882 Во-первых, 2 и 3 - неизменяемые объекты в пайтоне. Во-вторых, ты сначала установил ссылку b в одно значение и его добавил в список, потом установил в другое значение и уже другую ссылку добавил в список - получился список из двух разных ссылок на два неизменяемых значения. Как бы ты теперь не модифицировал значение ссылки b, в списке у тебя сейчас хранятся ссылки на неизменяемые 2 и 3, а не на b. Как правило такого поведения мы и ожидаем...
Вот другой пример: >>1162885 - здесь сначала создают две ссылки на изменяемый объект, а потом в один из объектов дважды добавляют одну и ту же ссылку на изменяемый объект. Т.к. добавлена ссылка на изменяемый объект, то теперь изменение b приведет к изменению элементов списка a... и теперь это вряд-ли тот, эффект, которого мы хотим!
>>1162885 Про пример со списком в списке помню. Чет пиздец туплю. >>1162893 То есть в a.append(b) я добавляю в список не само b, которое может указывать на разные ссылки т.е. на разные объекты, а ту ссылку, с которой b связанно в момент выполнения append'а? А чем тогда является само b?
>>1162636 >Стало быть python это не тот язык на котором можно просто писать, а нужно сидеть и пердолиться в изучение какие еще операторы в каких разных контекстах проявляют не ожидаемое поведение и где ждать подводные камни? Просто нужно выучить, какие типы - мутабельные, а какие - нет.
>>1162897 b - это ссылка на неизменяемый объект! In [1]: b = 2 In [2]: a = [] In [3]: a.append(b) In [4]: id(b) Out[4]: 140615934922848 In [5]: id(a[0]) Out[5]: 140615934922848
>>1162897 >ту ссылку, с которой b связанно в момент выполнения append'а Именно! Само имя в структурах данных нигде не фигурирует. Например если ты добавил что-то в массив, то по старому имени из этого массива уже не взять, только по индексу. Смекаешь?
>>1162906 Ты когда выйдешь из контекста где у тебя определены a b, то всё, имена a b станут недоступны. Только безликий массив c с индексами. Объекты внутри себя уже определяют свои собственные именные контексты. И опять же, если забрать значение атрибута объекта и куда-то его передать, то там куда передали никогда не узнают что когда-то это называлось например a.n.
>Как минимум, чтобы я мог сделать `./main.py --help` Теперь можно
>Затем, что писать собственные велосипеды стоит в контексте саморазвития Define велосипед. Я понимаю, что например самому разбирать файл json не надо т.к. он пиздецки сложный. А тут вроде бы легко, в две строчки всего но все равно добавил после сообщения анона о том, что запятые могут быть в кавычках, не подумал об этом чет
>Сдается, что кто-то здесь пиздит А как надо писать комментарии? На том же pythonworld.ru в теме про ПЕП8 говорят про два пробела, #, пробел, коммент. Поставил ограничение на 80 строк что за ебанутое соглашение. со 120 намного лучше было
>декомпозировать, разделить обязанности, предусмотреть варианты возможных изменений в текущем коде и инкапсулировать их, предусмотреть возможные варианты развития и не усложнять их. Сделано. Разобрал все на столько, на сколько можно. За команды теперь отвечает отдельный класс, который можно менять как хочешь, проверка модулей, имен, функций, юзеров и добавление юзеров делается его методами, которые можно изменить. Все проходит через охуенный pipeline, любую остановку которого можно изменить, чтобы принимать другие файлы не .csv например или добавить ограничения на них. Кто хочет может получать ошибки в консоль, кто хочет в лог, кто хочет может изменить error_handler чтобы делать с ошибками что угодно. Можно так же изменить функцию составления новых имен для файлов или поиска .csv в папках например чтобы игнорировать папки с началом "donttouch"
Только обработка исключений вышла хуевая. А может и нет, но мне она не нравится. Но по-другому не получилось.
>from ... in working_chunk: Вот это кстати не понял. Попытался погуглить но выдает from import или yield from, о которых я знаю. А что ты сделал не понимаю.
Вопрос, так и надо было? Или слишком много? Количество ебучих строк увеличилось в 7 раз. Семь блять. Мне кажется я сделал что-то совсем не то. И писал я это 5 часов с перерывами и прочим но все же Может потому, что только учусь и охуенные сеньоры сделали бы это за 5 минут, но я очень заебался писать это, получать порцию говна в лицо, и переписывать, чтобы его на вентилятор не бросало и чувствую себя немного пиздец тупым. И как вообще догадаться о таком на собесе надо? Ведь анону дали задание сделать бумажный самолетик. Я накатал 30 строчный бумажный самолетик, который делает именно то, что от него просят. А после твоих сообщений сделал ебучий 200000000 строчный звездолет.
Ещё вопрос про "поменяй условие в обратную сторону". Вот во многих местах сделал это, и вроде бы получается даже красивее, но приходиться кидать break и continue. Ещё когда в 7 классе нас учили Паскалю, кто-то сказал мне "continue, halt, break, go to для пидоров". Насколько это правда и насколько правильно я использовал их в своем коде?
>>1162991 Я это не запускал, но выглядит очень круто. Пойду читать про coroutine и все в этом духе. Походу придется повременить с вкатыванием, я ещё слишком low level оказался
>>1162991 >Вот это кстати не понял. Попытался погуглить но выдает from import или yield from, о которых я знаю. А что ты сделал не понимаю. Он опечатался, там for, конечно же. Суть в том, чтобы иметь original, который настоящий оригинал, а для сокращения кода, если тебе постоянно к одному и тому же ключу обращаться, вынести его в новую переменную, с которой и работаешь (так, как ты работал с original в своём коде).
>кто-то сказал мне "continue, halt, break, go to для пидоров". Это сказал пидор. %Ну, разве что goto можно понять%%. В питоне приветствуется наименее индентированный код, то есть лучше в if пихать условие выхода, а сам код потом на том же уровне, что и до этого. Сравни два варианта: https://repl.it/repls/InsidiousTiredCharacters Если кода много, а не один принт, то второй выглядит гораздо приятнее.
>А как надо писать комментарии? Я не уверен, но, вероятно, комментарий на строке с двоеточием лупа комментарий не очень хорошо делать.
>>1162991 А зачем тебе тут корутины? Ты один раз читаешь/пишешь в файл же, нигде в I/O не простаивает код без дела (пока оба не загрузишь всё равно ж ничего не сделать).
И какого хера говорят про сложность и непонятность сишных указателей с крестовыми ссылками, когда в питоне все эти изменяемые и неизменяемые типы не менее простые, а скорее даже более путанные?
Суп питуносы. Я все ещё пишу бота в телегу 3 дня работал, простой, да. В общем каким-то образом мои тесты внезапно иногда вешают систему, и я не могу узнать в чём причина.
Каков выход из данной ситуации? А именно как обезопасить головную систему стабильный debian он таких внезапных падений?
Слышал что-то про docker, но не уверен зачем он нужен и подойдёт ли к этой ситуации. А также можно заебашить виртуальную машину.
Андрей Светлов (создатель aiohttp), жестко раскатал самый производительный питон веб сервер , абаSanic. Будьте осторожны, при использованиии этой перделки на продакшене
>>1163136 Автор одного новоиспечённого веб-дилдака разобрался чуть лучше в матчасти автора другого новоиспечённого веб-дилдака и не поленился провести ревью. HTTP ахуительно сложный, что тут сказать. >производительный Бгагага. Покажите мне хоть одного человека, который реально упёрся в производительность фреймворка на практике.
Анон поясни в чём может быть проблема. Есть установленный модуль natsort. В PyCharm при его импорте подчёркивает красным типа нет такого модуля. Запускаю в терминале всё работает, есть такой модуль. Ну работает и хуй с ним, подумал я.
Загрузил всё это дерьмо на heroku, прописал в зависимостях natsort, и угадай что? Хуй! Нет такого модуля. Как быть?
Перепиливаю парсер на случай, если urlretrieve не сможет сохранить некоторые пикчи. Наткнулся на следующую проблему. Допустим, код такой: req_img = requests.get(image_url) image = open("{}/files/pics/{}".format(settings.MEDIA_ROOT, image_url.split('/')[-1], "wb")) image.write(req_img.content) image.close()
В другом скрипте - всё норм, в консоли - всё норм. Запускаю этот скрипт: IOError: [Errno 2] No such file or directory: '/Path/to/media/files/pics/2d240494067091ebacb8838a847fdb38.jpg'
Хотя по идее он должен сам этот файл создать. Папки /Path/to/media/files/pics/ существуют, вбиваю в файловый менеджер путь из ошибки - переходит. ЧЯДНТ?
>В питоне приветствуется наименее индентированный Хорошо
>>1163009 А разве сопрограммы используются только для асинхронных кодов, которые работают с другими медленными программами? Я думал это вообще functional style и можно использовать, чтобы делать красивую логику программы. Вот в моем примере есть эта труба и есть остановки, на которых как-то фильтруются данные. Все просто, понятно и красиво.
>>1163158 Тут даже хз. Зависимости же устанавливаются на виртуальную машину на сервере heroku. В общем я ещё в этом не особо силён, не могу ничего по этому поводу сказать
which python я полагаю нужно на серваке прописать? Ещё не пердолился с ssh, там есть возможность но ещё не разбирался. Сейчас покопошусь. На моей машине в venv which python: /home/username/PycharmProjects/HogeBot/hb_virtualenv/hb_env/bin/python
>>1163170 Дело ещё в том, что вместе с natsort устанавливается telebot, в import он идёт выше natsort'a, и его импорт проходит без проблем. Собственно что-то всё-таки в самом модуле, ибо в pycharm он подчёркнут красным, хоть и запускается в терминале, но при попытке запустить из PyCharm даёт ошибку.
>>1163170 Мда. Зашёл в баш heroku. Оттуда бот запускается (хотя только после переустановки pyTelebotAPI. В консоли питона natsort импортируется. В рот ебал
>>1163160 >сопрограммы используются только для асинхронных кодов, которые работают с другими медленными программами? Сопрограммы это и есть асинхронный код. Не медленными, а ожидающими чего-то, давая возможность освободить ресурсы для полезных задач. Или когда порядок действий / время получения входных данных неизвестно.
>Я думал это вообще functional style Даже если бы это он и был, нафига тебе эта функциональщина? Илитарием побыть?
>есть остановки, на которых как-то фильтруются данные. В каком плане остановки? Процессор не простаивает во время фильтрации. У тебя каждая итерация каждой корутины будут идти по очереди. https://repl.it/repls/MatureFarawayModule
>Все просто, понятно и красиво. Красивенько, согалсен, и так-то малаца, но вот начсёт первых двух применительно к этой задаче я бы поспорил. Твой код приходится читать с конца в начало: в пайплайн передался путь -> смотрим, что такое этот пайплайн -> validate_csv -> там какому-то ресиверу что-то отсылается -> возвращается в вызов validate_csv, смотрим что ему было передано -> extract_from_csv -> там то же самое -> update_commands. А вот вызываются они все последовательно.
Вот у тебя запускаются несколько корутин, ресиверсы всякие, ты туда-сюда сообещния с данными передаёшь, причём в заранее известном порядке всё происходит. Но зачем? Ты с тем же успехом мог бы вместо receiver.send() сделать обычный вызов функции: https://repl.it/repls/FussyObedientEmacs (пикрелейтед сравнение последовательности вызовов, видно некоторое сходство.) Немного говнокод, потому что я старался внести как можно меньше изменений в твой.
Это лишь моё мнение, разумеется, и местные сеньоры и сеньоритты вполне могут оказаться правее.
>>1159798 (OP) Двач-помогач, тут нужно интерфейс для одной проги запилить, мб кто знает годные гайды по pyqt5? В гугл могу, но хорошего материала как-то не нашёл
сап двач советач посоветуйте пожалуйста годную статью по созданию приложения командной строки на питоне, где обьясняется как работать с аргументами командной строки. желательно по англицки. но на русском тоже сойдёт если годнота.
>>1161775 Объясню для дауна. Понятно, ты в цикле доливаешь в один и тот же стакан, а потом хочешь плеснуть в другой. Но ведь есть простой и сверхочевидный (для не-дауна) способ: когда цикл закончится начни следующую команду с перевода каретки замены стакана.
>>1163438 Я практически то же самое и сделал же, просто вместо пустой строки переместил последний символ. Я-то думал, это можно было в той же строке сделать, так сказать, подставить сразу новый стакан на следующей строке, а вы подставили второй стакан, чтобы туда капнуло последний раз, и после этого идете брать третий.
>>1163644 >Я-то думал, это можно было в той же строке сделать, так сказать, подставить сразу новый стакан на следующей строке, а вы подставили второй стакан, чтобы туда капнуло последний раз, и после этого идете брать третий. Нет, это ты капнул последний раз (точкой) и поменял стакан. В нашей аналогии перенос строки это смена стакана. print() не делает ничего, кроме переноса строки. print("abc") == print("abc\n", end="") == print("abc", end=""); print(). И третьего стакана никто не берёт, откуда ты это выдумал?
>Я-то думал, это можно было в той же строке сделать У тебя одна и та же строка кода выполняется много раз, каким образом компьтер должен догадаться, что в последней итерации нужно что-то другое сделать? Либо все принты в лупе с переносом, либо все без.
>просто вместо пустой строки переместил последний символ. И зачем? В следующий раз, при получении неизвестной тебе строки, тоже сделаешь for i in string[:-], а после лупа print(string[-1])?
вкатываюсь. Подскажете позязя, как из строки "sfdsfsdfsfsjiaud ifu afu afual" взять все что находится между двумя звёздочками? сэкономите мне целый день чтения аноны)))
>>1161792 Ни один из них не являются программистами. Уже хотя бы потому, что никто из них не создаёт программы, откуда пошло название. Это кодер, ПМ и, скажем, архитектор (или дизайнер). А программист это они все вместе.
>>1163648 >И третьего стакана никто не берёт, откуда ты это выдумал? Третий стакан — это новая строчка с принтом. Вот вы пишете: 1. print(i, end = '', flush = True) 2. print() А третий стакан: 3. print('New string') То есть три раза один хуй надо писать. Но я вас понял, спасибо за пояснения. Вообще я ожидал, что print() выведет лишний пустой абзац, и придется еще и с этим ебаться. Оказалось, что не казалось.
>>1163660 >А третий стакан: Так ты откуда и что считаешь-то, ёба? "New String" зальётся во второй стакан, и только после этой строки подставится третий. В твоём коде всё то же самое ведь, ещё раз говорю. Твои print('.') вне лупа это то же самое, что print('.', end="") в лупе с последующим print() вне лупа.
>придется еще и с этим ебаться. Оказалось, что не казалось. С чем ебаться?
>>1163668 >Так ты откуда и что считаешь-то, ёба? Первый стакан: принт, входящий в фор, основной принт, так сказать. Второй стакан: принт без нихуя, в который сливается последняя капля end=''. Как с члена стряхнули напоследок. А третий да и все остальные — все, что принтится после. >В твоём коде всё то же самое ведь, ещё раз говорю Так а нахуй ты тогда так категорично заявлял, что я хуй, если я по факту проделал то же самое, но не дотянул чуть-чуть буквально до окончательного решения? >С чем ебаться? Да я думал, придется видоизменять до уровня print('', end='\n'), но это одно и тоже, да и пустой абзац там никак не мог появиться.
Бродяги, расклад такой. Есть проект на Джанго. Нужно расфасовать статические файлы по канонам DRY. В проекте много app в которых используются файлы из bootstrap фреймворка и так же самодельные файлы css/js. В корне основного приложения сделана директория templates , в которой будут находится части шаблона, которые будут вызываться во всех app, также в корневой директории есть static в которой все файлы из bootstrap. В каждой app есть своя директория static , в которой находятся самодельные статические файлы, которые относятся только к этому app. Короче, как грамотно сделать, чтобы не приходилось много копипастить файлы bootstrap
>>1163674 >Второй стакан: принт без нихуя, в который сливается последняя капля end=''. Как с члена стряхнули напоследок. >А третий да и все остальные — все, что принтится после. НЕТ. Почему ты такой дурак? Или изъясняешься очень криво. Принт без нихуя, следующий за принтом с end="", делает только перенос строки. Т.е. он добавляется \n к первой строке / убирает первый стакан (подставляя второй для последующих принтов). Следующий за этим принт нальёт текст во второй стакан. Перенос строки (смена стакана) всегда находится в конце строки. Так что, когда напечатана "целая" строка текста, она имеет в коцне перенос строки. То есть, смена стакана всегда производится не перед наливаением воды, а после. Как посуду ты помешь не перед едой, а после, чтобы потом, когда захочется есть, тарелка была чистой.
>Так а нахуй ты тогда так категорично заявлял Потому что ты хуйню какую-то, а не решение сделал. В чём была твоя проблема? Нет переноса сторки. Что нужно сделать? Очевидно, просто сделать перенос строки. Но ты пошёл каким-то ебическим путём с распиливанием исходной строки текста.
>>1163852 >распиливанием исходной строки текста , что заставляло думать, что ты нифига не понимал ни собственно проблемы своей, ни того, как print работает, хотя это несколько раз повторяли.
Уф, опять этот противный оранжевый... Но относительно живой, и где не жалко показаться дураком.
Относительно отучил основы питона, кое-как понял суть ООП, запил пару говнокодов, которые порой выручают в повседневной жизни. Куда идти дальше? Пытаюсь уже которую неделю освоить ХГУЙ, но после пары часов ошибок вся мотивация пропадает. Мог бы решать на codewars или ещё где задачи на алгоритмы, но... Язык первый был ещё cpp, но его забросил из-за личных переживаний. Начал именно этот учить в связи с разработкой одной игры на pygame. Будто между шагами понимания базы и написанию гуёв должна быть ещё ступень, которую пропускаю. Куда поворачивать?
>>1159798 (OP) Привет сап. Учусь на втором курсе относительно неплохого вуза. На данный момент по программе идёт с++, до этого был Паскаль и с. Стоит ли потихоньку скатываться в питон? Кресты потихоньку надоедают.хотя в Питоне меня выбешивает отсутствие фигурных скобок для обозначения блока кода, привык, наверное Не прошу советовать с чего начинать и етц. Нужны лишь советы по типу за и против, т.к. если что я сам шапку на гите прочитаю.
>>1163862 Ты можешь не потиху скатываться, а попробовать написать что-то небольшое, но до конца рабочее на питоне. Если понравится, будешь продолжать. Не понравится - питон пригодится, чтобы какой-нибудь скриптик для себя написать.
>>1163310 > Не медленными, а ожидающими чего-то Ну, скриптам, которые ожидаю что-то от чего-то медленного, и во время этого ожидания могли бы что-то сделать.
>даже если бы это он и был, нафига тебе эта функциональщина? Шоб была. Это же просто стиль программирования, которым надо владеть так же как и объектным.
>В каком плане остановки? В плане структуры программы. Есть остановка на которой отбрасываются неверные пути, есть остановка на которой из верных файлов берутся только правильные команды и т.п. Я понимаю, что процессор не стопиться и корутины идут по очереди.
>но вот начсёт первых двух применительно к этой задаче я бы поспорил Принял, подумаю над этим.
Спасибо за ответ, чет вчера ещё прочитал но не ответил сам.
Недавно спрашивал в каком то из тредов на каком языке лучше писать, так сказать, "для себя". Т.к. уже шарился в питоне, на нем пока и сижу на уровне хелоуворлдщика. Так вот, возник такой вопрос, как рациональнее всего пользоваться классами? Хоть убейся не могу я в них въехать, в них и в магические методы. Написал простенькую игрушку, текстовую стратегию. Суть в чем - есть деревня, каждый ход (ход это день) происходит случайное событие - увеличивается количество жителей, умирает человек, ничего не происходит, случайный прохожий (его можно принять к себе или прогнать, если принять, то он может совершить диверсию и убить n человек до того, как будет убит) и нападение. В нападении реализовал простенькую боевку, 2 стойки со стороны игрока (оборона, атака) и 3 со стороны компьютера (оборона, атака, бездействие). Есть еще несколько ресурсов, такие как золото, за которые покупать войска и крестьян, еда, которую потребляет народ и войско. Ну, и как уже понятно, каждый ход игрок продумывает что ему сделать в поселении - нанять солдат, крестьян или пропустить ход. Сижу сейчас, пытаюсь оптимизировать код, а чет не врубаюсь в принцип. Примерно так
>>1164032 В твоем примере я бы ожидал увидеть класс деревня, в котором есть список объектов (вероятно, тоже классов) - жителей и методы - события. Это модель.
Реализация модели заключается в создании объекта класса и обращению к его методам и пользовательскому вводу.
Преимущества очевидны - когда ты захочешь добавить в игру еще одну деревню - это займет всего одну строчку кода. А если захочешь добавить немного другую деревню - отнаследуюшься от уже имеющейся и переопределишь пару методов.
>>1164032 Класс хорошо создавать когда какой-то набор данных у тебя кочует всей пачкой из функции в функцию.
Магические методы ни для чего более не нужны, кроме как для неявного вызова в естественных для питона конструкциях. Например определяя --enter--, --exit-- ты сможешь объект использовать в конструкции with. Определяя --add-- сможешь делать сложение obj + obj. Собственно потому они и называются магические. Остальное пишешь явно с именами которые тебе нужны.
>>1164044 >Определяя --add-- сможешь делать сложение obj + obj
Объясни пожалуйста. Я хочу сравнить два объекта, но не их адреса а именно что логически объект одно и то же, что мне для этого надо сделать? Так же если я хочу чтобы образцы класса который я написал можно было сравнить таким макаром. Как мне это нужно написать?
>unittest >модуль из стандартной библиотеки >assertEqual вместо assert_equal Пиздец. Да, я знаю что интерфейс унаследован от Жавы, но блять, нахуя было наследовать камелКейс, когда в Пиздоне другой стандарт именования методов? Как, блять, с этим жить?
>>1164091 Windows хорошая ОС. Там есть асинхронное файловое IO вместо невнятного обрезка которым никто не пользуется. Там нет этого глупого безальтернативного fork, который копирует весь процесс, потом на его месте раскочегаривает новый в большинстве случаев, удаляя всё что было от предыдущего.
>>1164118 >Документация на английском >нужна лицензионная IDE для работы с джанго >дохуилион библиотек >из них 20-30% либо с багами, либо с недописанной документацией >пикрил >>1164086 >дохуя документации на 2.7, а вот на тройку ещё только на английском >отвесты с стэковерфлоу придётся адаптировать с 2.7 на 3, если только их не ответили тебе Как-то так...
>>1164118 Ах да. Ещё ты научишься пользоваться консолькой винды, а так-же можешь найти серию познавательных книг по питону и сетевой безопасности, 2016-2018 годов in english, of course
>>1164120 >на английском Не проблема. >на 2.7, а вот на тройку ещё только на английском Через 2 года заканчивается поддержка, 2. Попахивает пиздежём. Ну разве что главный аргумент в том, что англюсик. >нужна лицензионная IDE для работы с джанго Куплю версию с китайским сервером лицензирования, если ты про пайчарм.
>>1164132 Анон, не у всех с инглишем хорошо. Я очень часто сталкивался с моментами, когда мои коллеги по проекту или тиммейты не могли в английский. Всё-же, делаю поправку и на это. Лол, когда ты в последний раз писал что-то незнакомое на незнакомой библиотеке? Я конечно только джун, но даже разговорный инглиш меня не спасал в некоторых случаях. Теперь веду vocabulary заточенный конкретно под меня. Крч, иногда это полный пиздейшен, хоть в петлю лезь >Куплю версию с китайским сервером лицензирования, если ты про пайчарм. Да вот блядский пайчарм маслины баги ловит. Там выше пикрил про это и я лишь надеюсь что поможет переустановка. Словами не передать, каким маленьким было моё очечо когда я прикинул что кодинг может из-за автосейва похерить весь проект, над которым я откровенно ебался в мозг последние недели две нейронка-пилот для KSP. Благо Atom показал что всё норм.
>>1164148 Командная строка, cmd, bash, shell, whatever — сами являются процессами-интерпретаторами, как и питон. Subprocess дёргает апи системы чтобы спавнить процессы. А уж что запускать решаешь ты, можешь просто прогу стартнуть, можешь cmd.
>>1164155 А что толку? Это во всём пайчарме. Причем, с момента когда я его в последний раз закрыл, ничего не менял в IDE. То есть это именно тот случай когда оно само даже на вводе нихуя не отображается нормально.
>>1164143 >не у всех с инглишем хорошо Для них существует 1С.
>>1164132 >Попахивает пиздежём Так и есть, за всё время работы ещё ни разу не встречал проблемы кроме некроёбов на < python3, разумеется. Всё, что нужно, уже есть на 3.
>>1164120 > недописанной документацией Исходники ты захочешь ещё, я гарантирую это
Питонач-помогач, знаешь ли ты какие-нибудь статьи по тестированию на джанге? В частности, интересует такая схема: беру тестовую базу, по ней прогоняю тесты. Нужна информация по структурированию тестов отдельного приложения. Т.е. беру я, например, из этой базы несколько моделей и прогоняю их по всем тестам. Как лучше это организовать? Был час в гугле, там дают только базовую хуйню, про структуру маловато инфы
>>1164354 Вовсе не мешает, надо все в интеджерах считать, это любого языка касается, не 1.48 рубля, а 148 копеек, не 1.4 см а 14000000000000000 микрон, и так далее.
>>1164366 > у питонистов. > тот же самый стандарт флоатов используется в куче других языков > абсолютно все ЯП имеют проблемы с точностью флоатов > у питонистов От тебя воняет уже.
>>1164375 Записки идиота какого-то, очевидно. Либо ты не прочитал сопровождающее описание, где он приводит оправдания, почему не смог написать по два слова на строку. Сложение ассоциативно, а вычитаение это всего лишь сложение с отрицательным числом, так что между ними в принципе и разницы-то нет, переставляй как хочешь.
>>1164151 Специально для тебя нашёл пасту, сохранённую в 2009 году из дискуссии в /c/ нульчана.
> то, что все это будет тратить системные ресурсы, время и трафик. Видишь ли, ввиду того, что архитектура Винсока слоистая, любая операция в принципе проходит по каждому сервис-провайдеру (LSP). Естественно, в таких условиях создание сокета (а при ассепте как раз создаетс еще один сокет) это весьма долгая операция. Для этого МС придумала все эти ваши костыли с кондишнал ассепт и *Ex() функции. В БСДе же принять и сбросить коннект будет весьма и весьма быстро (как кстати и создать поток. На винде потоки создавать тоже относительно долго).
> IOCompletionPort. Говно этот иосп. Потому что он полностью оправдывает свое название - ИО комплешн порт. Если бы ты удосужился почитать о всех фишках kevent, ты бы понял, что эта штука гораздо функциональнее и быстрее чем твой IOCP, который, кстати, еще и с нихеровым оверхедом.
> Ты не против в том же треде показать аналог виндового xperf? Ты не понял, что я имею ввиду. Я не собираюсь меряться с тобой всякими апишками. Я просто сказал, что все ОС какбы разные (sic!) и апи у них тоже какбы разные. Другое дело, действительно ли это полезные апи, или это просто костыли, чтобы заставить систему работать сносно. Это о примере выше.
>>1164454 >kqueue >I've used them in the past to detect when when actions happen on a file (or within a hot folder). I don't believe they can be used for "reading" and "writing" files, though.
>epoll >epoll only makes sense for file descriptors which would normally exhibit blocking behavior on read/write, like pipes and sockets.
А вот IOCP может. В никсах только обрубок в виде http://man7.org/linux/man-pages/man7/aio.7.html который нигде как надо не работает и тупо блокирует. Файл дескриптор который для файлов и "файл дескриптор" который для сокетов в ядрах никсов оказывается очень разные вещи.
Правильно ли я понимаю, что допустим, для парсера вебмок нет смысла прикручивать многопоточность? Так как в 1 потоке будет качаться на максимальной скорости, а например с 5 потоками скорость будет резаться
При условии что сервер отдает с не меньшей скоростью, чем скорость моего канала
>>1164565 Напиши асинхронный http сервер сохраняющий файлы через PUT, удаляющий через DELETE и выдающий содержимое через GET. Без aiofiles. В качестве бенчмарка 10к очень медленных клиентов со скоростями уровня WAP/dialup. Тогда приходи и ещё поговорим.
>>1164563 Браузеры обычно держат небольшой конекшен пул под каждый домен, чтобы не останавливаясь качать в моменты затупа HTTP1. Для HTTP2 больше одного конекшена вообще не нужно, там мультиплексирование. Многопоточность тебе нужна если делаешь на блокирующих вызовах. Можно альтернативно взять aiohttp.
>>1164593 Маня не слышала про мои DMA? Блядь, пиздец ты дискуссию ведёшь, с одной темы прыгаешь на другую, не удалось в одном уесть - сразу про другое. Такое ощущение, что я на хуёвом собеседовании, ещё скажи, что ты мне перезвонишь.
>>1164598 Ну это ещё кто из нас с темы на тему прыгает. Факт остаётся фактом: в асинхронном питоне файлового IO нет и не будет. Большей частью именно из-за несовершенства ядер.
Список твои аргументов: >на kqueue тоже можно сокеты и он может потягаться с виндовым iocp >есть inotify, можно знать когда кто-то другой трогал файл
Я же тебе конкретно ткнул в http://man7.org/linux/man-pages/man7/aio.7.html , а ты продолжаешь прикидываться ебобо как ни в чём не бывало. Даже наводящую задачку придумал, нихуя, эффекта ноль. DMA блядь, пиздец, что несёт, вообще охуеть. То что ты немного почитал про интерфейсы ядер и DMA это похвально, но ты точно переоцениваешь уровень своих знаний.
Свой код кидайте через https://repl.it/languages/python3
Книги: https://yadi.sk/d/tArKKuQu3Kejuq и ссылка на PyCharm
Книги: https://yadi.sk/d/H-00n-UG3RSQem/
Предыдущий тред
Python питон