Это копия, сохраненная 17 мая 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Свой код кидайте через https://repl.it/languages/python3
Книги: https://yadi.sk/d/tArKKuQu3Kejuq и ссылка на PyCharm
Книги: https://yadi.sk/d/H-00n-UG3RSQem/
Предыдущий тред >>1156174 (OP)
Python питон
Если нужно изменить оригинал:
from itertools import repeat
start_list[1:len(start_list)-1] = repeat(0, len(start_list) - 2)
Если нужен новый лист:
from itertools import repeat
new_list = [start_list[0], *repeat(0, len(start_list) - 2), start_list[len(start_list)-1]]
Пнятненько?
> | fromkeys(iterable, value=None, /) from builtins.type
> | Returns a new dict with keys from iterable and values equal to value.
Что значит
>from builtins.type
?
>кому надо тот сам комитит
Ты я смотрю, не сильно понимаешь в менеджменте. А ведь ирония в том, что ленивые куски говна часто бывают гениальным разработчиками и чтобы им чего-то добиться, нужно, чтобы рядом были не менее гениальные менеджеры, понимающие в то же время в разработке. Классический пример - Стив Возняк, который в одно рыло сделал Apple II, но все же знают, что он бы его сам никогда не создал, всё это стало возможным, только потому что его вдохновлял Стив Джобс...
>я тебе советовал не смотреть а стриммить
Ну, во-первых, я другой анон. Во-вторых, логично сначала посмотреть на то, как это происходит у других, чтобы потом решить нужно ли оно тебе и если да, то что можно улучшить.
>ленивые куски говна часто бывают гениальным разработчиками
так себе утешение
>сам никогда не создал
я со свечкой не стоял, спорить не буду, знаю точно кто реально хочет — тот делает, остальные погружаются в маня-оправдания
>логично сначала посмотреть
нет, если тебе просто нужна мотивация, качай обс заводи и погнал, а если тебе надо найти йобыря, посветить сракой и собрать донаты со школьников, то да, гугли, рисуй кнопочки, пердолься с оверлаями, мультистримами и тд и тп
Ты снова делишь на ноль. Сначала предлагаешь стримить, а потом предлагаешь это делать ни для кого, что равносильно тому, чтобы не стримить. При этом, похоже, ни одно стримера ты сам ни разу не смотрел даже.
>кто реально хочет — тот делает
Как у тебя всё просто! Еще скажи, что мотивация либо есть, либо ее нет... Мир, блядь, не сводится к нулю и единице и мотивация вполне может описываться единичным вектором в двумерном гильбертовом комплексном пространстве, а суперпозиция с мотивациями других людей может давать интерференционную картину, где все выигрывают, даже если по отдельности вероятность каждого из них стать единицей была крайне мала...
>а потом предлагаешь это делать ни для кого
я сразу это предложил, ты читаешь мой текст и не понимаешь не то что сути, а даже конкретно написанного
запустить стрим — это проявить усердие и дисциплину по подготовке процесса, продумыванию задачи на перед, а это уже 90% успеха, когда ты примерно знаешь что будешь делать сильно мотивирует и успокаивает, нежели прыжок в неизвестность
я пробовал расписывать подробные туду листы, но стримы для двух человек оказались в тыщу раз производительнее
смотрел мэда лол, как и все, но это раньше, а щас смотрю стримы алегоритмик и эпиков, но в записи, ибо жалко времени на весь этот бесполезный пездежь, и да там нету звона монеток кек, раньше были котики, но эпики сослали няшку-комунити-парнишку в испашку и поставили заместо него колхозное бабо-ебало и больше нет котиков, и большая часть стримов превратилась в унылое говнище, проще ченджлист на форуме пролистать
>Как у тебя всё просто!
так и есть родной
>мотивация либо есть, либо ее нет
бывают замотивированные на половину лол?
ты либо тащишься от того что делаешь, либо убеждаешь себя в этом
ключевой момент не сидеть на жопе ровно когда дендриты тебя палкой пиздят, они просто хотят что бы ты стал лучше
>запустить стрим — это проявить усердие и дисциплину по подготовке процесса
Запустить стрим - это нажать одну кнопку. Сама настройка занимает еще 5-10 минут. Олсо так сложилось, что я очень много стримов организовывал и провел. И в рамках хобби и по работе. В живую выступал перед аудиторией с лекциями, еще преподавал в аспирантуре. Всё это полезный опыт, но не нужно его переоценивать, более того, это вообще далеко не всем подходит, у многих вред от стресса значительно превысит любые положительные эффекты. Не говоря уже о том, что огромное время, потраченное на подготовку подачи материала, можно было бы посвятить изучению чего-то для себя нового.
>бывают замотивированные на половину лол?
Да. А еще бывает эмоциональное и профессиональное выгорание, депрессии, потеря цели в жизни, ощущение бессмысленности того, что делаешь и много всякого другого. Конечно, если ты еще молод, вряд-ли с чем-то подобным сталкивался.
>либо тащишься от того что делаешь, либо убеждаешь себя в этом
К сожалению, ты и сам не заметишь как одно превратится в другое. Кроме того, невозможно занимать всегда тем и только тем, что доставляет тебе удовольствие...
>хотят что бы ты стал лучше
Нет. Мозг и тело хотят только лениться и бесконечно сберегать энергию, удовлетворяя при этом основные первичные потребности, но не более того. И такой потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе все бы становились учеными, стремились сделать великие открытия, разделяли идеи трансгуманизма и т.п. Но по факту мы имеем миллионы тупиц и единицы тех, кто пытается не быть тупым, но нихуя не понимает ни как этого добиться, ни, главное, - зачем!
>Запустить стрим - это нажать одну кнопку.
заставляешь меня думать что я перфекционист, я например хоть и кормлю людей говном, но стараюсь делать это хорошо и продуманно
>вред от стресса
дальше можно было не читать, ты просто прямым текстом сказал что сидите не рыпайтесь, да и вообще анон жизнь жизнь, каждый норовит обидеть, слишком много стресса, может выйти в окно?
>эмоциональное и профессиональное выгорание, депрессии, потеря цели в жизни, ощущение бессмысленности того, что делаешь
и почему все это? ты внутренний диалог с собой не ведешь что ле!?
>если ты еще молод, вряд-ли с чем-то подобным сталкивался
бросил институт на 2 курсе, работал фотографом днем, потом во вторую смену на складе, после первой ночи фотографирования в ночном клубе украли камеру(спустя 2 недели после покупки на лове-подарок к др) в метро тому шо уснул, потом был немножко сиджи артистом, граф дизайнером и вот теперь к 26 докатился до тридешки в риалтайме
и таки да братуха, все по изичу, кушаю ноотропы нет и мне заибись ага спойлерИРОНИЯ
>бесконечно сберегать энергию, удовлетворяя при этом основные первичные потребности
ахаха мне можешь про это не рассказывать без работы со сбившимся режимом и маминым борщиком быстро скатываешься до животного брр нахуй
>потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе
мы бы сидели и дальше на ветках и срали друг другу на головы
>ни, главное, - зачем!
даже на ошеломляющую пропоганду в совке все было не так радужно, хоть и имело успех, я при всем уважении к заслугам предков, считаю капитализм более совершенной формой, где отвественность за мотивацию лежит на индивиде, а скажем какой нибудь илон маск пробует тебя подзадорить
Я в целом понимаю тебя и твою позицию (ты хочешь быть чем-то большим чем есть). Но тем не менее, вижу, что у тебя масса заблуждений в голове. Ну вот например:
>>потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе
>мы бы сидели и дальше на ветках и срали друг другу на головы
Иронично, но люди - социальные животные, впрочем, как и все приматы. Именно социализация обусловила чрезмерное развитие коры головного мозга в результате чего мы стали, скажем так, разумными. А что есть социализация, ты задумывался когда-нибудь? Это обеспечение себе более высокого места в иерархии себе подобных! Считается, что это инстинкт. А еще мы уверенно можем заявить, что всё это завязано на размножение - более успешный, богатый, видимый и значимый человек всегда будет более востребован противоположным полом...
Однако социализация != саморазвитию. И появившееся в последнее время деление интеллекта на, скажем так, классический и интеллект социальный - прямое тому доказательство. Человек хорош только в том, в чем постоянно совершенствуется и нельзя стать лучше в программировании, тратя все свои силы на обеспечение более высокого места в социальной иерархии...
Если сказать совсем простыми словами - люди разные. И то, что ты это чуть-ли не прямо отрицаешь - такое себе.
>считаю капитализм более совершенной формой
Ну да, вот только если глянуть как живут в самой крутой стране мира - Швейцарии, то быстро придешь к выводу, что там нихуя не капитализм, а скорее социализм! Если же посмотреть на Японию - лишь немногим менее благополучную страну, то там до сих пор чуть-ли на кастовое общество, полное условностей. Вывод напрашивается очевидный - дело не вовсе не форме как таковой, а в социуме и тех негласных и гласных договоренностях, которых соблюдаются. Индвиды же вроде Илона Маска как раз выбиваются из общей картины, потому что они никаких договоренностей не соблюдают как раз! Но ирония в том, что вряд-ли ты когда-нибудь станешь хотя бы валютным миллионером, не говоря уже о том, чтобы стать оригиналом, о котором будут говорить окружающие...
Я в целом понимаю тебя и твою позицию (ты хочешь быть чем-то большим чем есть). Но тем не менее, вижу, что у тебя масса заблуждений в голове. Ну вот например:
>>потребности, как саморазвитие, в нас нет и никогда не было. Ну иначе
>мы бы сидели и дальше на ветках и срали друг другу на головы
Иронично, но люди - социальные животные, впрочем, как и все приматы. Именно социализация обусловила чрезмерное развитие коры головного мозга в результате чего мы стали, скажем так, разумными. А что есть социализация, ты задумывался когда-нибудь? Это обеспечение себе более высокого места в иерархии себе подобных! Считается, что это инстинкт. А еще мы уверенно можем заявить, что всё это завязано на размножение - более успешный, богатый, видимый и значимый человек всегда будет более востребован противоположным полом...
Однако социализация != саморазвитию. И появившееся в последнее время деление интеллекта на, скажем так, классический и интеллект социальный - прямое тому доказательство. Человек хорош только в том, в чем постоянно совершенствуется и нельзя стать лучше в программировании, тратя все свои силы на обеспечение более высокого места в социальной иерархии...
Если сказать совсем простыми словами - люди разные. И то, что ты это чуть-ли не прямо отрицаешь - такое себе.
>считаю капитализм более совершенной формой
Ну да, вот только если глянуть как живут в самой крутой стране мира - Швейцарии, то быстро придешь к выводу, что там нихуя не капитализм, а скорее социализм! Если же посмотреть на Японию - лишь немногим менее благополучную страну, то там до сих пор чуть-ли на кастовое общество, полное условностей. Вывод напрашивается очевидный - дело не вовсе не форме как таковой, а в социуме и тех негласных и гласных договоренностях, которых соблюдаются. Индвиды же вроде Илона Маска как раз выбиваются из общей картины, потому что они никаких договоренностей не соблюдают как раз! Но ирония в том, что вряд-ли ты когда-нибудь станешь хотя бы валютным миллионером, не говоря уже о том, чтобы стать оригиналом, о котором будут говорить окружающие...
>понимаю тебя и твою позицию
nya ^_^
полез в дебри, сделал все сложно и загрустил, анон не надо так
если тебе не нужен такой навык как социализация ок, капитализму нужны дети только лишь для передачи капитала, будь спецом, подыми лове, и даже лысым тебя полюбит какая нибудь соска спойлер и ты ее полюбишь, хотя бы на 2 года и все у вас будет хорошо, только не будь унылым депрессивным говном, вот уж точно такой никому не нужен самое забавное смотреть на няшных тян в таком состоянии, вот уж блять реально не понято чего им сука не хватает
>люди разные
снаружи, побитые окружающей средой и стартовыми условиями, но суть одна — чудовищные приспособленческие способности и бесконечные возможности такого гибкого органа как мозг
>вот только если глянуть
то да, а если пожить там с пару лет, да еще изучить историю хотя бы лет за 500, то дааа
а инфантильные япошки с маленькими писюнами, ну тут вообще все очевидно, ну и вообще островные народы так себе
>что вряд-ли ты когда-нибудь станешь хотя бы валютным миллионером
пфф
>о котором будут говорить окружающие...
лел, я же анонимус, мне такого даром не надо
Задачи: небольшие десктоп приложения, серверные вещи(бэкенды, боты, кравлеры).
>небольшие десктоп приложения
На пистоне можно конечно, но будет очень хуёво. Лучше Java или C#.
Ну я имел ввиду pyqt
Так ведь плюсы сами по себе вообще не имеют графических библиотек никаких, так что вариант еще хуже, чем ява. Что до последней - там надо как минимум мочь в MVC, иначе будет не гуй, а хуй...
Да, я как увидел 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.
Построить сферу на которой цвет будет отображать значение посчитанной мною функции, которая зависит от углов.
P.S. Картинка похожа на то что нужно.
>Построить сферу
не построить, а покрасить, хотя может ты и создать сможешь я не знаю, но это заеба какая то, сколько у тебя будет вершин?
вот на пике 16 на 32 сфера развернута, 482 итого вершины, не заибешься красить?
но вообще это голый шейдер так выглядит,
В общем, да, правильнее будет покрасить. Тогда перестрою вопрос таким образом: ваши картинки (2 и 3) это грубо говоря карта, на которой цветом задана величина функции, которая зависит от координат. Вопрос 1: как привязать цвет к значению функции, а второе, как такую карту натянуть на сферу. Насчет вершин не понял вопрос: под вершиной имеется ввиду точка на карте?, если да, то вершин будет 360х360
>карта, на которой цветом задана величина функции, которая зависит от координат
еще ни разу никто не формулировал понятие World Space Normal так точно лол
>как привязать цвет к значению функции
я без понятия, тыж программист
>как такую карту натянуть на сферу
3д модель состоит из вершин, каждая из которых имеет координаты и направление(что бы полики нормально шейдились)
так вот что бы натянуть карту нужно модель "развернуть" UV Unwrap т.е разрезать модель по заранее выбранным ребрам и все 3д вершины переложить на Х и У (U и V по нашему) а дальше интересный момент, поскольку тебе нужно 360 вершин то на полюсах придется убрать по одной вершине и тогда развертка превращается в говно, либо ее можно сделать прямоугольной, но тогда будет лютый очевидный стреч
ну и рисовать саму мапу тебе соотсвенно нужно под развертку
сколько цветов нужно отобразить и в каком качестве, анон пиши подробно чо хочешь еба
Это для второй версии если что. Там есть ссылка на третью.
Вначале документа? Как это должно выглядеть чтоб не моветон?
async/await нет, по крайней мере.
нет аннотаций типов, за константами http-кодов нужно лазить хуй пойми куда или ставить третьестороннюю писичку
Смотри под какой лицензией он распространялся, от этого зависит
Проблема только установить 3.5 или 3.6. Остальные проблемы надуманные.
Если что-то распространённое, например реализация связного списка, можешь вообще забить на копирайт. Ну или дополнительно имена переменным заменить. Ссылку в коде хорошо держать в первую очередь для себя самого. Даже если на тебя начнут залупаться юридически, что крайне маловероятно, просто удаляешь этот кусок и пишешь заново.
Использовать функцию проекции сферы на 2д поверхность (причём это может быть как в географических атласах разворот сферы, может быть текстура для натягивания в opengl, может быть как бы фотография сферы с расстояния). Далее попиксельно для всей картинки вычислять в какую точку сферы падает луч, брать её полярные координаты, вычислять S, вычислять функцию цвета от результата S (три компоненты RGB), записать цвет в этот пиксель. Для антиалиасинга советую делать пикселей больше, например в 16 раз, а потом уменьшить картинку до целевого размера.
Искать. Списка скорее всего не будет, так как питон плохо подходит для графики. Есть по сути стандартная библиотека pillow, есть множество обёрток над сишными к примеру cairo, есть те которые завязаны на 3д апи (opengl), можешь хоть профессиональными рендер-движками управлять из питона в блендере. Если ты тот что со сферой возится, рисуй попиксельно, либо в numpy вычисли всё, потом переведи в pillow и сохрани как картинку.
А чому pyglet в раздел GUI ко всяким ткинтеркам и прочит кутям запихнули-то, а не gamedev?
Но ведь нет, у него толком виджетов-то даже никаких нет, он скорее для создания графических приложений, а не конкретно интерфейсов. Разумеется, на его базе можно что угодно сделать, и есть всякие pyglet-gui.
О, спасибо что напомнил.
Очевидный emacs.
Хочу попробовать что-нибудь новое и то, что в перспективе может пригодиться(хотя бы для пет прожектов).
Джанго и Фласк уже юзал много раз, сейчас вот между Пирамидой и Ботлом выбираю.
>так себе утешение
Это и не было утешением. "Гениальные кодеры бывают ленивыми кусками дерьма" близко к "ленивые куски дерьма бывают гениальными кодерами", но ни там не там нет утверждения, из которого можно понять, что если ты "ленивый кусок дерьма", то ты автоматом "гениальный кодер", которому просто нужен манагер.
Вот как раз сегодня задумывался о том что импликация это не эквивалентность. Можно прикинуть: даже если 50% гениальных кодеров ленивые жопы, гениев всего 0.1%, а ленивых жоп 95%, то вероятность того что будучи ленивой жопой ты станешь гениальным кодером: 0.5 × 0.001 / 0.95 = 1/1900 ~ 0.0526%
Подскажите, пожалуйста. Пытаюсь поиграться с tkinter используя pycharm но выходит пикрелейтед. Пакеты установлены в систему (Mint 18). При запуске не через pycharm импортит корректно.
Вероятно, у тебя шарм криво настроен, не на то виртуальное окружение или не даже на ту версию пайтона...
Вероятно. Но я не понимаю что не так. Вроде он даже видит это tkinter, но подцеплять не хочет.
Сделай простой проект из проблемного импорта и print('hui') - покажи весь стек ошибок, который вылезает при его запуске...
1) Что бля вообще происходит? Я знаю про декораторы функций - этой функции, которые принимают 1 функцию и возвращают одну функцию. Я знаю про декораторы классов - это функция, которая принимает 1 класс и возвращает 1 класс. А что тут делают вот этим @Property. Это же вообще не функция, а класс. Как они используют ее в виде декоратора? Класс же даже ничего не возвращает.
2)Как работает extension? Ведь на него применяются два декоратора (где первый мне непонятен, а второй обычный декоратор функции). Но ведь декораторы работают так: @decorator def foo(): после чего создается object reference с именем foo связанный с результатом работы декоратора. Значит после @Property def extension, extension будет равен результату работы декоратора - объекту класса Property (непонятно как), а после @extension.setter def extension, extension станет равен результату работы декоратора - самому себе. Как это понимать? Второй пик для понимая, что я имею в виду.
Даже если встроенная property работает так же как и описанная Property, то эта страница не отвечает ни на один из вопросов.
У тебя похоже модуль не установлен в том виратуальном окружении, в котором запускается код из шарма. Предположу, что ты его поставил в глобал, а запускаешь в шарме в каком-то из venv-ов.
Декоратор может вернуть что угодно. Да в общем-то и принять на вход что угодно. Вот только синтаксис не даст применить его через @ на что-то кроме функции или класса.
То что у тебя в книжке называется дескрипторы. Это как если бы ты переопределил --getattr--, --setattr--, сделал там много if по разным именам атрибутов, и в каждом таком if прописал какое-то кастомное поведение. То есть дескрипторы с их меджик методами вызываются непосредстенно внутренностями питона. Если хочешь посмотреть что там вернули декораторы, никто не воспрещает, возьми да сделай print(..), print(dir(..)), print(type(..)), и тайны приоткроются.
По ходу класс тупо реализует методы для работы со свойством. Вложенные классы ведь никто не запрещал?
В питоне всё объект.
Ставил, я в глобал, да. Но запускаю-то вроде тоже через Python3.5. Или нет?
Проблема оказалась в Минте. Переустановил шарм скачав с сайта а не с менеджера в системе и все заработало.
Ох уж эти ваши кривые дистрибутивы... Пользуйся арчем или генту - это единственные два линукса, где все пакеты, включая ядро, используются в неизмененном ванильном виде.
Есть список из ключей подсловаря. Пытаюсь применить к нему sorted(listfromkeys), а он мне TypeError: 'dict' object is not callable.
Я уже как только не пытался, пиздец! Что з ахуйня, чё он мне пиздит? Меня уже трисёт нахуй!!!
если тебе надо отсортировать словарь словарей по ключам вложенных словарей, то это можно сделать, например, так:
sorted(d.items(), key=lambda x: x[1]['key'])
Мне нужен лишь список ключей для "вывода" текста. Ключи -- заголовки, но прежде чем вывести их надо отсортировать. Сам словарь сортировать мне не нужно. Просто этот грёбаный список. Я не понимаю, почему мне говорит тайперрор dict object is not callable, когда это по всем параметрам список, хоть и создан из ключей.
Тут особо показывать нечего. Сейчас в терминале не работает то, что работает в коде. Я в ахуе короче! Просто В АХУЕ!
Вот тот код что в строке работает.
3 пик подключаем в терминале ту же базу, выполняем тот же сорт и...
ЕБАААААТЬ!
Перезапустил питона в терминале и заработало. СУка ну как так? Как так то блядь? К такому жизнь меня не готовила блядь!
При этом если убрать строку __slots__ то все работает нормально, но я хочу сделать с ней и не понимаю двух вещей. Почему и PyCharm и repl подсвечивают все атрибуты в __init__, говоря, что их нет в __slots__, когда это атрибуты класса дескрипторы же, а не экземпляра? Ну и почему соответственно вываливается с ошибкой "Product' object has no attribute '__id'" Понятно, что его нет, цель setter'a установить этот атрибут.
Ты где-то ранее создал словарь, назвав переменную "sorted", очевидно же.
Во-первых, ты нахуя в __dict__ объекта лезешь, если сам же __slots__ ему указал? Наркоман?
Во-вторых, кто там атрибуты класса, всё у тебя экземпляра же.
В-третьих, виноват name mangling (гугли), но разбираться в этой каше (я не эксперт, но я бы за такой код премию не дал) лень, но если заменить все "__" на "_", то работает нормально.
>нахуя в __dict__
Потому что я хотел проверить, как устанавливаются атрибуты, уже исправил поставив нормальный __str__.
>Во-вторых, кто там атрибуты класса, всё у тебя экземпляра же.
Декораторы добавляют в класс атрибуты id, name и т.д. Питон видя в __init__ self.id, self.name ищет эти имена в словаре. А его нет. Тогда он ищет их в классе и находит их в словаре класса. Значит это атрибуты класса, не?
>В-третьих, виноват name mangling
Знаю что такое, но забыл про него. Заменил name = "__"+atr_name на name = "_{}__{}".format(cls.__name__, atr_name), все работает, спасибо.
>я не эксперт, но я бы за такой код премию не дал
Почему?
Не нужно
>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 - идите на форума и аскайте художников за реквесты
https://api.kde.org/extragear-api/graphics-apidocs/krita/libs/libkis/html/index.html
https://www.youtube.com/watch?v=fIOhd3xXv-A
Мы, питонисты,
ребята плечисты!
Нас не заманишь
goto мясистым!
Не совратишь нас
синтаксом тегов!
... На линии 8
IndentationError...
Ебани декоратор и там делай, что нужно, ну или в функциональном стиле передавай в декоратор коллбэк
Жду ваши ответы какую книгу начать зубрить.
Давеча оформил на 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 сайтов, проблем не было.
Установить python3. Освоить virtualenv, не пользоваться пакетами дистрибутива, ставить через pip внутри этого virtualenv. Гиту достаточно наличия ssh, хотя я предпочитаю локально написанный скрипт, который делает zip файл, вливает его по scp, далее через ssh -c запускает там определённый набор команд и всё разворачивается. То есть правило хорошего тона это не держать на серваке никаких скриптов отвечающих за деплой, только голый ssh наружу.
Тебе скорее в сисадминов тред с такими вопросами. В двух словах даже и не объяснить как поднять веб-сервер с пайтон-сайтом... И да, можно всё сделать руками, но сейчас как бы эра девупсов - автоматизация через системы управлениям конфигурациями, микросервисы на докере и всё такое.
>Установить python3
Установил 3.6, по запросу # python вываливается 2.7 (понимаю, что так наверное и должно быть, просто я тупой)
>Освоить virtualenv
Вот,информацию, что это - я нашел, не могу дойти, зачем это юзать и в чем преимущества.
> не пользоваться пакетами дистрибутива
не понимаю, о чем идет речь.
>ставить через pip внутри этого virtualenv.
Это ты о Django и остальных инструментах?
>Гиту достаточно наличия ssh, хотя я предпочитаю локально написанный скрипт, который делает zip файл, вливает его по scp, далее через ssh -c запускает там определённый набор команд и всё разворачивается. То есть правило хорошего тона это не держать на серваке никаких скриптов отвечающих за деплой, только голый ssh наружу.
тут все более-менее понятно, инструкцию по привязке Git нарыл, но мне до этого еще как до африки пешком.
Смотри, я полный нуб, о существовании Python узнал пару лет назад, месяц назад прошел курс обучения в приложении Solo learn, со стандартной библиотекой разбираюсь, как завещали.
Суть в чем: везде пишут, что Python и Django - это самые, блять, простые решения и на них веб-проект поднять легче, чем член школьника во время первой ебли, и дескать любой может не отвлекаться на тонкую настройку а СРАЗУ, блять, начинать писать код, а по итогу я луплю в консоль вторые сутки и не могу понять, как мне развернуть свой проект на сервере и иметь к нему доступ.
Есть какие-то пошаговые мануалы, ветки форумов, где это все можно в более-менее доступной форме усвоить?
Есть информация, что кодить лучше начинать с реально поставленной задачи, вот я и хочу сделать понятный мне тестовый проект, пусть он будет велосипедом и никому нахуй не нужен, зато построен в привычном для большинства программистов пайплайне.
>Установить python3
Установил 3.6, по запросу # python вываливается 2.7 (понимаю, что так наверное и должно быть, просто я тупой)
>Освоить virtualenv
Вот,информацию, что это - я нашел, не могу дойти, зачем это юзать и в чем преимущества.
> не пользоваться пакетами дистрибутива
не понимаю, о чем идет речь.
>ставить через pip внутри этого virtualenv.
Это ты о Django и остальных инструментах?
>Гиту достаточно наличия ssh, хотя я предпочитаю локально написанный скрипт, который делает zip файл, вливает его по scp, далее через ssh -c запускает там определённый набор команд и всё разворачивается. То есть правило хорошего тона это не держать на серваке никаких скриптов отвечающих за деплой, только голый ssh наружу.
тут все более-менее понятно, инструкцию по привязке Git нарыл, но мне до этого еще как до африки пешком.
Смотри, я полный нуб, о существовании Python узнал пару лет назад, месяц назад прошел курс обучения в приложении Solo learn, со стандартной библиотекой разбираюсь, как завещали.
Суть в чем: везде пишут, что Python и Django - это самые, блять, простые решения и на них веб-проект поднять легче, чем член школьника во время первой ебли, и дескать любой может не отвлекаться на тонкую настройку а СРАЗУ, блять, начинать писать код, а по итогу я луплю в консоль вторые сутки и не могу понять, как мне развернуть свой проект на сервере и иметь к нему доступ.
Есть какие-то пошаговые мануалы, ветки форумов, где это все можно в более-менее доступной форме усвоить?
Есть информация, что кодить лучше начинать с реально поставленной задачи, вот я и хочу сделать понятный мне тестовый проект, пусть он будет велосипедом и никому нахуй не нужен, зато построен в привычном для большинства программистов пайплайне.
>по запросу # python вываливается 2.7
python3 надо писать же.
>virtualenv
Чтобы все твои зависимости были установлены не глобально, а в отдельную папку - так можно быстро переключиться с одного проекта на другой, например. Делается так:
$ python3 -m venv myname
$ source myname/bin/activate
(myname) $ deactivate
Если тебе надо будет в скрипте запускать из venva, просто указывай путь до пайтона, который в папке myname, а не до системного.
Да мне бы без объяснений лишних, просто ссылкой, куда пойти.
Понятно, что к админам, но неужели никто тут не разворачивал на своем VPS платформу для работы? Раз уж мимохую вроде меня это понадобилось, наверное, решение где-то должно быть.
кстати, у того же гугла есть готовый солюшен под Джанго, по сути - та же ВМ на Дебиане, но с ней ровно та же история. СЛОЖНА, НИХУЯ НИПАНЯТНА.
>Django - это самые, блять, простые решения
На мой взгляд flask проще. Советую с него начать.
>>61275
Я разворачивал. Очень долго рассказывать что к чему... Можешь вот тут почитать: https://habrahabr.ru/post/120363/
Что-то одной ссылкой не получается, вот еще вариант с нуля: https://habrahabr.ru/post/250433/
>python3 надо писать же.
только что осознал собственную никчемность.
>Чтобы все твои зависимости были установлены не глобально, а в отдельную папку - так можно быстро переключиться с одного проекта на другой, например. Делается так:
$ python3 -m venv myname
$ source myname/bin/activate
(myname) $ deactivate
интересное решение, буду пробовать, премного благодарен, стало чуть понятнее.
>>61278
>Я разворачивал. Очень долго рассказывать что к чему... Можешь вот тут почитать: https://habrahabr.ru/post/120363/
благодарю, сейчас же попробую)
Кто-то работал с кубернетис клиентом?
Суть в том что у меня фейлится соединение с https сервером из-за socket ssl проверки, хотя я и сконфигурил verify_ssl в False.
ВТФ???
Как-же заебало это ебучее ssl все время из-за него какие-то проблемы
Нет, подключится к HTTP я не могу
Ни в коем случае не лучше.
Ты ебанутый? В шапке книги про все это есть, надеюсь, ты хотя бы про методы http запроса знаешь?
Ну эскейпит и эскейпит, тебе жалко, что ли? Это только в интерактивном эскейпит, если что, а print(s) всё ок отображает.
Что интересно, s.__repr__() заэскепит те слеши, которые служили эскейпом изначального, превращяя r'\a' в \\\\a, лол.
эм, превращая, уж простите.
Есть словарь, значения элементов которого тоже словари. Более того значения значений элементов словаря тоже словари. Такой вот многомерный массив.
Выглядит примерно так:
Словарь1
|Элемент 1
|Лист1
|Лист2
|Лист3
|Элемент 2
|Лист1
|Лист2
|Лист3
|Лист4
|Элемент 2
|Лист1
|Лист2
-------------------------
|Элемент n
|Лист1
|Лист2
|Лист3
|Лист4
|Лист5
Вопрос в следующем: Как взять по одному листочку на каждой конечной ветке, таким образом получить множество длиною в количество родительских ветвей листьев? Более того нужно перебрать все возможные комбинации взятия листьев при незнании ни количества ветвей, ни количества листьев, т.е. при неизвестном количестве вложенных циклов.
Гугл говорит через рекурсию, но как это запилить сложна, сложна, непонятна
Есть словарь, значения элементов которого тоже словари. Более того значения значений элементов словаря тоже словари. Такой вот многомерный массив.
Выглядит примерно так:
Словарь1
|Элемент 1
|Лист1
|Лист2
|Лист3
|Элемент 2
|Лист1
|Лист2
|Лист3
|Лист4
|Элемент 2
|Лист1
|Лист2
-------------------------
|Элемент n
|Лист1
|Лист2
|Лист3
|Лист4
|Лист5
Вопрос в следующем: Как взять по одному листочку на каждой конечной ветке, таким образом получить множество длиною в количество родительских ветвей листьев? Более того нужно перебрать все возможные комбинации взятия листьев при незнании ни количества ветвей, ни количества листьев, т.е. при неизвестном количестве вложенных циклов.
Гугл говорит через рекурсию, но как это запилить сложна, сложна, непонятна
В моей мухосрани-миллионнике открыти 10 вакансий на пайтоне, 50+ на пхп, 30+ на джаве. Что за херня, аноны?
https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.frombytes
Либо putpixel циклом вызывать, что очень медленно, зато универсально.
Прочитал теорию из книги "Автоматизация рутинных задач..." Свейгарта. Через треть книги начинаются примеры автоматизации, и я в них жестко спотыкаюсь, зависая на каждой строке в попытках понять, зачем оно и почему работает. Плюс очень неудобно из-за того, что электронный формат. Сама книга очень дорогая, жаба душит полторы штуки отдавать, хотя кажется полезной.
Можете подсказать какую-нибудь книжку, которую вот реально не жалко купить, и чтобы она охуенно все расписывала. Типа Лутца вашего, но их же у него много. Есть что-то универсальное?
Нужны. Всегда хорошо иметь под рукой мануал в бумажном виде с загнутым уголком на нужной странице.
Ну хочешь иди работай на пхп. Что тебе ещё сказать? К сожалению кроме питона нужно знать ещё очень и очень много других вещей, и эти вещи часто повторяются где бы ты ни работал, базы данных например.
Освой grep и текстовые заметки в md/txt/rst, или гуголь и стековерфлоу/заметки в браузере. Намного быстрее чем любая бумага.
Хорошая статья. В очередной раз убедился в том, что нужно учить не язык, а программирование и уметь продать свой труд.
Сама постановка вопросов "какой язык учить?", "На чем пишешь?" и т.д. - это глупость. Нужно именно учиться программировать в реальных условиях и на тех инструментах, которые сейчас востребованы.
Но чтобы это уметь нужно 1) уметь программировать, 2) постоянно изучать новые технологии (если их стоит изучать, конечно).
А на одном лишь питоне сложно будет.
Повторю то, что я уже много раз говорил.
Первый язык должен быть ассемблер, потом изучаете Си, дальше C++ или Java. Ну а потом можно и скриптовые языки типа Питона или Руби. Понятно, что это не такая четкая схема 1->2->3->4, но что-то типа того.
Ну а битарды и дальше могут продолжать свои "Питон клевый молодежный язык..."
То есть по факту я переношу то, что уже есть в книге, на цифровой вариант, который у меня уже и так есть и в котором неудобно ориентироваться. Хорошая идея.
>Первый язык должен быть ассемблер, потом изучаете Си, дальше C++ или Java. Ну а потом можно и скриптовые языки типа Питона или Руби
Хороший совет для тех, кому уже за 20 и они решили попробовать себя в программировании. Дескать, ребята, потратьте еще пару лет на теорию, потом что-нибудь предпринимайте.
>Автоматизация рутинных задач..." Свейгарта
>Сама книга очень
бесплатная, вот тут https://sites.google.com/view/pypry/ есть видос где индус ее вместе с тобой будет проходить
>>61674
+
>>61682
вот этого в президенты шапку кроме ассемблера это клиника, всегда нужно думать о цели в первую очередь и минимально необходымых средствах для ее достижения, а подрочить теч можно и на пенсии
>>61683
просто иногда надо снять стресс, вытащить наружу свою проблему и поделиться её с понимающим аноном
>Хороший совет для тех, кому уже за 20
Мир жесток. Работай хоть уборщиком, но асм изучи. Пока ты не понимаешь, как работает проц, ты не программист, а так, быдлокодер.
Но я соглашусь, что асм надо изучать еще в школьные годы. Я сам его изучал, когда мне было 14 лет. Тогда еще был жив васм.ру (сейчас он переродился). wasm.ru - это реинкарнация assembler.ru. А ньюфаги и не слышали.
Потом на одном лишь асме кодить надоело и я начал использовать C. Писал разные утилитки, драйвера для Windows XP. Помню изучал серию статей Four-F по написанию драйверов под WinNT.
Ну а потом начал больше писать на C++ и Perl. Потом ушел из перла и начал вместо него использовать питон. Но скриптовые языки у меня использовались как вспомогательные, а не основные. Если думаешь, на чем писать в продакшен, то выбирай джаву. Ну а для души asm/C++/python.
>Пока ты не понимаешь с ходу что здесь написано, 0111001101101111011100110110100100100000011010000111010101101001001000000110001001101001011001000110110001101111, ты не программист, а так, быдлокодер.
>бесплатная, вот тут https://sites.google.com/view/pypry/
Зачем мне, я ее и так читаю. Сказал же, треть книги осилил. Но бэктречить по pdf-файлу, который является сканом, дюже неудобно.
011100110110111101110011011010010010000001110011011000010110110100100000011001010110001001100001011011100110000101110100
>0111001101101111011100110110100100100000011010000111010101101001001000000110001001101001011001000110110001101111
Надеюсь, ты это хотя бы сгенерировал, а не писал от руки?
Почаны, кто-нибудь использовал Молоток в плетении из бисера, как оно, много ли нынче геммороя? Собираюсь делать поклейку из бумаги и картона и нужно будет много ватманов и ножниц.
>>Пока ты не понимаешь, как работает проц, ты не программист, а так, быдлокодер.
Блять, вот прям досконально изучать АСМ нахуй не надо, только ознакомиться. Всё равно писать на нем скорее-всего не придётся. Если охота понять как железо работает, лучше не ебаться а ассемблером, а Архитектуру компьютера от Таненбаума почитать, а ассемблер там будет, в целях нужных количествах для ознакомления.
Поссал тебе на голову.
яж НАСТОЯИЩЕЙ, никак некоторые
Элементарно жи.
Шаг 1. Напиши хотя бы просто рекурсивный обход одной ветки, чтобы получить на выходе список ['a', 'b', 'c', 'd'].
Шаг 2. Заметь, что до точки 'c' обе линии одинаковы, и лишь на c расходятся, значит на этой точке нужно дублировать имеющийся на тот момент список ['a', 'b', 'c'], добав далее к одной копии 'd', а к другой — 'e' (разумеется, рекурсивно вызвав функцию обработки следующего элемента).
Ну и если всё правильно написано, дальше магия сама всё за тебя сделает.
>Параметры print()
>...
>flush – если задано значение True, поток принудительно сбрасывается в файл. Значение по умолчанию: False.
Кто-нибудь, объясните, что это значит. Нахуя нужен этот флаш?
А как бы ты это сделал, анон? Мне не нрав, что я сначала хуярю целый генератор, чтобы потом применить на него any(), но как по-другому в функциональном стиле сделать я не знаю. (без него сделал бы обычный for который или выбрасывался бы с False, как только встречает неверный символ, или в конце возвращает True).
И как уместить это все в 25 строк?
Если ты будешь писать по одному символу, то каждый раз перезаписывать целый сектор на диске размером 512/4096 байт очень дорого. Поэтому всё-всё-всё буферизуется и накапливается в достаточном количестве чтобы записывать один раз. Иногда по одному символу выводить всё-таки нужно, например точечки в терминал для прогрессбара, или для чятиков по TCP передавать маленькие куски текста немедленно, не накапливая на полноразмерный пакет. Вот для этого flush.
https://repl.it/repls/EverlastingPlainEllipses
>И как уместить это все в 25 строк?
Не писать десятистрочные докстринги к однострочной функции, название которой и так очевидно.
>Иногда по одному символу выводить всё-таки нужно, например точечки в терминал для прогрессбара
>Вот для этого flush
Вот, тогда следующий вопрос:
Я гуглил побуквенный вывод на экран, и там в примере был этот flush. Я удалил из кода flush, и все работает абсолютно так же:
https://repl.it/repls/ClumsyFirebrickCompilerbug
Так в чем цимес?
Только что запустил этот код в ipython и оно ждёт, затем выплёвывает всю строку разом. Эта штука в браузере не полностью эмулирует реальные ОС.
>Так в чем цимес?
Очевидно в том, что кто-то другой где-то принудительно вызывал flush, или stdout без буфера в шелле открыт. В интерактивном режиме питон точно вызывает его, например.
>очередные манятеории о том, кто такой настоящий программист, когда на швитом жападе давно разделили российского ПРОГРАММИСТА на три категории
Ааа, вон оно что. Понятненько. В той ветке форума, где я это гуглил, что-то такое тоже писали, а я недоумевал, что у меня все норм в repl.it
А можно тогда сразу вопрос: у меня там end='' стоит, так вот, если я попытаюсь после этого текста вбить еще одну функцию print(), то второй текст будет на этой же строке, что и первая. Как это починить?
end по умолчанию '\n'. print каждый раз добавляет к выводимой строке end, а между аргументами вставляет пробелы.
>второй текст будет на этой же строке, что и первая. Как это починить?
>Я не вылил воду из стакана, и когда я начию в него лить из новой бутылки, перелевается через край. Как починить?
Ты дурак или что?
Перевел. Теперь отвечай.
>Ну, так и как закрыть кран, чтобы вода не лилась дальше?
Ты путаешь. Кран открывает когда ты вызываешь print(). По-дефолту после вызова каждого принта меняется стакан (end="\n"). Если ты делаешь end="", по под краном остаётся тот же стакан, поэтому при следующем вызове print'а вода льётся в тот же стакан.
Догадаешь, как поменять стакан самому?
>>61708
>>61694
Я вам не собираюсь ничего доказывать, но скажу вам следующее.
Если у вас не базы (т.е. фундаментальных знаний), то не удивляйтесь, что вас не будут брать на работу. Это нормально, что студентов без знаний не хотят брать в уже наработанный коллектив.
Но даже если вас возьмут на работу, то максимум, что вам светит - это миддл. Это будет вашим потолком в том случае, если вы скрипткидди. Не плачьтесь потом на имиджбордах, что нет работы.
Там есть
1) Programmer - должен писать код, тесты, документацию, выбирать наилучшее решение согласно заданию.
2) Software engineer - это программер + немного аналитик + немного архитектор + общение с заказчиком\проджект менеджером.
3) Computer Scientists - разработка и оптимизация алгоритмов + умение кодить, но не обязательно так же хорошо, как программер
Даже SE нельзя назвать тем, кто должен знать asm, сишку и прочую низкоуровневую шелуху, все зависит от специальность, а именно python\c++\java\js\еще какой нибудь язык developer. Какому нибудь шарписту вообще не важно, как именно работает процессор на уровне asm команд. Не пытайтесь стать универсалом, который знает ВСЕ. it слишком разнообразно, что бы уместить все в голове.
доширачная зелень приходит сюда что бы ее подбодрили и задали вектор, а не послали нахуй дрочить основы четверть жизни, обозвав унтерменьшом
ведешь себя как занудный старпер, вот рилли, нахуй грузить зеленых ебалой!? или ты думаешь когда анон с дошика перекатится в рестораны с чеком под 10к, и устанет от этого, он сам не догадается дрочнуть фундамент ? ? ? если нет, то он не помидор, и никогда им не будет даже с четвертьвековыми основами
Это все хуета, которая используется менеджментом для составления бумажек. В реале есть просто программисты, которые пишут
1) низкоуровневый код (микроконтроллеры, embedded, ОСи etc)
2) прикладники
3) Ворлд Вайд Въеб и прочие скрипткидди.
Причем последний не обязательно означает, что человек чмо. Это вполне может быть хороший программер, который имеет большой опыт. Просто на среднего такого фронтэндера нельзя полагаться ни в чем.
Вообще, developer - они в строительных компаниях работают. А нормальные люди себя называют programmer. Даже термин software engineer уже постепенно впадает в немилость.
>>61796
Я просто ответил на вопрос. Тут анон плакался, что ему не дают нет работы, а я поделился своим опытом.
У вас же сразу срезанировало и начался термоядерный бомбеж. Это и понятно, ведь вы не программисты.
Мимо 29лет кун
Как бы чтение Таненбаума, которого я предлагал и даст фундаментальные знания по работе железа, причем даже на более низких уровнях, чем уровень архитектуры команд. Или ты предлагаешь страдать ненужной хуйнёй и учиться досконально разбираться во всех изъёбствах ублюдочной x86-64 или какую ты там ещё архитектуру для изучения предлагаешь?
Нет, я программист.
>Это все хуета, которая используется менеджментом для составления бумажек
Кто сам-то? Пруфы того, что ты охуеней тех, кто придумал все это есть?
>Если ты еще не понимаешь, что вся эта терминология не используется программистами, а используется менеджментом для составления бумаг наверх
А у нас ее программисты используют
Как бы я низкоуровневым программированием не занимаюсь, потому на АСМ не пишу, нахрен мне это не надо. Но в случае чего, ассемблерные листинги читать могу и что там происходит понимаю. (Пришлось кстати однажды с этим поебаться, так как в одном проекте компилятор в определенных условиях лютую хуйню выдавал, которая не работала)
Я тебе о том, что чтобы понимать, как в принципе работает ДВС не нужно уметь перебирать конкретный мотор батиной девятины.
>меня называл старпером
ты же не подумал что это как то коррелирует с возрастом?
насколько надо быть умным и одаренным ПРОГРАММИСТОМ что бы с такой неистовой силой отрицать чужое мнение и выставлять свое, как единственно правильное и возможное!?
>Ты не можешь найти работу?
Нет, с работой у меня всё норм. Просто покоробили заявления о том, что зелёному неприменно нужно учить ассемблер иначе он нахуй не нужен
Желательно изучить. Но если ты не имеешь времени это сделать сейчас, то можешь сделать потом.
Затем же, зачем знать основы электричества при проводке проводов для создания новой розетки.
>Тут есть два типа людей:
1) работники, работают с тем что имеют
2) нытики, всегда будут ныть
это типы личности антош иди почитай гороскоп и не пытайся кого-то сделать лучше это бесоплезно
Вот я пишу такой на жабе\шарпе, работаю с абстракциями, какая разница для меня что там jvm\clr процессору выдает?
>Зачем?
Это основы основ. Даже если ты изучаешь питон, то тебе нужно изучить, как работает его виртуальная машина (которая тут называется интерпретатором).
>>61828
>это типы личности антош
Соглашусь. Я никого не пытался менять. Просто выразил свое мнение на вопрос, почему у него нет работы. А в итоге началась бомбежка.
>Просто выразил свое мнение на вопрос, почему у него нет работы
Ты привязал это к знаниям низкоуровневых языков, а не к типу личности
>Ты привязал это к знаниям низкоуровневых языков, а не к типу личности
И из-за этого случилась бомбежка?
Затем, что если ты не знаешь, что под капотом, то ты не программист. Твой потолок - это мидл, но с возрастом тебя уже не будут брать никуда.
Просто если ты не хочешь ни в чем разбираться, то у тебя нет воли к тому, чтобы учиться. Я когда был маленький, то всегда разбирал всякие вещи правда потом не мог собрать и из-за этого получал пиздюлей, но меня это не останавливало.
А вот у тебя, видимо, нет желания разбираться, что там за этими абстракциями. Это значит, что ты плохой программист. Хороший программист смотрит вглубь.
Определение спроси у своей мамы. Твоя мама всегда лучше знает, что для тебя лучше.
Что мама сказала?
>то тебе нужно изучить, как работает его виртуальная машина
ок, но на том же примере с УКЛАДКОЙ кабеля для ПИТАНИЯ предварительно СМОНТИРОВАННОЙ розетки, мне вовсе не обязательно знать что по жилам кабеля протекает направленный поток заряженных частиц, все что нужно знать — так это не браться голыми руками за два оголенных провода, вот и всё
так и с машиной твоей, в любом учебнике по языку есть введение на пару страниц, этого будет достаточно
из спортивного интереса ты свободное время ты всегда можешь подрочить любую литру какую хочешь, хоть блять Ландао, он ведь тоже дохуя полезный, а чо ебать
но не надо этим засирать голову доверчивому анону, он сюда приходит пушо здесь все его друзья, а они его так жестко наебывают, не надо так занудная хуила блядь
Например для того, чтобы потом не охуевать и не ломать голову из-за чего у приложения в продакшене время от времени случаются дикие провалы по производительности, да такие, что приложение половину запросов в эти моменты проёбывает. (Тру стори из реальной практики, было такое. jit промахивался с предположениями относительно большого куска кода, а потом при промахе, деоптимизировал его и вываливал в интерпретацию)
>ему не дают
БЛЯТЬ НИ РАЗУ НЕ ЗА НЕЗНАНИЕ СУКА ЕБАННОГО АСМА И УСТРОЙСТВА Х86 ебанный ж ты по голове перестань уже нагло врать и подменять понятия, все равно что с телками, ты будешь говорить анону с двача что ему не дают за всратое ебало, сука я понел ты траллируешь нас, а мы блять горим, больной ублюдок
>Ты не программист
я девелопер, мне главное что бы работало, сносно работало, а чо там как там, я узнаю по ходу решения задачи, благо в рокетсаенс я не лезу
геймдевелопер же, но и таджика от кыргыза отличить сумею, а прорабы достойнейшие из людей, зарабатывают деньги тяжелым трудом, один таджик четверых руснявых алканов стоит, и яму под септик выкапывает за день
и я вообще не понел откуда такой негатив к ручным профессиям? конкретно мне для воссоздания виртуального мира нужна информация из реального, пусть не вся она релевантна, но знать наверняка это невозможно, так что иди нахуй комрад
>>61786
>>61800
>Ворлд Вайд Въеб и прочие скрипткидди
>>>1161837
>твой потолок - это мидл
Как же проигрываю с этого мамкиного тру-погроммиста. Потратил молодость на изучение ассемблера, молодец.
Также проигрываю с тех, кто ведется и бомбит на толстоту про то что "в синьоры" не возьмут если в машинный код не можешь.
Заквакал аж.
>Потратил молодость на изучение ассемблера, молодец.
Довольно равномерно развивался по всем фронтам. Завидуй.
А теперь помоги мне с домашним заданием нет. Вот нужно из кучи файлов отсортировать те, которые ещё не протухли. Я думаю взять текущее время time.time() и в цикле итерировать файлы, брать у каждого os.getmtime(), находить разницу с текущем и делить на количество секунд в сутках. Вот про секунды вопрос. Я хотел написать разница_в_секундах//(246060). И подумал. Питон будет это произведение считать каждый раз для каждого файла? Это нехорошо. Тогда может написать разница_в_секундах//86400. Но Питон про читаемость и понятность кода, а что это за 86400 такие? Тогда может вне цикла определить секунд_в_сутках = 246060, а в цикле писать
разница_в_секундах//секунд_в_сутках? Как максимально красиво и pythonic way?
БЛЯТЬ ЕБАНАЯ РАЗМЕТКА СУКА. вместо 246060 должно быть 24 умножить на 60 умножить на 60.
Если твои знания и опыт ограничены питоном и его фреймворками, то у меня для тебя плохие новости.
>Также проигрываю с тех, кто ведется и бомбит на толстоту про то что "в синьоры" не возьмут если в машинный код не можешь.
Если посмотришь на мои посты, то в начале я даже не троллил, а вполне серьезно говорил. Но когда я столкнулся с непонимаением и неадекватом, то почему бы не потроллить?
Я наслушался охуительных историй от друга моего друга, который затирает, что он успешный мамин фрилансер на пайтоне. Я чую пиздеж. Как его вывести на чистую воду?
>Как его вывести на чистую воду?
А зачем его выводить на чистую воду? Ты ему начинай втирать, что у тебя каждый день новая телка, а он потратил молодость на свой питон. Пусть его теперь дрочит.
если я указываю верхний предел последовательности и пишу
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
То наибольшее число выходит за границы предела.
Почему так?
Всё, вопрос снят.
from threading import Thread
def func(number):
print('add',number)
t3, t4 = Thread(target=func, args=[4]), Thread(target=func, args=[4])
t1, t2 = Thread(target=func, args=[4]), Thread(target=func, args=[4])
t1.start(), t2.start(), t3.start(), t4.start()
t1.join(), t2.join(), t3.join(), t4.join()
https://ideone.com/aMQxTx
Что не так?
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()
Тут в прошлом треде один многомудрый анон втирал за склонность разработчика к лени. Зачем писать два лишних слова? А если тебе нужны две функции? Три? Будешь их через запятую перечислять?
>Зачем писать два лишних слова?
Чтобы потом сэкономить и писать Thread, вместо threading.Thread, например.
И есть 3 csv файла, которые имеют следующую структуру: https://pastebin.com/6JqT94DA
Задача написать скрипт который будет считывать данные из всех csv и обновлять мой исходный JSON файл.
Сделанные шаги:
1) Считать все csv-файлы
2) Создать либо список списков, где базовым элементом будет строка параметра либо словарь с ключом-названием документа.
3) Найти общие строки-параметры для 3 юзеров
4) ???
5) Загрузить это всё обратно в JSON без потери изначальной формы (Так бы я уже давно просто поменял всю структуру json'a под юзеров, но увы).
Так вот, я реально не понимаю, что мне делать. Строить страшные конструкции с миллионом if и for кажется убогим вариантом, да и скорее всего я что-то упущу. Может быть тут есть какое-то более приемлемое решение?
Похоже сегодня не мой день.
Как долго с пхп укатиться на питон? Стоит ли? Тяжело работу найти?
Шифрование с помощью открытого и закрытого ключа было изобретено в 1976 году Уитфилдом Диффи и Мартином Хеллманом (под влиянием работ Ральфа Меркле). Они основаны на том, что на принимающей и отправляющей стороне рассчитывается т.н. односторонняя функция, и отправитель и получатель передают друг другу два числа, позволяющие получить ключи для шифрования.
Дальше сам гугли.
Далеко не всегда и не везде, тем более если значение очевидно и понятно и без префикса модуля.
Да даже тот же
>from x import •
используется в стандартных библиотеках иногда.
Огромное спасибо!
Вкатываюсь и попытаюсь это сделать, если нормально объяснишь, что тебе нужно. Потому что я пока не понимаю. Для каждой строки csv надо найти, есть ли команда с заданными модулем, тестом и функцией, и если да, добавить в параметры этой команды юзера (который указан только в имени самого csv), а если нет - создать? Так что ли?
Верно. Если дословно:
Изменения могут быть следующие:
1) Добавлена новая команда
2) Удалена команда
3) Изменена команда (стала доступна для другого набора пользователей, перенесена в другой модуль, изменена вызываемая функция)
Покажи. Подобный аутизм можно даже в трядэ в майнкрафтах либо через аддон opencomputers, либо генерируя непосредственно NBT не запуская игру. Залипнуть можно надолго, но все эти алгоритмы с плотным размещением очень уж нетривиальные.
def это не функция, а ключевое слово языка, позволяющее определять функции. То что в скобках ты напишешь собственно полностью под твоим контролем. Можешь много параметров затребовать, можешь ни одного, в чём проблема-то?
Ну вот как я себе это представляю. Вложенных циклов дохуя, да, но if'ов вроде нормально. Не представляю, как без них можно проверять наличие команд и прочей шелухи. Другие аноны тоже оцените если можете.
https://repl.it/repls/EthicalAbandonedMachinecodeinstruction
лолирую с имен, которые repl генерирует
Вот таких как ты я чёт готов душить и расстреливать. Гугл не авторитет. Если у тебя файлы больше 1000-2000 строк, там да, это помогает. Но с другой стороны, такие большие файлы уже можно бы и поразбивать. Ещё бывает названия импортируемых фунции слишком generic лучше переименовать from os.path import exist as file_exists.
Ну допустим, есть веб сервис в котором зарегистрированные люди могут работать по api с другим сайтом, людей больше чем 1. Для работы с api другого сервиса, нужен будет http клиент
Нету , для работы с pyQt есть божественный Qt дизайнер, в котором рисуются формочки у wxpython тож есть какой-то дизайнер и у Gtk тож есть дизайнер
Черепашка.
import turtle
draw = turtle.Pen()
for i in range (5, 500, 5):
draw.forward(i)
draw.left(90)
Нужен. urllib/requests блокирующие клиенты, то есть у тебя будет тредпул ограниченной размерности. Можешь ещё перейти на асинхронные дилды. Можешь соединения с определёнными сервисами тоже не закрывать раньше времени.
В pep8 не рекомендуют кастрировать язык. Если это так хуёво импортировать отдельные классы из модуля, напиши гвиде пеп пропозал вырезающий это из языка к ебени матери.
No module named 'tkinter'
Ай.. у меня питон собран без поддержки tk. Но забавно, прямо в стдлибе.
Рекомендуется абсолютное импортирование, так как оно обычно более читаемо и ведет себя лучше (или, по крайней мере, даёт понятные сообщения об ошибках) если импортируемая система настроена неправильно (например, когда каталог внутри пакета заканчивается на sys.path):
Пытаюсь разобраться, пока у меня появляется "-f" в параметре user. Наверно, что-то делаю не так.
Что ты понимаешь под абсолютным импортированием? Покажи примеры по каждому пункту в стиле говно|охуенно:
>более читаемо
>ведет себя лучше
>даёт понятные сообщения об ошибках
Ну и непонятные заодно напиши.
>импортируемая система настроена неправильно
Надо что-то настраивать ещё?
>каталог внутри пакета заканчивается на sys.path
Это как?
name ведь наверняка уникальным должно быть
Если бы я оценивал твой код, на тестовом задании бы собес и закончился.
Во-первых, пытаешься работать с параметрами командной строки напрямую вместо 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, но только не конкатенация строк плюсиком
>...
по поводу структуры кода и возможности его переиспользовать и говорить не приходится.
Это выдержка из PEP, блять. Вопросы к составителям.
threadPool используй
>argparse
Зачем мне использовать его тут, если единственные команды, которые будет кушать мой скрипт - имена .csv файлов?
>стандартный модуль csv
Я знаю про него. И опять - зачем он тут? В скинутом примере csv максимально простой, предполагаю, что остальные выглядят так же. Как и применение argparse это мне кажется пушкой по воробьям. Зачем?
>комментарии не по pep, строки совсем не 80 символов
В смысле не по пеп? 2 пробела от самого кода, #, пробел, комментарий. PyCharm завещал так делать. Та же PEP8 в Pycharm'е говорит про строки в 120 символов.
>по поводу самого кода
Ну а что не так то с самим кодом? Итерирую csv, беру из них необходимые параметры, ищу нужную команду в оригинале, изменяю/добавляю, если нет. Как это по другому сделать?
>На кой ты здесь поломал оригинальную структуру?
Оригинальная структура представляет из себя словарь с одним единственным айтемом. И нафига мне его через всю программу тащить, когда можно тащить сам айтем? чтобы везде в остальной программе не писать original["commands"]
>раз уж пишешь свой говнокод, то поменяй условие в обратную сторону
Тогда придется писать что-то типа sys.exit() или как он там. Лишняя строка, не?
>все что угодно
Зачем эти ненужные усложнения? Когда нужно вывести большую красивую строку - делаю их. Но тут то зачем?
>по поводу структуры кода и возможности его переиспользовать и говорить не приходится
Ну а ты как бы сделал? Я думал нахуярить coroutine'ов и сделать pipeline раз я их только выучил, хуле и нет, но конечная цель - поиск совпадений name,function,module все равно пришлось бы делать во вложенных циклах. По-другому я не придумал.
Надеюсь на конструктивный ответ.
>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 все равно пришлось бы делать во вложенных циклах. По-другому я не придумал.
см пункт про декомпозицию и обработку исключений (что по сути есть разделение приложения на функциональные слои)
>Надеюсь на конструктивный ответ.
>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 все равно пришлось бы делать во вложенных циклах. По-другому я не придумал.
см пункт про декомпозицию и обработку исключений (что по сути есть разделение приложения на функциональные слои)
>Надеюсь на конструктивный ответ.
Монада, если не вдаваться в анальные глубины общей алгебры, является удобным паттерном для функциональных языков. Монады позволяют набирать последовательные цепочки вычислений, тем самым гарантируется строгий порядок выполнения. Особенно это полезно для вызова сайд-эффектов, получается по сути императивный код на основе чисто функционального, где в общем случае порядок вычислений заранее неизвестен.
>Я знаю про него. И опять - зачем он тут? В скинутом примере csv максимально простой, предполагаю, что остальные выглядят так же. Как и применение argparse это мне кажется пушкой по воробьям. Зачем?
Csv штука сложная. Ты наверное думаешь, что это просто разделенные сепараторами поля и не знаешь, что сепаратор может быть внутри кавычек.
>>62371
>а еще можно бросать исключения с детальным описанием проблемы и обработкой их в одном месте и корректным завершением приложения
А вот тут мне уже стало интересно. Покажи, как ты это делаешь.
Интересная структура, но когда я прописываю в одном из txt какие-нибудь другие имена, то они не добавляются.
Тебе нужно сначала осознать что в ФП средах порядок выполнения не определён. В ФП ты не описываешь последовательность действий вроде возьми то, сложи туда, возьми это, перенести туда. В ФП ты сразу пишешь что тебе надо вот эти две коробки в таком порядке, а компилятор/рантайм тебе уже сами додумывают как это размотать в нужную последовательность действий и где что когда выделить в памяти.
Допустим у тебя есть такой код:
print(sin(sqrt(2)))
Вот это хороший пример вычислений зависимых по цепочке. Рантайм сможет это посчитать только в единственной возможной последовательности: сначала двойка, затем корень, затем синус, затем print.
Но что если функции никак друг от друга не зависят, а в цепочку их слепить надо? Например
print('lol') затем print('kek') затем print('ayy')
Вот тут-то и нужны монады. Делаешь print('lol') bind print('kek') bind print('ayy'), получаешь выражение наподобие print(sin(sqrt(2))) с единственно возможным порядком выполнения. При этом нагромождения от тебя скрыты и ты видишь только красивый чистый синтаксис.
>Нехуя не понял, что такое монада. Можно на примерах?
потому что он хуйню спизданул, http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html
>>62394
>Покажи, как ты это делаешь.
Зависит от ситуации, в этом скрипте достаточно было бы:
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)
Тут мало по экцепшенам. Ты отдельные классы создаешь или один? Сколько параметров в классе и как это определяешь?
На какой уровень вложности процедур надо расчитывать в try/except блоках?
Если у тебя есть github, то скинь ссылку.
>Common declarative languages include those of database query languages (e.g., SQL, XQuery), regular expressions, logic programming, functional programming, and configuration management systems.
Эм. Ты меня похвалил так или я чего-то не понял?
Ну вот я его изменяю(название функции, например), а итоговый json файл остается таким же, каким был в оригинале.
У меня в гите смотреть особо не на что, лучше посмотри код опенсорсных проектов - сильно полезнее будет (начать можно с той же django).
А по поводу остального, классы нужны если есть состояния(если их нет или можно избежать, то функциональщина может быть предпочтительнее), декомпозировать на классы нужно в соответствии с логикой, обязанностями и общей моделью/структурой приложения; количество параметров рекомендуют делать не больше семи.
А по поводу вложенности процедур в try/except каких-то особых ограничений я не знаю, по крайней мере я не вижу проблем в том, чтобы оборачивать в try/except рекурсивные функции. Другое дело, что лучше не размазывать обработку ошибок по всему коду, а делать это в одном специальном месте.
И, ответы на эти ответы не абсолютны, а понимание их нужности/полезности приходит с опытом (есть книга макКонела "идеальный код", там он как раз об этих вещах пишет, но если у тебя совсем нет опыта толку от нее будет не много).
>>62440
Не похвалил. Неопределенный порядок вычислений есть в каком-нить прологе или при выполнении sql, а в лиспах/хаскелях/кложурах (и либах добавляющих функциональщину к питону, php, js, java) порядок вычисления вполне себе конкретный, а примеры, которые ты написал в >>62413 - дичь полная.
Потому что в первом варианте итерация происходит на уровне сишного кода, во втором на уровне питонов. Никто бы не делали эти ваши нампи если бы вот так скорость не прирастала.
Магиче сишечки.
Но ты не очень честно сделал, на самом деле, потому что единичный доступ по нампиевским массивам медленнее, чем к родным списочкам раза в полтора: https://repl.it/repls/PaleSnivelingSpreadsheet
>порядок вычисления вполне себе конкретный
Вот это уже реально дичь. Нахуй тогда монады нужно-то? Вычисления могут быть детерминированными, то бишь повторяться одинаково при одинаковых входных данных и фазе луны. Но это не рассчитано на то чтобы какие-то задроты вроде тебя в уме разворачивали весь граф вычислений и писали код подглядывая в исходники ghc.
Пофиксил на List4[y], только вот при n = нечётное число, выдаёт ошибку IndexError: list index out of range
Какого черта меняются значения в listnew_? Я нигде не просил этого.
Выглядит будто при передаче листу listnew_ значения list_, собственно передачи значения не происходит, а как будто передается только указатель и ссылаются оба на одно и тоже.
Иначе как объяснить такое поведение? И как это исправить?
>Выглядит будто при передаче листу listnew_ значения list_, собственно передачи значения не происходит, а как будто передается только указатель и ссылаются оба на одно и тоже
Ты не поверишь.
>>62614
>>62619
Спасибо аноны.
Вам не кажется, что это является эталоном зашквара?
Как вообще можно было до такого додуматься? Что поведение базового оператора зависит от контекста его вызова (в случае целых чисел, например, работает иначе). Стало быть python это не тот язык на котором можно просто писать, а нужно сидеть и пердолиться в изучение какие еще операторы в каких разных контекстах проявляют не ожидаемое поведение и где ждать подводные камни? Нах так жить посоны?
Можно ли это как-то отключить, директивой какой-нибудь и т.п.?
извините, у меня бомбануло
Просто у питона наглухо упоротый синтаксический сахар
b = 4 это обёртка для b = int(4) или как то так я уж не знаю как там точно в интерпртитаторе хуярится
>>62641
Блядь, они плодятся. Какая нахуй обёртка над int(4), что ты несёшь, это ты упоротый сахар, блядь. Уже потратил на тебя полночи, ты опять начинаешь.
>>62636
>Вам не кажется, что это является эталоном зашквара?
Это является эталоном работы с памятью через указатели.
Иди читай ветку от >>1158870 пока тред не смыло. А так же про указатели, референсы, значения, lvalue, rvalue и ещё что-нибудь полезное.
Блядские основы мне почему-то не помогают.
Вот объясни, почему при
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.
Или я опять чего-то не понимаю?
Зоделай константу seconds_in_sutkah = 24 60 60
>Или я опять чего-то не понимаю?
Во-первых, ты не понимешь, что далет
>for y in list4
Во-вторых, ты не понимаешь, что ты вообще делаешь.
Нахуя, спрашивается, ты обходишь в цикле массив по его элементам (по порядку), а потом берёшь индекс элемента? Почему сразу по циферкам от 0 до длины списка не пройтись?!
>print(list4[y])
На этой строке ты принишь y-тый элемент списка. y — значение элемента списка, а не его индекс, который ты только что проверил на чётность.
первая итерация:
y = 1
index(1) % 2 == 0
list4[1] # 2 потому что это второй элемент списка
Дело в том, когда ты используешь метод for:
>for y in list4
, то за y он берет не индекс 0, а первое значение в списке, то есть 1.
>Во-первых, ты не понимешь, что далет
>Во-вторых, ты не понимаешь, что ты вообще делаешь.
Возможно. Именно потому хочу понять и разобраться.
Мне надо чётные индексы заменить на, например, какое-нибудь фиксированное значение.
>>62664
Дело в том, когда ты используешь метод for:
То есть for не использовать?
Такое поведение абсолютно у всех по крайней мере динамических языков: PHP, Lua, Javascript, Perl, Ruby. Посмотри на это с другой стороны, вдруг у тебя есть структура размером 4Гб, потом ты делаешь какую-то элементарную мелочь и все 4Гб автоматически копируются. Ещё вдруг ты захочешь закинуть куда-то далеко в код структуру, но при этом иметь на неё ссылку и время от времени читать. Как такое сделаешь? Явно указатели будешь брать? Истина в том, что поведение copy на деле нужно ооочень редко.
>поведение базового оператора зависит от контекста его вызова (в случае целых чисел, например, работает иначе)
А как иначе? 2 + 2 это далеко не то же самое что [2] + [2] или '2' + '2'. Кстати говоря, операторы наподобие + не изменяют структуры, а порождают новые. Изменяют структуры inplace вызовы методов например list.remove, list.clear, list.append.
>То есть for не использовать?
Использовать. Но по-другому. Иди прочитай ты ну хоть какой-нибудь туториал о циклах в питоне, в самом деле.
А конфликта версий не будет? Сложно же вроде сразу два пистона иметь
Ни в коем разе. Устанавливаются в две разные папки (по номерам версий) в корневом каталоге диска, вызываются отдельными экзешниками.
нихуя сложного.
это называется инвайронмент
управляется либо через pip либо через conda
вообще всю подобную херню по смене версий надо доверять пакетным менеджерам. Очень удобная штука. Всё для людей
Да можешь хоть портабельный взять и распаковать у себя в /home/ ничего не устанавливая.
Ну, мам!
А если серьёзно, пердолиться с этой проблемой и тщетно искать ответ я могу неделями.
Я пришёл с вопросом, и хочу получить на него прямой ответ.
Тебе уже ткнули. for x in lst перебирает элементы, а не индексы.
>написать как правильно?
Ну введи ж ты в гугл python loops tutorial, первые же пара ссылок приведут куда надо и расскажут, что там и как. Ладно бы тебе нужно было срочно сделать, тогда бы дали ответ, но так-то нахуя? Ну напишут тебе тут наебал, не будет тут ответа, дальше что? Ты завтра с очередной такой же дебильной проблемой прибежишь.
Проблема в том, что твоя задача по факту не имеет смысла. У тебя есть массив, из которого ты пытаешься получить значение индекса, чтобы на его основе вызвать элемент массива. Масло масляное, ни добавить ни прибавить. Нахуя это вообще? Это как если бы пошел срать, но предварительно надевал на себя свитер, а потом снимал его тут же. Хотя можно было бы сразу пойти срать без свитера.
кстати под линами змейка другая лел
кому интересно вот линкаhttps://sites.google.com/view/pypry/
https://repl.it/repls/RelievedNervousMarkuplanguage
Алсо,
>обратной repr()
eval. Ты не совсем правильно понимаешь, что делает repr.
.encode('ascii').decode('unicode_escape')
Блжад. Ты и при инте передаешь ссылку на инт. Вот только изменить значение по ссылке ты не можешь, поэтому присвоение нового инта просто меняет ссылку
В питонах всё есть объект. Объекты хранятся в памяти и не имеют имён, только адрес, тип, значение, refcount. Твои a и b это только имена, которые ссылаются на адреса с объектами. Можешь считать что текущий контекст выполнения это такой dict с именами-строками (попробуй vars(), globals()). Кстати refcount это оно и есть, сколько имён привязано к конкретному объекту. Когда оно становится 0 сборщик мусора его автоматически удаляет из памяти.
Во-первых, 2 и 3 - неизменяемые объекты в пайтоне. Во-вторых, ты сначала установил ссылку b в одно значение и его добавил в список, потом установил в другое значение и уже другую ссылку добавил в список - получился список из двух разных ссылок на два неизменяемых значения. Как бы ты теперь не модифицировал значение ссылки b, в списке у тебя сейчас хранятся ссылки на неизменяемые 2 и 3, а не на b. Как правило такого поведения мы и ожидаем...
Вот другой пример: >>62885 - здесь сначала создают две ссылки на изменяемый объект, а потом в один из объектов дважды добавляют одну и ту же ссылку на изменяемый объект. Т.к. добавлена ссылка на изменяемый объект, то теперь изменение b приведет к изменению элементов списка a... и теперь это вряд-ли тот, эффект, которого мы хотим!
>Стало быть python это не тот язык на котором можно просто писать, а нужно сидеть и пердолиться в изучение какие еще операторы в каких разных контекстах проявляют не ожидаемое поведение и где ждать подводные камни?
Просто нужно выучить, какие типы - мутабельные, а какие - нет.
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
>ту ссылку, с которой b связанно в момент выполнения append'а
Именно! Само имя в структурах данных нигде не фигурирует.
Например если ты добавил что-то в массив, то по старому имени из этого массива уже не взять, только по индексу. Смекаешь?
>Например если ты добавил что-то в массив, то по старому >имени из этого массива уже не взять
тьфу бля
Ты когда выйдешь из контекста где у тебя определены a b, то всё, имена a b станут недоступны. Только безликий массив c с индексами. Объекты внутри себя уже определяют свои собственные именные контексты. И опять же, если забрать значение атрибута объекта и куда-то его передать, то там куда передали никогда не узнают что когда-то это называлось например a.n.
Анон, надеюсь ты ещё здесь и посмотришь а может кто и другой, кому интересно помочь вкатывальщику измененую версию:
https://repl.it/repls/GiganticCompatibleWebsphere
>Как минимум, чтобы я мог сделать `./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 для пидоров". Насколько это правда и насколько правильно я использовал их в своем коде?
Анон, надеюсь ты ещё здесь и посмотришь а может кто и другой, кому интересно помочь вкатывальщику измененую версию:
https://repl.it/repls/GiganticCompatibleWebsphere
>Как минимум, чтобы я мог сделать `./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 для пидоров". Насколько это правда и насколько правильно я использовал их в своем коде?
Я это не запускал, но выглядит очень круто. Пойду читать про coroutine и все в этом духе. Походу придется повременить с вкатыванием, я ещё слишком low level оказался
>Вот это кстати не понял. Попытался погуглить но выдает from import или yield from, о которых я знаю. А что ты сделал не понимаю.
Он опечатался, там for, конечно же. Суть в том, чтобы иметь original, который настоящий оригинал, а для сокращения кода, если тебе постоянно к одному и тому же ключу обращаться, вынести его в новую переменную, с которой и работаешь (так, как ты работал с original в своём коде).
>кто-то сказал мне "continue, halt, break, go to для пидоров".
Это сказал пидор. %Ну, разве что goto можно понять%%.
В питоне приветствуется наименее индентированный код, то есть лучше в if пихать условие выхода, а сам код потом на том же уровне, что и до этого. Сравни два варианта: https://repl.it/repls/InsidiousTiredCharacters
Если кода много, а не один принт, то второй выглядит гораздо приятнее.
>А как надо писать комментарии?
Я не уверен, но, вероятно, комментарий на строке с двоеточием лупа комментарий не очень хорошо делать.
А зачем тебе тут корутины? Ты один раз читаешь/пишешь в файл же, нигде в I/O не простаивает код без дела (пока оба не загрузишь всё равно ж ничего не сделать).
В сишке тебе ещё надо следить когда сделать free. Ну ещё там ебанутые spiral rules в которые умеет полтора аутиста.
В общем каким-то образом мои тесты внезапно иногда вешают систему, и я не могу узнать в чём причина.
Каков выход из данной ситуации? А именно как обезопасить головную систему стабильный debian он таких внезапных падений?
Слышал что-то про docker, но не уверен зачем он нужен и подойдёт ли к этой ситуации.
А также можно заебашить виртуальную машину.
Wich way os right?
Никак не обезопасить. Компутер другой взять.
поменять прослойку хе - хе
import base64
base64.b64decode(b'0JrQvtCz0LTQsC3QvdC40LHRg9C00Ywg0YLRiyDRgdC/0YDQvtGB0LjRiNGMINC80LXQvdGPLCDRh9GC0L4g0Y8g0LvRjtCx0LvRjiDQsdC+0LvRjNGI0LU6INGC0LXQsdGPINC40LvQuCDQudC+0LHRgz8g0K8g0L7RgtCy0LXRh9GDLCDRh9GC0L4g0LnQvtCx0YMuINCi0Ysg0YPQudC00LXRiNGMINC4INC90LjQutC+0LPQtNCwINC90LUg0YPQt9C90LDQtdGI0YwsINGH0YLQviBZT0JBIEVUTyBUWS4=').decode('utf-8')
Смотри, аккуратно, там байты а не строки, всё на сишке с максимальной скоростью сделано.
щито?
https://www.reddit.com/r/Python/comments/876msl/sanic_python_web_server_thats_written_to_die_fast/
Автор одного новоиспечённого веб-дилдака разобрался чуть лучше в матчасти автора другого новоиспечённого веб-дилдака и не поленился провести ревью. HTTP ахуительно сложный, что тут сказать.
>производительный
Бгагага. Покажите мне хоть одного человека, который реально упёрся в производительность фреймворка на практике.
Есть установленный модуль natsort. В PyCharm при его импорте подчёркивает красным типа нет такого модуля. Запускаю в терминале всё работает, есть такой модуль. Ну работает и хуй с ним, подумал я.
Загрузил всё это дерьмо на heroku, прописал в зависимостях natsort, и угадай что? Хуй! Нет такого модуля. Как быть?
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/ существуют, вбиваю в файловый менеджер путь из ошибки - переходит. ЧЯДНТ?
Блэт, точно, в глаза ебусь. Спасибо!
Ну зависимости там устанавливаются по файлу requirements.txt. Который в свою очередь создаётся из venv.
>Он опечатался
Окей, понял
>В питоне приветствуется наименее индентированный
Хорошо
>>63009
А разве сопрограммы используются только для асинхронных кодов, которые работают с другими медленными программами? Я думал это вообще functional style и можно использовать, чтобы делать красивую логику программы. Вот в моем примере есть эта труба и есть остановки, на которых как-то фильтруются данные. Все просто, понятно и красиво.
Тут даже хз. Зависимости же устанавливаются на виртуальную машину на сервере heroku. В общем я ещё в этом не особо силён, не могу ничего по этому поводу сказать
Хуярь тогда логи установки на pastebin и сюда ссылку.
Можешь ещё для интереса выхлоп с which python3 показать
https://pastebin.com/D3H7KmC3
which python я полагаю нужно на серваке прописать? Ещё не пердолился с ssh, там есть возможность но ещё не разбирался. Сейчас покопошусь.
На моей машине в venv which python:
/home/username/PycharmProjects/HogeBot/hb_virtualenv/hb_env/bin/python
Дело ещё в том, что вместе с natsort устанавливается telebot, в import он идёт выше natsort'a, и его импорт проходит без проблем. Собственно что-то всё-таки в самом модуле, ибо в pycharm он подчёркнут красным, хоть и запускается в терминале, но при попытке запустить из PyCharm даёт ошибку.
Мда. Зашёл в баш heroku. Оттуда бот запускается (хотя только после переустановки pyTelebotAPI. В консоли питона natsort импортируется. В рот ебал
>сопрограммы используются только для асинхронных кодов, которые работают с другими медленными программами?
Сопрограммы это и есть асинхронный код. Не медленными, а ожидающими чего-то, давая возможность освободить ресурсы для полезных задач. Или когда порядок действий / время получения входных данных неизвестно.
>Я думал это вообще functional style
Даже если бы это он и был, нафига тебе эта функциональщина? Илитарием побыть?
>есть остановки, на которых как-то фильтруются данные.
В каком плане остановки? Процессор не простаивает во время фильтрации. У тебя каждая итерация каждой корутины будут идти по очереди. https://repl.it/repls/MatureFarawayModule
>Все просто, понятно и красиво.
Красивенько, согалсен, и так-то малаца, но вот начсёт первых двух применительно к этой задаче я бы поспорил.
Твой код приходится читать с конца в начало: в пайплайн передался путь -> смотрим, что такое этот пайплайн -> validate_csv -> там какому-то ресиверу что-то отсылается -> возвращается в вызов validate_csv, смотрим что ему было передано -> extract_from_csv -> там то же самое -> update_commands. А вот вызываются они все последовательно.
Вот у тебя запускаются несколько корутин, ресиверсы всякие, ты туда-сюда сообещния с данными передаёшь, причём в заранее известном порядке всё происходит. Но зачем? Ты с тем же успехом мог бы вместо receiver.send() сделать обычный вызов функции: https://repl.it/repls/FussyObedientEmacs
(пикрелейтед сравнение последовательности вызовов, видно некоторое сходство.)
Немного говнокод, потому что я старался внести как можно меньше изменений в твой.
Это лишь моё мнение, разумеется, и местные сеньоры и сеньоритты вполне могут оказаться правее.
Двач-помогач, тут нужно интерфейс для одной проги запилить, мб кто знает годные гайды по pyqt5? В гугл могу, но хорошего материала как-то не нашёл
посоветуйте пожалуйста годную статью по созданию приложения командной строки на питоне, где обьясняется как работать с аргументами командной строки. желательно по англицки. но на русском тоже сойдёт если годнота.
блять спасибо
Объясню для дауна.
Понятно, ты в цикле доливаешь в один и тот же стакан, а потом хочешь плеснуть в другой.
Но ведь есть простой и сверхочевидный (для не-дауна) способ: когда цикл закончится начни следующую команду с перевода каретки замены стакана.
Аноны, помогмте! Можно ли как-то с pyinstaller вшивать батники в готовый ЕХЕшник и оттуда их, соответственно, запускать?
Я практически то же самое и сделал же, просто вместо пустой строки переместил последний символ. Я-то думал, это можно было в той же строке сделать, так сказать, подставить сразу новый стакан на следующей строке, а вы подставили второй стакан, чтобы туда капнуло последний раз, и после этого идете брать третий.
>Я-то думал, это можно было в той же строке сделать, так сказать, подставить сразу новый стакан на следующей строке, а вы подставили второй стакан, чтобы туда капнуло последний раз, и после этого идете брать третий.
Нет, это ты капнул последний раз (точкой) и поменял стакан. В нашей аналогии перенос строки это смена стакана. print() не делает ничего, кроме переноса строки.
print("abc") == print("abc\n", end="") == print("abc", end=""); print().
И третьего стакана никто не берёт, откуда ты это выдумал?
>Я-то думал, это можно было в той же строке сделать
У тебя одна и та же строка кода выполняется много раз, каким образом компьтер должен догадаться, что в последней итерации нужно что-то другое сделать? Либо все принты в лупе с переносом, либо все без.
>просто вместо пустой строки переместил последний символ.
И зачем? В следующий раз, при получении неизвестной тебе строки, тоже сделаешь for i in string[:-], а после лупа print(string[-1])?
Подскажете позязя, как из строки
"sfdsfsdfsfsjiaud ifu afu afual"
взять все что находится между двумя звёздочками?
сэкономите мне целый день чтения аноны)))
Ни один из них не являются программистами. Уже хотя бы потому, что никто из них не создаёт программы, откуда пошло название.
Это кодер, ПМ и, скажем, архитектор (или дизайнер). А программист это они все вместе.
>И третьего стакана никто не берёт, откуда ты это выдумал?
Третий стакан — это новая строчка с принтом.
Вот вы пишете:
1. print(i, end = '', flush = True)
2. print()
А третий стакан:
3. print('New string')
То есть три раза один хуй надо писать.
Но я вас понял, спасибо за пояснения. Вообще я ожидал, что print() выведет лишний пустой абзац, и придется еще и с этим ебаться. Оказалось, что не казалось.
спасииибо
>А третий стакан:
Так ты откуда и что считаешь-то, ёба? "New String" зальётся во второй стакан, и только после этой строки подставится третий. В твоём коде всё то же самое ведь, ещё раз говорю. Твои print('.') вне лупа это то же самое, что print('.', end="") в лупе с последующим print() вне лупа.
>придется еще и с этим ебаться. Оказалось, что не казалось.
С чем ебаться?
>Так ты откуда и что считаешь-то, ёба?
Первый стакан: принт, входящий в фор, основной принт, так сказать.
Второй стакан: принт без нихуя, в который сливается последняя капля end=''. Как с члена стряхнули напоследок.
А третий да и все остальные — все, что принтится после.
>В твоём коде всё то же самое ведь, ещё раз говорю
Так а нахуй ты тогда так категорично заявлял, что я хуй, если я по факту проделал то же самое, но не дотянул чуть-чуть буквально до окончательного решения?
>С чем ебаться?
Да я думал, придется видоизменять до уровня print('', end='\n'), но это одно и тоже, да и пустой абзац там никак не мог появиться.
Как насчёт просто не копипастить файлы бутстрапа? В чём проблема?
>Второй стакан: принт без нихуя, в который сливается последняя капля end=''. Как с члена стряхнули напоследок.
>А третий да и все остальные — все, что принтится после.
НЕТ. Почему ты такой дурак? Или изъясняешься очень криво. Принт без нихуя, следующий за принтом с end="", делает только перенос строки. Т.е. он добавляется \n к первой строке / убирает первый стакан (подставляя второй для последующих принтов). Следующий за этим принт нальёт текст во второй стакан.
Перенос строки (смена стакана) всегда находится в конце строки. Так что, когда напечатана "целая" строка текста, она имеет в коцне перенос строки. То есть, смена стакана всегда производится не перед наливаением воды, а после. Как посуду ты помешь не перед едой, а после, чтобы потом, когда захочется есть, тарелка была чистой.
>Так а нахуй ты тогда так категорично заявлял
Потому что ты хуйню какую-то, а не решение сделал. В чём была твоя проблема? Нет переноса сторки. Что нужно сделать? Очевидно, просто сделать перенос строки. Но ты пошёл каким-то ебическим путём с распиливанием исходной строки текста.
>распиливанием исходной строки текста
, что заставляло думать, что ты нифига не понимал ни собственно проблемы своей, ни того, как print работает, хотя это несколько раз повторяли.
Но относительно живой, и где не жалко показаться дураком.
Относительно отучил основы питона, кое-как понял суть ООП, запил пару говнокодов, которые порой выручают в повседневной жизни.
Куда идти дальше? Пытаюсь уже которую неделю освоить ХГУЙ, но после пары часов ошибок вся мотивация пропадает. Мог бы решать на codewars или ещё где задачи на алгоритмы, но...
Язык первый был ещё cpp, но его забросил из-за личных переживаний. Начал именно этот учить в связи с разработкой одной игры на pygame. Будто между шагами понимания базы и написанию гуёв должна быть ещё ступень, которую пропускаю.
Куда поворачивать?
Привет сап.
Учусь на втором курсе относительно неплохого вуза.
На данный момент по программе идёт с++, до этого был Паскаль и с.
Стоит ли потихоньку скатываться в питон?
Кресты потихоньку надоедают.хотя в Питоне меня выбешивает отсутствие фигурных скобок для обозначения блока кода, привык, наверное
Не прошу советовать с чего начинать и етц.
Нужны лишь советы по типу за и против, т.к. если что я сам шапку на гите прочитаю.
Ты в чём ГУИ пишешь? Там что не гуи под питон, сплошное ООП, туда и копай. Ещё event driven программирование, наверное.
Ты можешь не потиху скатываться, а попробовать написать что-то небольшое, но до конца рабочее на питоне. Если понравится, будешь продолжать. Не понравится - питон пригодится, чтобы какой-нибудь скриптик для себя написать.
А что на нём можно написать?
инб4 всё
Хотя лучше так: что на нем делается проще, чем на крестах?
сам процесс разработки другой. Более динамичный. Ты как будто бы превращаешься в макаку.
Код можно запускать через MinGW? Я просто в VS Code пишу.
> Не медленными, а ожидающими чего-то
Ну, скриптам, которые ожидаю что-то от чего-то медленного, и во время этого ожидания могли бы что-то сделать.
>даже если бы это он и был, нафига тебе эта функциональщина?
Шоб была. Это же просто стиль программирования, которым надо владеть так же как и объектным.
>В каком плане остановки?
В плане структуры программы. Есть остановка на которой отбрасываются неверные пути, есть остановка на которой из верных файлов берутся только правильные команды и т.п. Я понимаю, что процессор не стопиться и корутины идут по очереди.
>но вот начсёт первых двух применительно к этой задаче я бы поспорил
Принял, подумаю над этим.
Спасибо за ответ, чет вчера ещё прочитал но не ответил сам.
Пробовал tkinter, pyqt, kivy, остановился на последнем.
В твоем примере я бы ожидал увидеть класс деревня, в котором есть список объектов (вероятно, тоже классов) - жителей и методы - события. Это модель.
Реализация модели заключается в создании объекта класса и обращению к его методам и пользовательскому вводу.
Преимущества очевидны - когда ты захочешь добавить в игру еще одну деревню - это займет всего одну строчку кода. А если захочешь добавить немного другую деревню - отнаследуюшься от уже имеющейся и переопределишь пару методов.
ХЗ, понятно ли я объяснил...
Класс хорошо создавать когда какой-то набор данных у тебя кочует всей пачкой из функции в функцию.
Магические методы ни для чего более не нужны, кроме как для неявного вызова в естественных для питона конструкциях. Например определяя --enter--, --exit-- ты сможешь объект использовать в конструкции with. Определяя --add-- сможешь делать сложение obj + obj. Собственно потому они и называются магические. Остальное пишешь явно с именами которые тебе нужны.
Прогай и понимание придёт. На это может потребоваться 1 год.
>Определяя --add-- сможешь делать сложение obj + obj
Объясни пожалуйста. Я хочу сравнить два объекта, но не их адреса а именно что логически объект одно и то же, что мне для этого надо сделать? Так же если я хочу чтобы образцы класса который я написал можно было сравнить таким макаром. Как мне это нужно написать?
большое спасибо
>unittest
>модуль из стандартной библиотеки
>assertEqual вместо assert_equal
Пиздец. Да, я знаю что интерфейс унаследован от Жавы, но блять, нахуя было наследовать камелКейс, когда в Пиздоне другой стандарт именования методов?
Как, блять, с этим жить?
inb4: менял кодинг на UTF-8 в котором раньше и работал - не помогло
попаболь
Ну так портируй весь Adobe на линукс, мань. С радостью перекачусь на какой-нибудь Арч или Дэб
Windows хорошая ОС. Там есть асинхронное файловое IO вместо невнятного обрезка которым никто не пользуется. Там нет этого глупого безальтернативного fork, который копирует весь процесс, потом на его месте раскочегаривает новый в большинстве случаев, удаляя всё что было от предыдущего.
>Документация на английском
>нужна лицензионная IDE для работы с джанго
>дохуилион библиотек
>из них 20-30% либо с багами, либо с недописанной документацией
>пикрил >>64086
>дохуя документации на 2.7, а вот на тройку ещё только на английском
>отвесты с стэковерфлоу придётся адаптировать с 2.7 на 3, если только их не ответили тебе
Как-то так...
Ах да. Ещё ты научишься пользоваться консолькой винды, а так-же можешь найти серию познавательных книг по питону и сетевой безопасности, 2016-2018 годов in english, of course
>на английском
Не проблема.
>на 2.7, а вот на тройку ещё только на английском
Через 2 года заканчивается поддержка, 2. Попахивает пиздежём. Ну разве что главный аргумент в том, что англюсик.
>нужна лицензионная IDE для работы с джанго
Куплю версию с китайским сервером лицензирования, если ты про пайчарм.
> Там есть асинхронное файловое IO вместо невнятного обрезка которым никто не пользуется
Проиграл на всю квартиру. Что ещё спизданёшь?
Анон, не у всех с инглишем хорошо. Я очень часто сталкивался с моментами, когда мои коллеги по проекту или тиммейты не могли в английский. Всё-же, делаю поправку и на это.
Лол, когда ты в последний раз писал что-то незнакомое на незнакомой библиотеке? Я конечно только джун, но даже разговорный инглиш меня не спасал в некоторых случаях. Теперь веду vocabulary заточенный конкретно под меня. Крч, иногда это полный пиздейшен, хоть в петлю лезь
>Куплю версию с китайским сервером лицензирования, если ты про пайчарм.
Да вот блядский пайчарм маслины баги ловит. Там выше пикрил про это и я лишь надеюсь что поможет переустановка. Словами не передать, каким маленьким было моё очечо когда я прикинул что кодинг может из-за автосейва похерить весь проект, над которым я откровенно ебался в мозг последние недели две нейронка-пилот для KSP. Благо Atom показал что всё норм.
Командная строка, cmd, bash, shell, whatever — сами являются процессами-интерпретаторами, как и питон. Subprocess дёргает апи системы чтобы спавнить процессы. А уж что запускать решаешь ты, можешь просто прогу стартнуть, можешь cmd.
Это твоя хуйня с кодировкой там? Скинь файл, можешь порезать его, если не секьюрно, попробую пошаманить.
А что толку? Это во всём пайчарме. Причем, с момента когда я его в последний раз закрыл, ничего не менял в IDE. То есть это именно тот случай когда оно само даже на вводе нихуя не отображается нормально.
Ну и в добавок
>нужна лицензионная IDE для работы с джанго
Если ты действительно зарабатываешь разработкой, то 9$ в месяц - не деньги.
>нахуя было наследовать камелКейс, когда в Пиздоне другой стандарт именования методов?
камелКейс - лучший метод наименования. Прув ми вронг.
Орнул_с_подчеркнутого_дауна
но андескор всё таки говнянее
Да похуй блять, вебрлюд или андерскоры, главное чтобы их не миксовали, хотя бы в стандартной, сука, библиотеке.
Был час в гугле, там дают только базовую хуйню, про структуру маловато инфы
два-чаю-этому
При чём тут кложур? Это же в самых бородатых лиспах ещё придумали.
Вовсе не мешает, надо все в интеджерах считать, это любого языка касается, не 1.48 рубля, а 148 копеек, не 1.4 см а 14000000000000000 микрон, и так далее.
d[True] = 2
d[1] = 3
print(d[True])
"Пичот" только у залётных типа тебя, все остальные уже давно привыкли к даунам.
Алсо, питонисты, только я один никогда не сталкивался с проблемами из-за этого?
> у питонистов.
> тот же самый стандарт флоатов используется в куче других языков
> абсолютно все ЯП имеют проблемы с точностью флоатов
> у питонистов
От тебя воняет уже.
Хуйня какая-то, видимо
Ага, ведь ассемблер складывает числа не процессором как убогие языки, а МАГИЕЙ.
хелловорд 64 битный статически линкованый на асме весит 352 байта, сколько байт весит питоно или даже C-хеловорд?
Скомпилированный - 118 байт.
Обоссал буквального байтоеба.
Записки идиота какого-то, очевидно. Либо ты не прочитал сопровождающее описание, где он приводит оправдания, почему не смог написать по два слова на строку. Сложение ассоциативно, а вычитаение это всего лишь сложение с отрицательным числом, так что между ними в принципе и разницы-то нет, переставляй как хочешь.
Специально для тебя нашёл пасту, сохранённую в 2009 году из дискуссии в /c/ нульчана.
> то, что все это будет тратить системные ресурсы, время и трафик.
Видишь ли, ввиду того, что архитектура Винсока слоистая, любая операция в принципе проходит по каждому сервис-провайдеру (LSP).
Естественно, в таких условиях создание сокета (а при ассепте как раз создаетс еще один сокет) это весьма долгая операция. Для этого МС придумала все эти ваши костыли с кондишнал ассепт и *Ex() функции.
В БСДе же принять и сбросить коннект будет весьма и весьма быстро (как кстати и создать поток. На винде потоки создавать тоже относительно долго).
> IOCompletionPort.
Говно этот иосп. Потому что он полностью оправдывает свое название - ИО комплешн порт. Если бы ты удосужился почитать о всех фишках kevent, ты бы понял, что эта штука гораздо функциональнее и быстрее чем твой IOCP, который, кстати, еще и с нихеровым оверхедом.
> Ты не против в том же треде показать аналог виндового xperf?
Ты не понял, что я имею ввиду. Я не собираюсь меряться с тобой всякими апишками. Я просто сказал, что все ОС какбы разные (sic!) и апи у них тоже какбы разные.
Другое дело, действительно ли это полезные апи, или это просто костыли, чтобы заставить систему работать сносно. Это о примере выше.
у меня такое было когда я установил LibreOffice
assert
pyenv or virtualenv
>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 который нигде как надо не работает и тупо блокирует. Файл дескриптор который для файлов и "файл дескриптор" который для сокетов в ядрах никсов оказывается очень разные вещи.
При условии что сервер отдает с не меньшей скоростью, чем скорость моего канала
Но в туториалах пишут что threading нормально работает с сетевыми интерфейсами, GIL не мешает
Ну тогда тебе остается только грамотно всё реализовать, чтобы не упереться в ограничения...
Напиши асинхронный http сервер сохраняющий файлы через PUT, удаляющий через DELETE и выдающий содержимое через GET. Без aiofiles. В качестве бенчмарка 10к очень медленных клиентов со скоростями уровня WAP/dialup. Тогда приходи и ещё поговорим.
Браузеры обычно держат небольшой конекшен пул под каждый домен, чтобы не останавливаясь качать в моменты затупа HTTP1. Для HTTP2 больше одного конекшена вообще не нужно, там мультиплексирование. Многопоточность тебе нужна если делаешь на блокирующих вызовах. Можно альтернативно взять aiohttp.
Маня не слышала про мои DMA?
Блядь, пиздец ты дискуссию ведёшь, с одной темы прыгаешь на другую, не удалось в одном уесть - сразу про другое. Такое ощущение, что я на хуёвом собеседовании, ещё скажи, что ты мне перезвонишь.
Ну это ещё кто из нас с темы на тему прыгает. Факт остаётся фактом: в асинхронном питоне файлового IO нет и не будет. Большей частью именно из-за несовершенства ядер.
Список твои аргументов:
>на kqueue тоже можно сокеты и он может потягаться с виндовым iocp
>есть inotify, можно знать когда кто-то другой трогал файл
Я же тебе конкретно ткнул в http://man7.org/linux/man-pages/man7/aio.7.html , а ты продолжаешь прикидываться ебобо как ни в чём не бывало. Даже наводящую задачку придумал, нихуя, эффекта ноль. DMA блядь, пиздец, что несёт, вообще охуеть. То что ты немного почитал про интерфейсы ядер и DMA это похвально, но ты точно переоцениваешь уровень своих знаний.
ПЕРЕКАТ ПЕРЕКАТ ПЕРЕКАТ ПЕРЕКАТ
ПЕРЕКАТ ПЕРЕКАТ ПЕРЕКАТ ПЕРЕКАТ
>>1164614 (OP)
>>1164614 (OP)
>>1164614 (OP)
Это копия, сохраненная 17 мая 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.