Это копия, сохраненная 26 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1954138 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Исходник: https://dumpz.org/bASGKD8cCFDf
Скрипт по сути что делает: принимает некий текст, сплитит его по заданному ключу, посылает запрос на API, сообразно с ответом оттуда переделывает кусок сплитнутого текста, потом джойнит эти куски текста из массива в строку и её возвращает. При этом await, естественно, к запросу на API присобачен. Спрашивается, как так получается, что куски текста по итогу оказываются склеенными в нужном порядке, если запросы на API, без которых невозможно начало их переделывания, посылаются не по порядку? ЯННП.
Лучше бы код скинул, конечно, но вероятно джойнит куски он в конце, когда все ответы получены, а запросы из-за асинхронности делает по сути одновременно
>Че там по питону 4 есть какие-нибудь задумки? Что вообще планировали в него выкатить?
Питон 4 не планируют выкатывать вообще. В этом нет необходимости. Будет 3.10, 3.11, 3.12 и так далее.
Цель третьего питона была даже не в том, чтобы много нового принести, а в том, чтобы убрать мешающее старое.
Сейчас это не актуально.
Вероятно-то оно вероятно, но хотелось бы понимать, что это за вундерваффе.
Сейчас я ещё больше удивился, потому что рераны теперь показывают вдвое большее время исполнения. Хотя, тут, может, API искусственно снижает пропуск.
Код не покажу, потому что там жесть.
Выполняешь через asyncio.gather? Возвращает в том же порядке, в котором и передавал. В этом и фишечка
Он мечтает чтобы как в жабе. 8, 10/11/ хуяк 15
Подскажите вот какую вещь.
У меня есть приложение на flask.
Оно развернуто на VPS с Ubuntu, с использованием Gunicorn и Nginx. Классика, крч.
На сейчас я просто делаю git push со своего ПК, потом на VPS nginx stop и git pull.
Т.е. мне каждый раз приходится останавливать работу приложения.
Как можно выкатывать обновления без остановки приложения?
Я видел разные статьи по CI/CD пайплайнам, но, как я понял, это даёт только автоматический git push после прохождения тестов. А это не совсем то.
Подскажите что гуглить, что посмотреть.
Спасибо!
>Подскажите что гуглить
Zero downtime deployment, blue-green deployment, rolling update without sms and registration
Разные коннекшены под каждый запрос. Хоть сто раз перекрути порядок, всё вернётся через колбэки как надо.
Хуками чего только не называют. Обычно это такой костыль сбоку, позволяющий вызвать твой код в какой-то ситуации.
Тебе нужна хитрая прокся, nginx скорее всего только в платном варианте плюс так умеет. В момент деплоя подняты две версии одновременно и прокся все новые конекшены переваливает на новую версию. Дальше ждёшь когда старые конекшены отвалятся и гасишь старую версию. В кубернетесе эта херня из коробки есть, даже без nginx plus.
>а в том, чтобы убрать мешающее старое
Поэтому в либах до сих пор проверка на версию питона идет?
Хорошо пошутил.
Тебе стоит хоть на что-то пересесть с маминой шеи.
почему питон связывают со смей если его назвали в честь монти пайтона?
На связи фуллстек макака: питон (aiohttp/sanic) + жс (ангуляр)
9 месяцев назад вкатился, сейчас думаю менять работу чтобы не застрять на одном месте (и апнуть зп конечно же). Как посоветуете выбирать проекты, чтобы не продаться за дешево или не сесть за неликвидное гавно?
буду также идти фуллстеком пока либо только в бэк, как получится
Ангуляр и питухон? Это где такое просят?
Общался тут по поводу нейронки, ребята на Django/Flask все нахуячили и продают. Я хуй знает что советовать. У меня одни ожидания, а по факту FastaAPI который я более менее знаю нахуй никому не всрался. Сижу пердолю интеграции-эмуляции.
Смотри че там у Яндекса по стеку, они питон любят.
Этот чорт больше не имеет право голоса. Лучше бы посмотрел как perl 6 делался. Никаких секс утех с совместимостью. Просто новый язык, а гвидо не смог так
Заебись сделался - пятый за это время помер, а эта хуйня никому не нужна изначально.
статистика по ХХ за неделю, ДС
6 вакансий «sanic»
25 вакансий «fastapi»
47 вакансий «aiohttp»
52 вакансии «asyncio»
97 вакансий «flask»
184 вакансии «django»
2 247 вакансий «python»
Причём в случае fastapi и некоторых других там больше через запятую.
Джанго свой индустриальный фреймворк, это одна песня.
Flask по-прежнему популярен только потому, что у асинхронных фреймворков ПОКА тяжеловато с ORM, соответственно там сложно делать что-то, что использует сложные SQL базы под собой.
Вот когда логика больше не на SQL завязана, тогда асинхронные фреймворки уже стреляют прилично.
ну ты и бык, ну ты и торч!
Официальная пока в стадии бета-тестирования, версия 1.4.
Есть какие-то левые оболочки, где асинхронные интерфейсы к синхронной алхимии, то есть там через thread executor как-то это поддержано всё.
Нет прямой связи. Людям хочется юзать что-то простое. Перл с первого взгляда никогда не был простым, хотя на деле не сложнее крестов, просто с парой фич.
Ты даже не запустишь простой пример perl 6 на perl 5
Зато в питоне в модулях вставки
if sys.version_info >= (3, 0)
вот это современно, вот это классно.
>Зато в питоне в модулях вставки
>if sys.version_info >= (3, 0)
Если модуль старый, то что делать, тогда актуально было.
То есть проблема в том, что пытались поддерживать две ветки сразу.
Без этого бы не было уже произошедшего массового перехода на 3. (который даже так происходил весьма туго)
Пиздец, как можно этого не понимать?
VScode на электроне, Sublime (платный), Atom(платный), VIM(учишь дольше чем питон)
Вместо нативной программы делают бандл хромиума с скриптами на жс. Жрет ресурсы оно соотвтетствующе.
А вот я и вижу дегрода с плутора извилинами который не может спиратить Professional PyCharm / WebStorm
>Чем же там "гавно"?
>АХАХАХ ДА ТЫ ЖЕ ЖИДБРЕЙНС ЮЗАЕШЬ)) ГОВНА НАВЕРНУЛ АХАХАХА
>Нет, ты нормальным языком можешь пояснить, что там не так?
>ЯРЯЯЯ СЛИЛСЯ! СЛИЛСЯ! ГОВНОПОДЕЛИЕ ЗАКУПИЛ И СЛИЛСЯ АХАХАХА
Господи за что, есть таблица в бд, но в ней нет колонки id, я удалил миграции, создал заново инитную, в ней написано что у таблицы есть id, пытаюсь мигрировать, но колонка не создается, в бд не появляется, пишет что все окей, дропнул таблицу, все равно пишет все окей, все нормально, как с этим бороться?
Это говно не умеет активировать интерпретатор на удаленной машине, если она на Windows. Нахуй надо. И для каждого языка своя среда.
Поясняю.
Индексация проекта отжирает кучу ресурсов.
Фоновые процессы работаю, которые мне не нужны.
Полное отсутствие модульности. Вот поебать что ты не пользуешься встроенным db navigator, т.к. он убогий, он будет висеть.
Без принудительной ревалидации кеша - никуда.
Порой просто не в состоянии найти модуль в проекте.
Ломается модуль - ломается ide.
Ну и самый смак. 90% этих иде содержат один и тот же функционал. Ты скачиваешь одно и тоже, за исключением автокомплита и анализатора, которые теперь выносят в ls для любых редакторов, для любых языков.
>интерпретатор на удаленной машине
>если она на Windows
Проблемы админского говна любого нормального разраба не ебут. Обмажься своим вимом, отойди в сторонку и не мешай Big Guys разруливать проблемы
Какой самый лучший способ перебрать несколько элементов для проверки, кроме if some_element in list and other_element in list and another_element in list?
В общем судя по всему это просто баг, до сих пор не понимаю как именно иногда получается создавать pk на onetoonefield, но чаще джанго начинает ругаться что id столбца нет и самый простой вариант это назначть дефолт и убрать в файле миграции этот дефолт и потом мигрировать
>JetBrains
>BigGuys
>На каждый язык та же хуйня на жаве что и IntelliJ
>неоптимизированный комбайн тащит за собой логику для Java IDE
>ряяя топчег за свои деньги
говна наверни, макака
Ты из тех "у меня на локальной машине работает, мне норм".
Создал класс с init методом. Дальше в коде делаю так
card = Bank(a, b)
(a,b - инпуты) А можно ли сделать, чтобы если я заново ввожу этот инпут (в вайл тру) то создавался новый экземпляр, а не перезаписывался старый.
Есть класс один.
class A:
_pass
class B:
_def __init__(self, args, *kwargs):
__self._own = A()
Мне нужно не меняя класс A, дополнить его, чтоб везде, где он использовался, он был расширен парой методов и переопределены пара существующих.
Наследоваться, дополнить и заменить везде не могу по причине, что не могу поменять импорты. Выносится в отдельный модуль.
Да, импортируй его у себя, замени, а потом последующие импорты уже берут оттуда.
Он под скрамом
Нет, не быстрее. Твоя бизнес-логика перекроет на несколько порядков быстродействие фреймворка. Хоть ты на чистом си напиши фреймворк с миллионами попугаев в секунду, всё это быстро станет ненужно.
1) открытие cтандартной IDLE для питона
2) открытие пыхчарма
3) открытие индусского учебника
В общем виде bat файл выглядит вот так:
call "C:\Users\Nananan\Desktop\IDLE (Python 3.8 32-bit).lnk"
call "C:\Users\Nananan\Desktop\ A_Byte_of_Python_Rus_2.01.pdf"
call "C:\Users\Nananan\Desktop\PyCharm Community Edition 2020.1.2.ink"
Но открывается только IDLE, хотя остальные пути прописаны в таком же синтаксисе. При этом добавляя про оставшиеся два путя, что не они являются внутренней или внешней командой. Как сделать так, чтобы все 3 сценария запускались?
Там явно не call, а что-то другое было всегда.
Алсо, используй всякие шорткаты для путей вместо полного, разные %шиндовс% там есть и т.д.
Это операторы cmd, я понимаю. Я уже юзал несколько, но 0 КПД. Мб дело в самих файлах. Хз. Помогите кто-нибудь
Какие словари?! Во-первых есть NamedTuple, во вторых
BankFactory:
objects:List[Bank]=[]
@classmethod
def create_new_obj(arg1, arg2):
bank = Bank(arg1, arg2)
objects.append(bank)
Nested/inner class или просто импорт, похую
class Bank:
def __init__(a,b)
self.a=a
self.b=b
Дальше просто вызываешь BankFactory.create_new_object(a,b)
Подобное можно и на обычном нжинксе реализовать, довольно просто. Сам так на РАБоте сделал для проекта, полет нормальный.
https://github.com/DefaultPerson/wefwgfwweg/wiki/Вебразработка,-стек-python,-django,-flask,-js
Ну и если план говно обосрите и предожите как исправить.
Причем тут инстанс, если ему класс нужно изменить.
Для себя подчерпнул пропущенные моменты, спасибо, правда есть мнение, что лучше после изучения питона перед бд, вебом, фреймворками и гитом изучить линукс, очень много проблем отпадет, вспоминаю как на винде ебался с mysql по началу, страшно представить, какие-то окна непонятные, какие-то подключения и тоже самое с гитом, пока не понял что такое терминал было страшно с гиту подступать. Так же читать книги в запой я думаю очень глупо, сначала учишь основы, узнаешь в общих чертах о возможности(типа асинхронность), а уже когда придет подходящая задача идешь в документацию и гуглишь всю реализацию. А читать с нуля книги, кроме укуса питона не стоит имхо, это скорее справочники, особенно забавно где-то видел в начале книги страниц 49 по импортам в питоне, а человек скорее всего даже пару месяцев не будет вообще ничего импортить и в итоге забудет напроч
У нгинкса проблема в том что если апстрим недоступен, нгинкс падает полностью. И dns resolve апстримов присходит только один раз при запуске/перегрузке конфига. Уж лучше траефик какой-нибудь.
Ну я и указал что книги можно не читать, я вообще обычно пролистываю и записываю важные части, не особо вдумываясь, чтобы потом прочитать и понять. С линуксом радикально решил, переехал на коляску сначала, сидел на ней месяц, потом накатил арч+i3 и поебался с настройкой, думаю файлик как че делал тоже на гит запилю.
Хз на счет настроек, я один раз накатил убунту и в ней хватает всего абсолютно, разве что грузится дольше винды по ощущениям, так что всем начинающим советую просто ставить 2-ю ось убунту и копаться в терминале, станет гараздо понятней и как ос работают и как с программами можно взаимодействовать
Ну хуй знает.
Десктопный линупс это ебля с установкой-драйверами и с иксами. Самое бесполезное практикующему девелоперу.
А что ты потом запустил тот терминал, что путти, разницы нет.
Запускаешь себе виртуалбокс бриджем и дрочи тот линукс сколько влезет без лишней шелухи.
Хук это не обёртка, это совсем другое.
Обёртка это декоратор. Или middleware в терминологии веб-фреймворков. Декоратор подволяет сделать с данными, которые куда-то передаются, перед вызовом, и с результатом после. При этом функция, которую ты вызываешь, ничего про твою деятельность не знает, это не её забота.
Хук принципиально другое, хук проектирует разработчик, он вставляет специальную функцию внутрь кода, которую ты можешь при желании вызвать и тем самым вмешаться в процесс выполнения.
Декоратор - снаружи. Хук внутри.
А их нужно сравнивать? Регистрация хука может быть выполнена в виде декоратора. Хук чаще всего это такой слот, в который ты можешь вставить свой код, но слово общее и точного определения нет. Примерно из той же оперы что entity, helper, handler, слова которые почти ничего не значат.
>VIM(учишь дольше чем питон)
Неправда. Чтобы просто редачить текст с минимальным конфигом - достаточно одного/двух вечеров. в моем случае правда потребовалась неделя, ибо у меня деменция.
Делать из вима полноценную ide затея конечно сомнительная. Очень многие люди просто накатывают вим плагин поверх любимой идешки. У меня вот и вскод и пичарм с вим плагинами. Зачем? -Быстрые замены, удаления, правки текста и вот это вот все... Ещё на сервере править конфиги вимом куда удобнее, чем нано. Многие вещи в нем сделаны действительно очень классно, рекомендую кароч!
без джса, реакта, вью и прочей поебени этой
>Как вкотиться в удаленку на питоне и есть ли вообще шансы найти её при условии, что знаю питон и джанго/фласк?
Без бекграунда в офисе почти никак, джуны на удаленке нахуй не нужны
Какие шансы вкатиться туда?
я работал в веб-студии, хорошо шарю в вебе как сеошник, верстала и тестер.
или ваще вкатиться в пхп и ларавельку и через месяца 3-6 уже брать заказы на апворке и быть миллионером?
Типа, ты пишешь, что x = 1 и y = 1, а потом удивляешься id(x) == id(y) возвращает True? Дело в том, что числа в питоне это неизменяемые объекты, он не создает две разные единицы, обе переменные, x и y, они ссылаются на один и тот же объект, число 1. Вот если ты напишешь x = [] и y = [], то id(x) == id(y) будет False, потому что списки это изменяемые объекты, и питон два раза создаст новый список.
Вм при старте инициализирует часто используемые числа, вроде до 250 или где-то так. Попробуй с большими - такого не будет.
Там сложнее с тем, как область видимости устроена. Почитай про mro и т.п.
Суть в том, что у тебя есть переменая класса, например balance
У тебя есть объект, класс Bank. Это тоже объект, у него есть свои переменные, balance и другие.
Ты используя этот класс создаёшь новый объект
b = Bank()
например
Это другой объект типа Bank, у него свой набор переменных.
Если в b у тебя не определена переменная balance, и ты обращаешься к ней, то питон сначала лезет в переменные b. Он видит, что переменной с таким именем не определено. Тогда он дальше лезет уже в класс Bank, и берёт переменную оттуда.
То когда ты записываешь в переменную, пишешь код
self.balance = 100
то питон смотрит объект b, и если там нет этой переменной, то он не лезет наверх, а создаёт переменную с таким именем в объекте b
Метод не статический, тебе нужен уже существующий объект
>1968982
Да, ты прав, просто в одном проекте чёт написал на ооп, но сам не до конца понял, как это работает
>Bank.create_card()
Тебе надо почитать про объекты в питоне. Доля магии есть, вот с наследованием, разрешением имён и т.п.
В целом же всё просто.
вот у тебя есть класс Bank
class Bank:
....
____def print_balance(self, text):
________print(text, self.balance)
my_card = Bank(balance = 10000)
И my_card, и Bank это объекты
запись
my_card.print_balance(some_text)
эквивалентна записи
Bank.print_balance(my_card, some_text)
в обоих случаях происходит одно и то же, вызывается функция
print_balance
первым элементом, который self, передаётся my_card, дальше остальные параметры.
Дальше начинается магия питона, что происходит, если в self не определена какая-то переменная. Тогда он лезет в другие объекты, чтобы её достать для чтения.
Если ты хочешь записать что-то в переменную именно класса, а не объекта, созданного из класса, то тебе надо обращаться как
Bank.balance = 666
Изнутри объекта ты можешь делать что-то вроде
self.__class__.balance = 6666
Лучше про это почитать, чтобы лучше понимать, что происходит там. Не понимая ООП не освоишь.
>Bank.create_card()
Тебе надо почитать про объекты в питоне. Доля магии есть, вот с наследованием, разрешением имён и т.п.
В целом же всё просто.
вот у тебя есть класс Bank
class Bank:
....
____def print_balance(self, text):
________print(text, self.balance)
my_card = Bank(balance = 10000)
И my_card, и Bank это объекты
запись
my_card.print_balance(some_text)
эквивалентна записи
Bank.print_balance(my_card, some_text)
в обоих случаях происходит одно и то же, вызывается функция
print_balance
первым элементом, который self, передаётся my_card, дальше остальные параметры.
Дальше начинается магия питона, что происходит, если в self не определена какая-то переменная. Тогда он лезет в другие объекты, чтобы её достать для чтения.
Если ты хочешь записать что-то в переменную именно класса, а не объекта, созданного из класса, то тебе надо обращаться как
Bank.balance = 666
Изнутри объекта ты можешь делать что-то вроде
self.__class__.balance = 6666
Лучше про это почитать, чтобы лучше понимать, что происходит там. Не понимая ООП не освоишь.
>card = Bank
Пиздец, питонотред - сборище самых тупых долбаебов. Даже не какие-то непонятные/странные ошибки.
Тоже с этой хуйни проиграл
Насмотрятся рекламы от айти инфоцыган на утубах, а потом лезут сюда
> У нгинкса проблема в том что если апстрим недоступен, нгинкс падает полностью.
Антош, антош, смотри шире.
+ Не совсем так
>Уж лучше траефик какой-нибудь.
Юзай, никто ж не запрещает. Чем-то, наверное, и трафик лучше.
card = Bank()
Даже обидно, сам недавно забыл в одном месте скобки поставить и минуту не мог понять в чем дело
да там и переменные класса используются, он явно решил не читая ничего про ооп начать практику делать, потом будет вопрос про то почему когда он создает 2 карты, то баланс у них общий
Я пока до sql не дошёл планировал в txt файле держать данные
Здесь нечего угадывать, del только разрывает связь между переменной и объектом, пока не случится сборка мусора, объект никуда не денется, и питон считает, что если его можно использовать, то почему бы не использовать
ладно, за мат извени
там дохуя курсов, на какой именно глаз положил?
могу расписать если это из тех курсов что я видел
>там дохуя курсов, на какой именно глаз положил?
Начал проходить Python for Everybody, пока нравится.
>могу расписать если это из тех курсов что я видел
Какие там еще годные есть?
Что за мода выискивать какие-то ЛУЧШИЕ курсы? Смотри эти, потом посмотришь другие.
бери vscode лучше или тормозной spyder или pycharm
Есть и лучше курсы по питону университетские, но всё зависит от твоего уровня программирования.
Хирьянов по основам программирования и алгоритмов, на питоне, но не про питон.
Если программировать более-менее можешь, более-менее можешь решать задачи уровня easy, то лучше смотреть на курсы именно про питон.
типа такого:
https://www.youtube.com/playlist?list=PLlb7e2G7aSpTTNp7HBYzCBByaE1h54ruW
Спасибо , запишу на будущее, думаю пока досмотрю лекции хирьянова , основы я не очень хорошо знаю хотя при этом простые задачи могу делать , просто набор функций по большей части одинаков но не все понимаю как именно работает хотя после стольких лет образования на электрика по цепям рза понимаешь что обычно сильно углубленные знания и не требуются в работе
Только вот в пистоне объекты вычищаются сразу по счетчику, там нет глобальной остановки как у жабы
там есть основы питона, погружение в питон (неоч), ООП, создание веб на питон, птион для анализа данных и т.п.
ты как я понял начал курс от буржуев?
https://www.coursera.org/learn/python-osnovy-programmirovaniya
тут упор на программирование.
дается несколько роликов по возможностям и 30+ задачек.
и так каждую неделю.
рассчитано на начинающих так как когда дается задание то предполагается что ты будешь его решать именно теми средствами, про которые рассказали в видео, без всяких читов типа библиотек и методов.
Математики там прилично, задачи в основном на математику
джупитер ноутбук работает в браузере вроде. по крайней мере я работал с ним в браузере прямо на одном из курсов
PIL.Image.from_bytes()
у питухона свои OCR есть и возможно лучше. тем более можешь сразу парсить с экрана
Чтобы открыть портал надо жопу порвать, пожтому не бойся, просто веб интерфейс в браузере и все
>Книжки, новое собрание
Eric Matthes - Python Crash Course (2016)pdf - есть более свежая версия 2020 года, можно найти в вк по документам.
Он по умолчанию на локалхосте открывается, ничо не скомпрометируешь, с трудом представляю себе корп-структуру где вася мог бы порт в интернет выставить, тем более случайно
Ну и что значит сущность? Что угодно может быть сущностью.
>>69085
Ну я заебашил траефик себе в кубер чтобы можно было нормально proxyless services поднимать, стало хорошо. У траефика кастрация в другом месте правда и он не для всего, статику не умеет раздавать например. В итоге нгинкс внутри подов на локалхосты ходит, а траефик как ингресс. Видимо настало время дорасти до haproxy.
Раз https://docs.python.org/3/library/turtle.html
Два https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html
Три это вообще SVG генерить, там обычный XML
Зависит для чего тебе.
Достаточно хорошо. Но атом уже пару лет как не развивается, хотя и вполне работает. Вся разработка ушла в vscode. Гит я бы всё-таки сначала из консольки поучился с гитбуком, гуи не сильно упрощают работу с ним.
Ну очевидно он туда автологин вставил. Можешь снести нафиг весь этот метод, у тебя будет регистрация без автологина. super уже давно можно без всякой хуйни писать return super().form_valid(form)
А, ну то есть то, что он написал это то же самое, что просто super()? Типа сразу логинит после регистрации, а если юзер не создался, то там эта функция оригинальная сама что-то пизданет.
Там нет если. Оригинальная функция отработает в любом случае. Но если юзер создался, то дополнительно залогинит.
Ппц вместо того чтоб статическую типизацию завезти какую-то хуйню выдумывают. Он будто кончает когда эту парашу юзает
Блоггер тоже хочет кушать, че ты.
pip не умеет выбирать пакеты в директориях, но ты можешь прямо указать какой файл-пакет установить.
Типа я передаю в конструктор класса словарь, и класс будет менять значения этого внешнего словаря, а не какого то своего локального.
Во как, в статически типизированных языках значит валидацией входных данных принципиально не занимаются.
Какую проблему ты решаешь? Звучит как ехал костыль через костыль чтобы сложить 2 + 2.
Ну есть пайплайн. Там идёт векторизация через tf-idf. Хочу после векторизации сохранить размерность полученной матрицы, для этого пишу кастомный трансформер, куда хочу передать внешний словарь, что бы сохранить в него размер матрицы.
>а можно как то в атрибутах класса сохранить ссылку на внешний словарь?
Можно
dickt = {'ti':'huy'}
class Kostilik:
def __init__(self):
self.dickt = dickt
Как видишь reference на тот же объект, новый не создается. можешь даже проверить id объектов, если не веришь. Нахуя только тебе словарь, когда можно хранить в виде объекта
class MatrixSize:
x=0
y=0
Насколько ты контролируешь пайплайн? В этом пайплайне нет какого-то хранилища артефактов, пусть даже в виде словаря? Тупая труба, вышло из первого, вошло во второе? Даже если так, почему по этой трубе не может идти словарь со всеми матрицами и размерностями?
Хотя нет, стопе, я передавал словарь в конструкторе.
Можно сделать без такой зависимости, как у тебя?
Какой зависимости дурень? Создай объект хранилище до инициализации объекта из конструктора и все. Иди учи CS, хуйню какую-то хочешь, пайплайны у него блять
Тки место
Ты лучше пример приведи, какой код есть, и примерно как ты хотел бы.
Вот то, что ты описываешь, выглядит так
try:
____data1 = await foo1(data0)
____data2 = await foo2(data1)
____data3 = await foo3(data2)
____data4 = await foo4(data3)
except:
____something
Тебе это к чему преобразовать надо?
делать вложенно
await foo4(await foo3(await foo2(await foo1(data0))))
пожалуй не очень эстетично, но так
А что хочешь ты?
И на работе, и дома стоят 2 монитора. На одном пишешь код, на втором проверяешь его работу. Если, конечно, ты не консольную утилиту делаешь какую-то. А так второй монитор может пригодиться разве что мультики смотреть или музыку переключать, например
https://stackoverflow.com/questions/41794205/how-to-set-name-for-asyncio-task
Инкапсулируй корутину в кастомный класс, опиши поведение, опиши от чего зависит и дальше на основе шаблона поведения создавай логику. Чё ещё надо, Вась?
Я спрашивал есть ли готовые менеджеры для такого, так педалить свое придется
class CustomTask(Task):
def __init__(depends=[], coro=coro, results):
self.name = ''
async def execute(self, results_pool):
cur_tasks = asyncio.Tasks()
args =[]
for t in tasks:
if t.name in depends and t.done:
args.append(next((r[1] for r in results_pool if r[0]==t.name)
output = await coro(*args)
results_pool.append((self.name, output))
class TaskPool:
gathered_results=[] # ('task1', 'tobi_pizda')
tasks = []
В коде явно объебался, но суть ты понял. Там кстати есть done callback, можешь через asyncio Lock, Event управлять.
>ноешь в разделе
Шиз, я только спрашивал есть ли готовое решение, что бы не писать костыль, вместо этого ты на меня сагрилился "хули ты не гуглишь", хотя сам потом понял, что готового решения нет, а aiojobs решает только часть задач и нужно самому писать.
>aiojobs
Не для таких задач
>>70606
>>70624
>Я спрашивал есть ли готовые менеджеры для такого, так педалить свое придется
Мне не понятно, как data flow устроен и как его формально прописать. То есть в каких-то случаях у тебя одна корутина возвращает данные, другая корутина использует данные от двух других корутин, и т.п.
Здесь может быть очень много извращённых логик. И их надо как-то формализовать. Вот как ты это запишешь?
Может быть такой подход для реализации логики.
допустим, есть функции
data1 = foo1
data2 = foo2,
data3 = foo3,
foo2 и foo3 выполняются независимо
data4 = foo4(data2, data3)
а вот foo4 нужны данные от foo2 и foo3
и дальше схожая логика
Вот чтобы параллельность реализовать, надо использовать механизм очередей.
foo4 принимает на вход очередь, queue4, в которой кортежи или словари вида
('data3', data3)
('data2', data2)
надо помнить, что порядок произвольным может быть
как только пришли оба элемента, код выполняется, результат помещается в другую очередь.
Это просто принцип построения. Не знаю решений для этого, но закодировать тут пару десятков строчек, наверное.
Можно сделать декоратор, который будет как раз конвертировать очередь в обычные параметры.
Под свою логику можно сделать удобное решение.
>aiojobs
Не для таких задач
>>70606
>>70624
>Я спрашивал есть ли готовые менеджеры для такого, так педалить свое придется
Мне не понятно, как data flow устроен и как его формально прописать. То есть в каких-то случаях у тебя одна корутина возвращает данные, другая корутина использует данные от двух других корутин, и т.п.
Здесь может быть очень много извращённых логик. И их надо как-то формализовать. Вот как ты это запишешь?
Может быть такой подход для реализации логики.
допустим, есть функции
data1 = foo1
data2 = foo2,
data3 = foo3,
foo2 и foo3 выполняются независимо
data4 = foo4(data2, data3)
а вот foo4 нужны данные от foo2 и foo3
и дальше схожая логика
Вот чтобы параллельность реализовать, надо использовать механизм очередей.
foo4 принимает на вход очередь, queue4, в которой кортежи или словари вида
('data3', data3)
('data2', data2)
надо помнить, что порядок произвольным может быть
как только пришли оба элемента, код выполняется, результат помещается в другую очередь.
Это просто принцип построения. Не знаю решений для этого, но закодировать тут пару десятков строчек, наверное.
Можно сделать декоратор, который будет как раз конвертировать очередь в обычные параметры.
Под свою логику можно сделать удобное решение.
>Шиз, я только спрашивал есть ли готовое решение
Мне кажется, что слишком специфичная задача, чтобы под неё было готовое решение. Слишком много вариантов логики. При этом руками сделать несложно совсем, не сложнее, чем потом декларировать на каком-то птичьем языке эти зависимости.
>То есть в каких-то случаях у тебя одна корутина возвращает данные, другая корутина использует данные от двух других корутин, и т.п.
Я думал сделать какой-нибудь объект, который записывал все возвращаемые в виде словарика с ключем по имени таска и доступный для каждой исполняемой корутины.
Шизик тут только ты, который читает документацию по диагонали и не видит готовые решения указанные в ней.
Callback ничего не возвращает, но триггерит запуск другой корутины, exception перехватывается. Если хочешь инкапсуляции логики, а не говнокод на 50 строк при увеличении количества тасков, то делай объекты и методы. Заебали такие "ыыы хачу в лоб, питон жи проста. А где готовое решени ыыыыааа а где либа? Питонгавно"
А хотя нет, оставайтесь такими даунами, хоть на срыночке не пересечемся
Питонотреды, ожидание:
>Есть ли готовое решение для этой задачи?
>Нет, пиши сам, можешь это заюзать попробовать.
>Ок
Реальность:
>Есть ли готовое решение для этой задачи?
>КАКОЙ ЖИ ТЫ ТУПОЙ БЛЯДЬ, ВОТ ЖЕ ВСЕ ОПИСАНО, ЧТО ЗНАЧИТ ЛИБА НЕ ПОДХОДИТ ДЛЯ ЗАДАЧИ?!?!? НУ ТЫ И ДЕБИЛ, ВОТ ЖЕ КОД, ХОТЯ МЕНЯ НИКТО НЕ ПРОСИЛ ЕГО ПИСАТЬ, СМОТРИ КАКОЙ Я ОХУЕННЫЙ, ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ, ЧТО ЗНАЧИТ МЕНЯ НИКТО НЕ ПРОСИЛ!?!?!?!! МНЕ ВООБЩЕ ПОХУЙ НА ВСЕ, БЫДЛЫ ТУПЫЕ
Чего ты подрываешься? Это же имиджборд. Сюда могут писать аноны разного уровня компетентности и адекватности, и никакого контроля, почти никакого, нет.
Но ты сам сформулировал свою задачу очень нечётко. Долго вникать в твою задачу и додумывать, что тебе нужно, желания не хватает у большинства. Вот тебе неадекваты и отвечают поэтому.
Нормально ты порвался что тебе не дали готовое решение.
Ебать неосилятор закукарекал.
>Неадекваты
>Не объяснили на пальцах, вот же суки
>Я жи проста вкатывальщик с хотелками чтобы написали за меня
>Пачиму меня не берут, у меня опыт 1 год в питонотредах
Нахуй иди, серьезно. Ладно бы реально на баг какой нерешаемых нарвался или спросил по поводу направления поиска решения проблемы, но ты просто выблевал хотелку без кода и сел ждать когда тебе выдадут решение.
Если сказали в документации читать читай документацию, значит ты что-то упустил. Но вы же рветесь на ровном месте и вместо того чтобы загуглить паттерны на коллбеках ведёте себя как ебучие заказчики. Ты платишь? Нет.
>Если сказали в документации читать читай документацию, значит ты что-то упустил.
Сказать "читай доки" может любой ламер, желающий возвыситься. Даже если в доках ничего нет. Обычная история. Польза нулевая от таких.
А для такой задачи в доках ничего нет, как раз такой случай.
Можно обсудить идеи, как вот такую задачу решать.
Ещё один.
Вот, блять пальцем покажу куда смотреть. Нет там ничего, пиздец просто...
done()
Return True if the Task is done.
A Task is done when the wrapped coroutine either returned a value, raised an exception, or the Task was cancelled.
result()
Return the result of the Task.
If the Task is done, the result of the wrapped coroutine is returned (or if the coroutine raised an exception, that exception is re-raised.)
If the Task has been cancelled, this method raises a CancelledError exception.
If the Task’s result isn’t yet available, this method raises a InvalidStateError exception.
exception()
Return the exception of the Task.
If the wrapped coroutine raised an exception that exception is returned. If the wrapped coroutine returned normally this method returns None.
If the Task has been cancelled, this method raises a CancelledError exception.
If the Task isn’t done yet, this method raises an InvalidStateError exception.
add_done_callback(callback, *, context=None)
Add a callback to be run when the Task is done.
This method should only be used in low-level callback-based code.
See the documentation of Future.add_done_callback() for more details
Ещё один.
Вот, блять пальцем покажу куда смотреть. Нет там ничего, пиздец просто...
done()
Return True if the Task is done.
A Task is done when the wrapped coroutine either returned a value, raised an exception, or the Task was cancelled.
result()
Return the result of the Task.
If the Task is done, the result of the wrapped coroutine is returned (or if the coroutine raised an exception, that exception is re-raised.)
If the Task has been cancelled, this method raises a CancelledError exception.
If the Task’s result isn’t yet available, this method raises a InvalidStateError exception.
exception()
Return the exception of the Task.
If the wrapped coroutine raised an exception that exception is returned. If the wrapped coroutine returned normally this method returns None.
If the Task has been cancelled, this method raises a CancelledError exception.
If the Task isn’t done yet, this method raises an InvalidStateError exception.
add_done_callback(callback, *, context=None)
Add a callback to be run when the Task is done.
This method should only be used in low-level callback-based code.
See the documentation of Future.add_done_callback() for more details
Долбоеб, я спрашивал готовое решение для данной задачи, если бы мне нужно было написать, я бы это сделал. Это как на просьбу посоветовать тулзу для парсинга сайтов предлагать urllib с html.parser вместо реквестов с бьютифол супом.
Да сучий ты ж потрох. У тебя уже реализовано в самой библиотеке, тебе не надо low level design создавать, просто блять используй методы.
И это будущие чьи-то коллеги?
>Не хочу писать код, хочу пыщ пыщ и в продакшн и 300к в наносекунду
Я если что уже 2 года работаю
>Да сучий ты ж потрох. У тебя уже реализовано в самой библиотеке, тебе не надо low level design создавать, просто блять используй методы.
Что реализовано? Тебе написали, что готового решения нет и нужно собираться все это, причем есть вещи над которыми нужно подумать, куда собирать результаты функций, что бы они были отовсюду доступны, как грамотно организовать шатдаун всего пула и т.д. Но нет, ты брюзжишь слюной и орешь ВОТ ТЕБЕ ТРИ ФУНКЦИИ, ЭТО ВСЕ ЧТО НУЖНО, а тут речь про грамотную организацию.
Дебил, и кому нужен твой add_done_callback? Ты вообще думать умеешь?
Ты никакую параллельность так не реализуешь. Например, чтобы две корутины исполнялись параллельно, а третья вызывалась после.
С таким же успехом можно было бы и await coro() сделать.
>Нужно подумать
Очень полезный навык, ну может ещё через 2 года появится и напишешь в софт скиллс "сначала думаю, потом спрашиваю хуйню". Куда собирать? У тебя кортежей нет? Не реализован хэшмэп из коробки?
Graceful ahutdown в 5 строчек делается, но ты опять будешь ныть "не из коробки".
Советовать BS4 не буду если там надо найти тэг, который будет на второй строчке, потому что lxml умеет делать это инкрементно, а так ты весь объект тащишь.
return line.replace(u'\u3000', u' ') отрабатывает нормально
return line.replace(u'{}'.format(charcode), u' ') все идет по пизде
Я думал, что может дело в очередности типа как с++ и ++с или я просто неправильно написал, но print(line.replace(u'{}'.format(charcode), u' ')) в консоли отрабатывает как надо.
Ты достал, вот совсем достал. Ты какой-то бот, который по ключевым словам выдаёт какой-то бесполезный ответ. Только с агрессий. Тебе подлечиться надо, а не бросаться на людей здесь.
Потому что ты не в состоянии подумать над задачей, хоть другой анон её не сформулировал как надо.
То, что анон просит, штатными средствами не решается, здесь решения на базе каталов, паттернов pub-sub нужны. pub-sub ты такими способами не сделаешь. Это в общем случае. Хотя ХЗ, что анону надо, он не сказал, это я за него додумываю.
Давай сокеты и брокер ещё подтянем, когда есть примитивный синхронизатор и Queue. Сразу ебашим Redis или MQTT, да.
Ещё раз говорю, есть Event, есть Lock. В чем проблема создать ивенты для зависимых Task и на их основе создать логику? И чего там нет на верхнем уровне? Low level это select/epoll. Тут же и методы и все дано, нет хочу усложнить. Любители Django знакомятся с asyncio и охуеваю что готовенького ничего нет.
Ладно, add done callback не то, https://overcoder.net/q/407597/python-asyncio-adddonecallback-с-асинхронным-определением
У человека так же задача, после одной корутины запустить следующую по выполнению первой.
Решение в Гугле
>У человека так же задача, после одной корутины запустить следующую по выполнению первой.
Это вообще не задача, для этого и есть оператор await
result_1 = await coro_1()
await coro_2(result_1)
и никаких коллбэков, конечно, не нужно. async/await как раз нужны для того, чтобы избавиться от колбэков и чтобы не было callback hell, как это бывает в JS.
Вот проблемы начинаются, когда логика нетривиальная, например от result_1 зависит несколько функций. А ещё хуже, если они зависят ещё от result_2, которая считается другой корутиной, независимо - вот здесь уже никакой gather не поможет.
На этом этапе и начинается переизобретение MQ с разными стратегиями. Надо смотреть на конкретные задачи и конкретные проблемы, чтобы предлагать решение.
Ты уже выдумываешь другой кейс, когда loop.run_forever(), без выхода. Этот же шизик указал, что он хочет все в пуле делать, но со schedule.
Ты же начинаешь искусственно усложнять условия первоначальной задачи.
Что значит избавиться, когда он тут нужен в одном месте для запуска цепочки других тасков? При чем тут JS, если речь про Python? Ах да, весна пришла.
Pub/sub нужны тогда и только тогда, когда нет иного механизма передачи данных:
1. Микросервисы
2. Исполнение кода на удаленном сервисе
3. Все разбито на процессы, так как CPU bound так много, что нет смысла все делать асинхронкой и нет выхода из цикла кроме как с ошибкой.
>Pub/sub нужны тогда и только тогда, когда нет иного механизма передачи данных:
pub/sub это архитектура для взаимодействия между задачами в приложениях с конкурентностью. Как и очереди, только это более продвинутые варианты очередей.
Когда у тебя несколько процессов, тогда ты уже вынужден использовать отдельный сервис для этого. Когда ты внутри одного процесса, ты можешь той же архитектурой пользоваться, но проще.
Такая же история и с очередями.
На пальцах объясняю. Тебе надо исполнить все корутины и исключить блокировку.
Coro1, coro2, coro3 производят какие-то результаты
сoro4 зависит от результата coro2, coro5 зависит от результата coro3.Если я правильно понял шизоида, то надо выполнить одновременно первые 3 корутины и не ожидать конца из выполнения. Прописав кастомный callback ,если корутина 2 выполнится раньше чем корутина 3, то должен быть передан результат выполнения, передана как аргумент в coro4 и запущено исполнение.
Тут стратегия принятия решения: если первая зависимая корутина возвращает exception, тогда весь процесс прекращается. Шлется [t.cancel() for t in asyncio.Task.all_tasks] и выход sys.exit(1) например.
Все просто. Для этого надо напрячь мозг и описать стратегию, инкапсулировать логику в объектах, а не писать спагетти код
Всё-таки ты немного неадекват.
Делать add_done_callback очень дурной стиль. Документация явно просит вот этим не пользоваться, это если ты библиотеки пишешь, тогда может быть полезно.
Во-первых, это спагетти конкретное. Это довольно большой лишний код. Ты туда передаёшь синхронную функцию, хотя по логике тебе скорее понадобится асинхронное поведение, тебе корутина нужна.
>тогда весь процесс прекращается. Шлется [t.cancel() for t in asyncio.Task.all_tasks]
Весь процесс? А вот если не весь процесс, а только ветвь исполнения? Потому что реальная проблема, когда у тебя какая-то задача не может достучаться до какого-то сервера, но это штатная ситуация и не повод прерывать исполнение целиком.
Очень похоже, что ты никогда ничего практического по асинхронному и многопоточному не писал, а здесь самоутверждаешься анонимно перед анонами, что уже намекает.
Иначе бы не писал такие вещи.
По делу, основной паттерн в современном конкурентном программировании это pub/sub. Частный случай очереди.
У тебя одна задача что-то посчитала, опубликовала результат в очереди. Те, кому этот результат нужен, слушают это очередь, и как только туда что-то поступило, начинают свою работу.
Вот так и достигается декларативность. Работает это и в рамках одного процесса (asyncio/threading), и на системах с несколькими машинами и большим количеством микросервисов.
спасибо
Писал, пишу и буду писать.
Ты долбишься в глаза, где я говорил о add done callback? Я предложил отказаться нахер от этого варианта и написать свой. Это просто блять название, сечешь?
Так я хуй знает надо ему обработать это exception и продолжить выполнение или нет. Речь шла о прерывании, ты опять додумываешь кейсы за него.
Какая блять синхронная функция если
def callback(task, result):
if not task.exception():
loop.run_until_complete(coro3(result))
Все! Сделай класс-обертку и применяй к любой корутине, добавь туда логику и готово решение. Используй где угодно.
Нет ты тащишь паттерны, пытаешься натянуть сову на глобус. Один раз создать класс обёртку, добавить туда exception handler для обработки исключений каких надо и все. Или ты снова мне про паттерн pub/sub будешь затирать и снова кейсы выдумывать? Смирись, все делается меньше чем за 30 строк кода.
И все посты не про самоутверждение. Что тот анон, что ты сами не понимаете что должно в итоге получиться.
Ну куда мне до вас сеньоров-лапшичников двухлетних
Все я низменный червь проебывающийся в синтаксисе, уел.
Извините сеньор помидор, больше сюда не зайду.
Может быть ты заметил, что это ломает твою логику с добавлением в калбек, так как ты не можешь засунуть туда асинхронную таску
Вопрос. С чего вообще начать фреймворк? Я полагаю нужно сделать ООР с методами логина и прочей ботвой отдельно от самих тестов?
Где-то можно шаблон какой-то найти? Вот прям с самого старта чтобы сделать логин, какую-то базовую проверку токена, ну и тд. Спасибо.
Запили сначала с десяток тестов как они должны быть. Затем то что повторяется выноси в фреймворк.
Правда ли что Джанго - тупиковый путь в плане работы и после него маловероятно что залезешь во что-то иное?
сейчас работаю на стеке фласк / aiohttp есть ли смысл перекатываться в джанго?
Зависит от того, что ты делаешь. На прошлой работе джанга была нужна только как гейтвей с орм и шаблонизатором для вызова микросервисов.
парсю отсюда: https://www.gog.com/games/ajax/filtered?mediaType=game&page=1&sort=date
код: https://ideone.com/myAPvO
А нахуя? Ты гитом пользоваться не умеешь?
Проще тогда без пайчармов на сервере редактировать файлы, если уж так прет
Это вообще то для любого языка актуально. Название функции должно давать предстваление о том, что эта функция делает
Т.е. функция def fuck_ops_mom() не должна тебе отсасывать
Недавно писал сюда, и мне помогли, потому попробую ещё раз.
С горем пополам построил я по 3 спискам координат график, который делает контурный рисунок поверхности методом триангуляции. И всё бы хорошо - только вот всратый он, как моя жизнь. Поэтому надо мне область под кривой закрасить - а она не хочет. Собственно, пример на картинке - plot.fill даёт неудовлетворительный результат, как я с ним не мучился, а between я не знаю, как тут применить.
Кстати этому пацанчику с экстремальными названиями функциями нужно запилить игру на пайгейме где функция хуй реально будет отрисовывать хуй, а функция пизда - пизду.
ну и полирнуть функцией фак для запуска процесса.
Tools / Deployment, гугли как настроить
Потом в Python Интерпретаторы вроде надо добавить SSH Interpreter
Спасибо, указал в параметрах сессии cookies= {'gog_lc': 'RU_RUB_en_US'}, помогло
Вопрос: как через sqlalchemy вытянуть таблицы из этого набора курсоров?
>Поясните, питонисту нужен ли линукс?
Уметь с ним работать нужно любому разработчику. Использовать в качестве основной операционной системы - нет.
А что подразумевается под "имением работать"?
Часто вижу это требования в вакансиях.
Если я через терминал могу спуллить код с гитхаба и подредактировать его в nano - я уже умею пользоваться линуксом или ещё нет?
>Если я через терминал могу спуллить код с гитхаба и подредактировать его в nano - я уже умею пользоваться линуксом или ещё нет?
В принципе да, если не пугаешься консоли и способен быстро учиться. Работают с линуксом в основном девопсы, а разрабам хватит основ.
Это называется на уровне пользователя, то есть ты можешь более-менее спокойно пользоваться базовыми возможностями командной строки, ходить по каталогам, копировать-удалять, архивировать-разархивировать, фильтровать вывод, редактировать файлы (не обязательно vim), там команды find, grep, top, ps, kill. Запуск команд из командной строки. Плюс установка софта через apt, работа с ssh, ну и понимание каталогов /etc, /var, /opt.
В общем что ты в этом более-менее плаваешь, и с нужной командой быстро разберёшься при необходимости.
Админские навыки это уже другое.
Бывает ведь народ, который может работать исключительно в окнах винды (может даже довольно прилично, с хорошим пониманием на админском уровне), командная строка даже видны для них мрак, соответственно если они попадают в линуксовое окружение и необходимость работать через консоль, они просто рассыпаются.
>Альфач пишет те имена функций, которые хочет
Истинная правда.
Вот делает чувак модуль logging для стандартной библиотеки питона. Не портирует либо под питон, а именно чисто питонячья стандартная библиотека.
И срёт на весь PEP8, не удосуживаясь даже от camelCase к питонячьим стандартам перейти
https://docs.python.org/3/library/logging.html
И ничего. Стандартная библиотека.
Ну так-то командная строка шинды это та ещё хуйня - или убогий cmd из времен дос, или норкоманский павершелл. Можно получить отвращение к такому способу работы с системой.
У меня кстати подгорает, подскажите, в чем проблема сделать logging.info(*list), почему нужно блять передавать либо f string, либо str(str(a)+str(b)), либо формат, нет бы сделать как в принте, идеал же
Когда ты вводишь домен в браузере, он посылает его в заголовке Host, чтобы можно было хостить дохуя доменов на одном сервере.
dns тебе по домену выдаёт ip
В заголовке http указан хост
В nginx ты прописываешь правила для хостов, там же ты можешь настроить хост по дефолту, он сможет обрабатывать левые домены.
Но по сути он тупо делает запрос к вебсерверу, точнее делает запрос на порт, а уже если ътот хост есть в роутерах нгинска, то запрос проходит, верно?
Это понятно. А сам фреймворк есть шаблон какой-то? Логин идёт через вебдрайаер пакет? Я просто в этом особо не шарю. Спасибо. Есть ли есть какая-то ссылка на репо или гайд было бы круто.
Хочу простенькую галерею сделать, чтобы брать лист урлов на картинки из апи и показывать галерею этих картинок в окошке
Всё работает на tcp/ip. Трафик в интернете идёт по ip адресам, tcp соединения устанавливаются по ip адресам.
Твой компьютер устанавливает tcp соединение с сервером, с nginx. На этот момент nginx знает только твой ip адрес. Как соединение установлено, так идёт общение по http протоколу.
В заголовке http пакета, что высылается на сервер, есть поле
Host: www.some.host.net
и другие поля, потом пустая строка, и дальше какие-то данные, например POST данные.
nginx смотрит на это поле Host, и дальше смотрит свои конфиги, что делать с этим хостом.
Конфиги хранятся обычно в каталоге
/etc/nginx/site-avaible
там есть секции
server {
listen 80;
listen 443 ssl;
server_name my_server.com;
}
которые отвечают за настройки разных вебсерверов, которые обслуживает nginx. Вот там и прописывается, как обслуживать конкретный сервер.
В принципе ты можешь любой домен прописать, а у себя на локальной машине переопределить для него DNS. То есть твой nginx может обслуживать google.com, но тебе надо будет ещё сделать запись в файле hosts (есть и linux, и в windows), чтобы со своего компьютера ты по имени гугла попал на твой сервер, а не оригинальный гугловский. Правда только по http, по https не получится, потому что браузер уже электронные подписи проверяет.
Там же, в настройках одного из серверов, ты можешь прописать
listen 80 default_server;
listen [::]:80 default_server;
этот блок настроек будет отвечать за случай, когда ты заходешь напрямую по ip адресу, либо по доменному имени, которое в настройках забыл прописать.
Всё работает на tcp/ip. Трафик в интернете идёт по ip адресам, tcp соединения устанавливаются по ip адресам.
Твой компьютер устанавливает tcp соединение с сервером, с nginx. На этот момент nginx знает только твой ip адрес. Как соединение установлено, так идёт общение по http протоколу.
В заголовке http пакета, что высылается на сервер, есть поле
Host: www.some.host.net
и другие поля, потом пустая строка, и дальше какие-то данные, например POST данные.
nginx смотрит на это поле Host, и дальше смотрит свои конфиги, что делать с этим хостом.
Конфиги хранятся обычно в каталоге
/etc/nginx/site-avaible
там есть секции
server {
listen 80;
listen 443 ssl;
server_name my_server.com;
}
которые отвечают за настройки разных вебсерверов, которые обслуживает nginx. Вот там и прописывается, как обслуживать конкретный сервер.
В принципе ты можешь любой домен прописать, а у себя на локальной машине переопределить для него DNS. То есть твой nginx может обслуживать google.com, но тебе надо будет ещё сделать запись в файле hosts (есть и linux, и в windows), чтобы со своего компьютера ты по имени гугла попал на твой сервер, а не оригинальный гугловский. Правда только по http, по https не получится, потому что браузер уже электронные подписи проверяет.
Там же, в настройках одного из серверов, ты можешь прописать
listen 80 default_server;
listen [::]:80 default_server;
этот блок настроек будет отвечать за случай, когда ты заходешь напрямую по ip адресу, либо по доменному имени, которое в настройках забыл прописать.
QT5
Создаёшь экземпляр объекта
logger = logging.getLogger() переписываешь методы где подаёшь *args на вход. Вот и сделал. Есть же обертки logging которые и сразу окрашивают строки для StreamHandler или формат сразу в JSON.
Есть веб-сайт, с base auth(на нжинксе), на сайт захожу под хттпс(соответственно по доменному имени). Первый вход норм, все работает, но затем, на 3-4 запрос к серверу(начинаю ходить по ссылкам на веб-сайте), начинается бесконечная загрузка в бровзере и в результате ошибка, что соединение разорвано. Если захожу на сайт по ИП, то все норм.
На сервере связка Nginx+certbot/flask. В какую сторону смотреть и как гуглить проблему?
Смотри network в консольке браузера, какой конкретно запрос ломается. Ещё логи сервака посмотри.
>>1962060 (OP)
Сап аноны.
Много раз пытался вкатываться в python впрочем это мог бы быть любой другой язык и постоянно сталкиваюсь с одной и той же проблемой.
Я не вижу практического применения навыкам. Дохожу до той границы, когда материал уже довольно сложен для понимания, и требует усилий для освоения ну во всяком случае для меня , а куда это всё применить непонятно. Ну вот я причитал три книги, уже знаю основные конструкции языка, но всё ещё не пойму где это может пригодится, могу только сидеть и писать условные калькуляторы круглыми сутками.
эээ..пук-среньк в этом и кроется основная проблема, я непонимаю где переход, вот от этих всех назначить переменную-кинуть экспешен-написать функцию в сделать что-нибудь полезное.
У меня мотивация поднялась, когда я веб фреймворки начал изучать. Помню как охуел, когда в браузер первый раз вывел {"status": "ok"}
Ух бля
> в них алгоритмизация-констркции языка
Если нужны дополнительные либы - читаешь документацию и пилишь.
У тебя экзистенциальный кризис или вкат негладко проходит? Возможно тебе просто надо уже перестать поглощать материал и ебошить практику. Только не калькуляторы, а что-нибудь посложнее. Веб-сервис, гуи приложение, сложное консольное приложение, спарсить что-нибудь, csv банковской выписки обработать. Правильно тетрис посоветовали, арканоид можешь ещё заебашить.
> причитал три книги
А, ну да, бросай читать, хватит уже, пора кодить.
Скорее первое.
>Веб-сервис, гуи приложение, сложное консольное приложение, спарсить что-нибудь, csv банковской выписки обработать.
Вот в этом то и беда, я не могу понять, как от моих манипуляций с коносолю, перейти к гуи\веб.
Kivy
Ох, спасибо, я даже забыл о том что там соединения происходят, много чего уточнил. Вообще почему-то теории продвинутой в интернете не так много, одни объяснения для мимочелов
Так это вручную делать, еще и на каждом проекте, мое возмущение о том что в модуле эта очевидная возможность нереализована, я из-за этого раньше понять не мог почему json из ответа не логируется, оказалось нужно передавать строго строку и только одну
А я вот перешел на новый уровень как раз и только стал осознавать как часто приходится юзать базу, обычные работы со строками юзаю постоянно, преобразования типов, структуры данных, тоже думал юзлесс хуйня, а на практике все очень нужно, даже потоки оказались не бесполезными как я думал в питоне
Ты начни гуглить классику просто, типа как сделать тетрис на питоне, посмотри библиотеки, которые используются, я так полагаю проблема в том, что ты не понимаешь как пользователь может взаимодействовать с кодом, ответ: веб приложения, гуи, консоль, выбери то что хочешь, изучи условно как в консоле передавать флаги и аргументы и вот у тебя уже консольное приложение, ставь цель какую-то, типо спарсить информацию о 100500 тайтлах с какого-нибудь сайта, посмотри как это решается, почитай про асинхронность умловную и сделай парсер, а потом все эти знания на самом деле пригодяться на настоящей практике
> как перейти
Практика практика практика. У тебя сейчас ситуация как у многих айтишников, хорошо читают на английском, но говорить совсем не умеют. Вот чтобы научиться говорить, нужно начать говорить.
Насчёт полезности это сложный вопрос. Обычно тренируются на заведомо бессмысленных пет-проектах, которые сделать просто по приколу, потому что можешь. А вот дальше многие и за всю жизнь неспособны разродиться чем-то полезным собственной задумки, и просто тупо работают по найму/контрибутят в чей-то софт, так что это норм.
ПОЖАЛУЙСТА, УМОЛЯЮ, ХОСПАДЕ
Да.
дополнение. После команды /get_info стал выводить кнопки, но ответ на них не даёт. Как фиксить?
спасибо, папаша
слагифай формирует все - город-адрес-номер. Хотелось что бы при обращение lockalhost:8000/город фильтровать адреса по городам. Подскажите как лучше и красивей это сделать, через функцию или класс контролер
Некропост, но мне доставляет так:
if not {\search-items} - {\container}:
____ # все элементы из search_items найдены в container
Если большие структуры, то хуевато.
Алсо, словарные keys и values уже умеют в сетовые операции.
Просто два слага.
Если б я умел такое, книги б не качал...
Никто не сталкивался? Кто как хранит, если хранит?
Ну так вообще даже базово искать невозможно.
у меня отдельный репозиторий для такого.
А вообще вроде есть github gist, но не знаю как это работает.
не разбираюсь в этом. первый мой микро-проект. если есть, что почитать по ооп, буду признателен
Вернее было бы так спросить: почему abs() здесь при вызове скрипта из консоли возвращает ноль, а при тестировании того же куска кода в интерпретаторе - нужное значение? ЯННП.
Каких базовых, клоун?
>Надо код писать
>Надо команды выполнять
Перекатывался на Node, там голова болит от зависимостей и размера node_modules, бросай этот сраный Питон.
Как вкатился на работу, пересел на убунту. 3 месяца уже сижу и все никак не могу привыкнуть, хочу вернутся обратно.
а, я думал может ты на постоянной основе мутишь. что почитать это в инете есть инфа, советовать не могу.
прост с классами удобнее повторно использовать код
Это вообще разная хуйня. reverse модифицирует список, -1 копирует итераблю в обратном порядке. Есть ещё reversed, который итератор в обратном порядке.
Последнее лучше всего, если тебе не нужна именно копия.
Докер нативный на hyper-v, но нужна Pro версия. pipenv точно работает, но poetry в разы лучше, обязательно наверни. Чем убунту не нравится тебе я хуй знает, а частенько деплою bare metal на ubuntu LTS и соответственно на ней и сижу. Чего не хватает на линуксе? Может подскажу аналоги.
files = []
И добавляет метод, который предполагает туда сбор названий файлов которые находит цикл. Далее он хочет примернить к каждому элементу записанному в files другой метод через цикл и внезапно он пишет просто конструкцию вроде
for file in files:
При этом никакой переменной file до этого не создавалось. Мне непонятно как интерпретатор сам понимает, что file это каждый отдельный элемент добавленный в files, если ранее в коде это никак не обозначено. Я раньше немного php ковырял, когда открываю код на пыхе хотя-бы понятно примерно что происходит, а код на питоне выглядит как какая-то ебучая магия.
Потому что это конструкция языка, которая работает определенным образом. На каждом витке цикла к текущему элементу цепляется алиас.
Вообще, если что-то не понятно, то идеальный вариант это смотреть документацию по синтаксису, там обьясненен именно синтаксис и все его возможные элементы, а не что тебе хуй в книжке или видяшке пожелал изложить.
Например, для фор https://docs.python.org/3/reference/compound_stmts.html#the-for-statement
Там все на английском. Да я знаю, что без английского в it никак, но тяжело сцука.
это не переменная это список, сначал он в список кладет, потом изменяет.
>При этом никакой переменной file до этого не создавалось.
это локальная переменная создается в скоупе итератора на каждом проходе, существует только внутри = текущему проходу итератора по объекту, я питон тоже не знаю.
>это локальная переменная создается в скоупе итератора на каждом проходе
Ну смотри, у тебя есть files, в который записываются строки. Потом эта переменная передается в конструкцию
for file in files
files имеет вид: hui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txthui.txt
В пыхе тебе нужно с помощью регулярного выражения задать по каким критериям ты будешь вытягивать строки. Здесь же получается, каждый hui.txt сам вытягивается как file.
это скорее особенности реализации конкретного языка под капотом.
Какой ужас!
files имеет вид ['hui.txt','hui.txt','hui.txt','hui.txt','hui.txt','hui.txt','hui.txt','hui.txt','hui.txt'] (и это не строка, а список)
Кстати, не матерись
Думаю, теперь тебе понятно, откуда в file будет hui.txt
Если бы files было как ты написал, то там по букве в file клалось.
>Если бы files было как ты написал, то там по букве в file клалось.
если по строке то надо писать реализацию как итерировать, в зависимости от того какое представление строк в языке.
>и это не строка, а список
Я тоже так думаю, просто в пыхе , насколько я понял\помню, если ты собираешь названия файлов в переменную они по умолчанию записываются как string, и у тебя выходит что-то вида 'hui.txt' . 'hui.txt' .'hui.txt' .'hui.txt'
А тут выходит какой-то список, при этом это даже не array. Ну я говорю, что мои познания в коде на уровне шимпанзе, поэтому я не понимаю как это работает.
Я читал, раньше и компрехеншены протекали, с какой-то версии пофиксили, лол.
for file in files: это можно написать иначе
file = None # бесполезное объявление, чтобы тебе было привычнее
files_iter = iter(files)
while True:
..try:
....file = next(files_iter)
..except StopIteration:
....break
..# тело цикла
Так понятнее? Попробуй print(vars()) в любом месте кода написать. Увидишь что переменные это банальный словарь имя-значение. Их не нужно объявлять заранее, сразу присваиваешь x = 5 и понеслось.
Они есть, class, def, компрехеншены образуют скоупы. В питоне не принято писать портянки из одной функции на 1000 строк. Единственное неудобство это загрязнение модульного скоупа предвычислениями, но это тоже решается либо функцией, либо del.
Я именно об этом и говорил. В луа есть do block похожий, в js циклы и такие же блоки образуют скоуп. В питоне ещё есть with, который не совсем про скоупы, но выполняет часть семантики скоупов в других языках. Возможность написать n вне цикла, а потом внутри цикла, это же поощрение говёного кодстайла, тебе ещё выяснять придётся какой это n. Если кому-то сильно зудит что переменная не освобождается, есть del.
Что думаете? Меня смущает, что там чел советует курсы. Насколько я слышал, курсы по программированию это что-то вроде бизнес тренингов. Я ранее код не писал, собственно вопрос, лучше по книгам учиться?
Курсы для совсем нубов. Если можешь читать и организовать себе практику то книги лучше.
>лучше по книгам учиться?
Книги не научат тебя бест практик и не будут дрочить по pep8, да и в целом по дзену питона.
>Книги не научат тебя бест практик и не будут дрочить по pep8, да и в целом по дзену питона.
А курсы научат? Я думаю лучший способ конечно найти ментора, но не думаю, что кто-то захочет просто так тратить на меня время.
>по дзену питона
Бесполезная хуита, которая сопротивляется удобным фишкам. Из-за гвидо съебал от этих тупых ивалидов, кто давясь слюной защищал дзен.
Сроду не следовал этому. Как удобнее/эффективнее/проще/нужно по ситуации - так и делаю
Очень хлипкий.
У го действительно хороший роадмап, хотя и устареет скоро. А здесь расписывается несколько абзацев какуд среду разработки поставить. Еще, блять, советует сразу две идеи держать. Ну нахуя?
Актуальные веб фреймворки, брокеры очередей, орм - где всё это и это только под веб.
https://github.com/Alikhll/golang-developer-roadmap
Хочу уговорить в проекте не поддерживать x32 версию, потому что лень. Но аргументов особых нет. А тут глянул на github action который питон устанавливает, в нем, например, уже забили болт на x32. Вот мне и интересно стало, как вообще с этим дело обстоит.
На линухе для внутреннего скриптинга поддерживается и для десктопов. Если пилите серверную приложуху, то нахуй не нужно.
Бери и говорил, что идет повсеместный отказ от x32 приложений и всё. Легаси трудно будет выпиливать, обновлений не будет и т.д.
Ну никто не запрещает. После рефакторинга так и вышло. 2 функции принимают один и тот же аргумент. Можно конечно консолидировать в один метод, но нахера?
Скорее всего последнее. Покажи код.
Замыкание или класс/словарь/контекст/etc в принципе замыкание это то же самое.
> Complex is better than complicated.
Выбирай меньшее из зол. Раньше ведь всё равно было хуже.
>Использовать объекты, чтобы передавать только его и его полям обращаться просто?
Эти функции сделать его методами и в конце каждого метода возвращать self, тогда можно будет строить цепочки методов уровня GentlemanUdachi.ukral().vipil().v_turmu().
>Сроду не следовал этому. Как удобнее/эффективнее/проще/нужно по ситуации - так и делаю
Если ты что-то пилишь для себя, то вопросов ноль. Но это большая боль поддерживать чей-то код, который не следовал дзену.
Дзен - это устная договоренность между всеми кодерами работающим с эти языком. Никто конечно и в жизни не запрещает никому вести себя как мудак, но это моветон. Для этого есть другие языки.
По этому при собесах я отдам предпочтение тому, кто прошел курсы, чем тому, кто вкатился именно в питон по книгам. Код намного приятнее читать. И уж лучше такого джуна доучу, чем переучивать книжного.
Это конечно не абсолют, и там и там есть нормальные и не нормальные, но примерно 80 на 20 по моим субьективным наблюдениям.
>По этому при собесах я отдам предпочтение тому, кто прошел курсы
Ты хоть чуть чуть эти курсы видел изнутри? Куча народу, препод даун с зп 30к рублей и абсолютно похуистичное отношение, когда нихуя непонятно.
Анон, правильно ли я понимаю, что "Дронов Владимир - Django Практика создания Web-сайтов на Python" это кал, а не книга и вкатываться с её помощью бессмысленно?
Видел. Есть крутые курсы и это не гикбреинс и не скилбокс, но не буду писать, так как меня обвинят в рекламе)
И там сидят преподы не на фул зп, а чисто как подработка.
>а чисто как подработка
И нахуя им это? Только если это при какой-то компании, где самых толковых хантят
Может тебе еще и лямбды трудны для понимания и ты везде их выпиливаешь в короткие функции?
In [1]: data = [1, 3, 5, 7, 9, 11, 13, 15]
In [2]: print(list(filter(lambda x: (x % 3 == 0), data)))
Тебе наверно очень трудно будет прочитать то, что выше? И ты создашь отдельный список, куда в итерации будешь пихать результат?
Пример. Есть юнит тест, который возвращает в stdout что-то. Есть конфигурация теста, где есть настройка типа printout - True. Нужно в конфтест файле прописать такую ботву, что если настройка Фалс, то не печатает, а если тру, то печатает. Как такое запилить?
[Start run_all.py]
[Go to Dir /root/main]
[Run main.py - argument]
[Wait 80 sec]
[Go to Dir /root/test]
[Run test.py - argument]
[Wait 80 sec]
[End. ]
[Kill all process]
Только тут два скрипта, а у меня будет десять.
Как это делать? Я только Паскаль учил.
Есть ли книжки по созданию telegram ботов? Или только документация?
>print(list(filter(lambda x: (x % 3 == 0), data)))
Пока filter возвращал список, а не итератор, я именно так и писал, но на сегодняшний день print([x for x in data if x % 3 == 0]) и ближе к PEP8, и лаконичнее. Конструкция "x for x in data" конечно способна вызвать реакцию "ачё вообще)", но это дело привычки. Как list(filter()). Главное обсудить с коллегами, как писать, и закрыть вопрос.
Если знаешь можешь помочь? Нужно чтобы бот каждый определенный день присылал уведомление и в то же время можно
было запрашивать у него другие функции, для этого нужна многопоточность, да? Я просто с ней еще не связывался, учусь только, поэтому не шарю
Не нужна многопоточность
> Если ты что-то пилишь для себя, то вопросов ноль.
Ну, это, кстати, до тех пор, пока в первый раз про какой-нибудь мини-проектец позабудешь, а потом откроешь его через месяцок-полтора с отвисшей челюстью.
> print(list(filter(lambda x: (x % 3 == 0), data)))
Вот это, вот, вообще хрестоматийный пример того, как не нужно использовать пайтон.
>Напишите функцию, выводящую список целых чисел от 1 до 100, но вместо каждого числа, кратного 3, она должна выводить «Fizz», а вместо каждого числа, кратного 5, выводить «Buzz». Вместо чисел, кратных и 3, 5, программа должна выводить «FizzBuzz»; все остальные числа должны выводиться без изменений.
[(lambda n: { 1: n, 6: "Fizz", 10: "Buzz", 0: "FizzBuzz" }[n4%15])(n+1) for n in range(100)]
Сосай)))
Bump
Есть, Д. Кнут "Искусство программирования"
Любовь к делу плюс подработка)
Нет не степик)
ну кстати да, прикол курсов в том что там именно с самого начала заставляют учить хороший тон, чтобы не было всякого пиздеца
хотя даже курсы не помогают часто.
некоторые кодят так, словно блядь они ебашат от балды, никакой логики, структуры.
просто набор рандомного кода, который работает, но непонятно как и при этом еще может выкидывать всякие побочные эффекты ебовые, лол
file это переменная в листе files в данную итерацию, т.е. если у тебя первая итерация то file равно первой переменной из files,вторая итерация-вторая переменная и т.д., тоже самое работает со строками и т.д., с числами используется range.
>прикол курсов в том что там именно с самого начала заставляют учить хороший тон
Речь про какие-то конкретные курсы или о ситуации в целом?
Я вот вкатывался, просто изучая популярные репозитории с множеством звездочек на гитхабе, лол. Да, конечно это нихуя не гарант чистого, структурированного кода, но если у проекта много контрибуторов и он популярный, то скорее всего разрабы используют какой-то общий для всех кодстайл и пепы.
И вкатывался я сразу в веб на aiohttp/fastapi/sanic, а не с православных джанги/фласка. Вот недавно скачал курс по этой самой джанге. От otus, вроде. Ну полная хуйня на мой взгляд, сразу же не понравилось. Вроде 20 год, свежачок, а ведущие тратят часов 10-15 на устаревшие практики из древнего мира, типа фуллстека на одном фреймворке в монорепе с деплоем через ручную загрузку файлов на сервер. Никакого докера и прочих дев тулзов; хотя по идее, к этому почти сразу нужно приучать. Так вот кстати и не могу подружиться ни с джангой, ни с её рест частью - отторгает. Работу щас немного проблемно искать из-за этого.
У всяких либ зачастую код весьма говнист в угоду универсальности.
ну на кусере те курсы что я видел там сразу же поясняют за пепы и как не стоит делать и т.п.
Это те курсы где преподы с универов
как скачать все книги с sync'а?
нет, прост они дрочат академически а не ебошат отсебятину типа -я так делую ёпта, и ты так делай.
>>75265
ну так курсы тебя не познакомят с опытом разработки.
они дают теорию и направление, а опыт разработки уже самостоятельно будешь получать.
например чел пояснил какими путями можно реализовать программу и какие есть паттерны.
и даются задания на реализацию.
оценка идет по результату работы.
То есть никто не мешает тебе конечно напердолить как хочешь, хоть в 1000 строк пиздануть вместо 100.
но это уже будет твой опыт личный.
А если не слушать что говорят и делать как сам хочешь - можно привыкнуть и хуярить горы непонятного кода на постоянной основе, такой себе опыт разработки.
к тому же, как говорят, на собесах как раз таки проверяют как ты хуяришь код, типа в конторах часто есть свои порядки как писать, и если ты ебашишь от балды то это неприемлемо.
ну это конечно мое мнение с дивана, может я неправ.
Есть курсы, где помимо наставника есть ревьюверы, которые тебе дают фидбек по твоему коду)
Ну в курсере тоже можешь обращаться в телеграм там и т.п. или на форуме спрашивать.
там кстати есть и задания которые сокурсники оценивают.
Но там обычно от балды ставят сразу зачеты, ибо им лень проверять, лол.
Плати мне, я могу ревью твоего говна под названием код проводить
Ага, по личному желанию перебрать тонны говнокода, вести лекции, слушать вопросы долбоебов вместо того, что бы в конторе код писать и все наивысшего качества
Есть такая черта как твердолобость. Друг, никого не хочу оскорблять, но попробуй посмотреть на разные вещи, во первых под разных углами, а во вторых отличной от твоей точки зрения. Тем более ты работаешь в той области, где каждый год приходится изучать что-то новое, чтобы оставаться на плаву.
Хорошо, покажи мне хоть один курс с преподавателями не-долбоебами, которые не смогли вкатится и не при какой-то фирме, которая выпускников потом себе берет.
Ну, я вообще не программист. В общем я выебал мозг знакомому программисту и он мне сделал.
Там просто ос.систем и тайм.слиип
Для этого лучше годится тот же sqlite.
А для твоего варианта, делаешь comps_news словарем и ключом url.
Потом просто делаешь comps_news.keys() - news_note и получаешь сет новых, по нему итерируешь и достаешь из словаря.
В одном из них хочу сделать относительный импорт
from .file1 import function1
Но получаю ошибку
ImportError: attempted relative import with no known parent package
Если бы я делал
from file1 import function1
Все бы работало.
Перечитал первые ссылки в гугле и так и не понял как это работает.
Пробовал создать файл __init__.py но проблему это не решает.
Пробовал делать точку входа if __name__ == '__main__':
То ли, надо какую-то структуру проекта указать.
Объясните пожалуйста, что нужно сделать чтобы заработал относительный импорт.
Я читал это. Стена невнятного текста через гугл транслейт. Объясни как мне сделать чтобы заработало.
И как надо делать.
И я вообще решил что нужно делать такой импорт, потому что, так делают во всяких джангах. И мне также надо делать.
Есть, но он публичный.
Первым делом делаешь виртуальное окружение.
Таким образом у тебя будет корень проекта в путях. Тогда ты сможешь делать такие импорты
Попробуй читать, что написано. Просьба не о красивом языке, а о красивом стиле. Говнокода от вьетнам-стайл до 8"Б"-стайл на питоне - полон гитхаб.
Блять анончики я наверное совсем тупой раз не могу настроить вскод. Крч смотрите ситуацию, скачиваю вскод, скачиваю питон.exe , потом в вскоде устанавливаю питонское расширение и как бы все. потом ввожу условно код типа пика и во встроенной консоли ничего не появляется, ни запроса на введение икса ни чего то еще, то есть программа как бы запускается там виддно в терминале но какие то действия нельзя выполнить, объясните пожалуйста что я вообще не так делаю инб4: учишься кодить
Ладно, я дегенерат надо было вывести принт функции, но с другой стороны почему в видеоуроке который я смотрел пользуясь другим редактором не надо вводить print и он сам запрашивает число а в вскоде надо ух ебать мне времени понадобилось чтобы допереть до этой мелочи
Пусть даст сотню тысяч пар рисунок-копия с оцененным процентом, и я решу эту задачу за косарь.
Да по процессу на ядро, ничего не изменилось. 15 миллисекунд на вызов, numpy "местами" - кажется, сейчас выгоднее потратить время на оптимизацию (подойдет ли numba?). Быстрый код на питоне - это такой код, который как можно реже и на как можно больше долгое время отдает управление коду не на питоне.
Потому что в видеоуроке редактор (IDLE) после запуска файла переносит тебя в режим REPL, в котором ты вводишь команду, а она сразу же исполняется. Это интерактивный режим для набросков и быстрых тестов, который например включается, когда ты запускаешь питон из командной строки.
В VSCode включается исполнение файла, где ты сам контролируешь, когда просить у пользователя ввод (функция input) и когда делать вывод (функция print). После того как программа завершается, интерпретатор выключается, процесс завершается. В интерактивном режиме такого не происходит, и выход нужно запросить отдельно (закрыть окно, нажать комбинацию клавиш, вызвать специальную функцию и т. д.)
Ну покажи код хоть.
Знатоки, подскажите если знаете - этот https://ideone.com/f3kWZ4 код нормально выполняется на сайте, но довольно странно выполняется в убунте. В убунте получаю вот такой результат:
# echo '1' | python3 pytest1.py
STDIN=1
RES=1Z
Z
С чем это может быть связано?
А вот виртуальное окружение, это типа хорошая практика, да?
Есть способ захватить переменные в функцию по значению, а не по ссылке? Я не знаю как это называется в вашем языке.
Не очень приятный в использовании код получается, если вручную эту проблему решать.
Этот код с добавлением лямбд функций в список в методе класса происходит, не в глобальном пространстве, естественно.
легко, у тебя скачан питон? если да зайди в настройки и выбери интерпритатор, в винде лежит в %appdata%, после перехода в аппдату переходишь в каталог выше, там либо в локал либо в другой папке папка питона,тебе нужен python.exe
Чем чаще я смотрю исходники популярных либ, тем больше убеждаюсь в этом
Какой нибудь SOLID ещё ок, но это достаточно интуитивная вещь
Так тут говно потому что все методы в одном классе вместо расширения, лол. Паттерны у него говно
Меня тут жизнь зафорсила на изучение питона и мне понравилось.
Хочу для удовольствия сделать несложное приложение с интерфейсом, работающее на Windows. Через что это делается, что мне для этого нужно знать кроме базового синтаксиса питона?
Я понимаю, что этот язык обычно используется для других дел, но сейчас интересно именно с таким поебаться.
Спасибо!
Kivy, KivyMD(Material Design)
Далее идет простыня текста человека, которому заплатили за рекламу. Можно не читать.
Яндекс выпускает годных студентов, более того, часть наставников - это действующие сотрудники. Но лишь малая часть студентов устраивается в саму компанию.
Более того, у них неплохой роадмэп по обучению, с тренажером, ревьюверами, наставниками, с портфолио и дедлайнами во время обучения. В обучении так же входит командный проект, где дают тебе пощупать гит и вот это вот всё. Работа с докер, у бэков курс по алгоритмам итд. Вся переписка студентов проходит в слаке.
А в конце HR будут давать тебе фидбэк по твоим собесам, будут вылизывать твое резюме до тех пор, пока ты не устроишься.
Я не знаю откуда они вылезли, но по мне так всё идеально. Не знаю как на практике.
import this
Спасибо, и впрямь добавляет.
Скиллбокс лучше.
А в чем беда читать книги, смотреть бесплатные курсы, а корочку получить в каком-нибудь говне типа СИНЕРГИИ?
>а корочку получить в каком-нибудь говне типа СИНЕРГИИ
Достаточно любой заочной дистанционной вышки
В синергии говорят часто кидают на последних курсах
Ну, я и подразумевал заочные дистанционные вышки, синергия просто как пример совсем уж лютой параши. Раз уж общество требует от тебя корочку, то можно её просто где-нибудь пассивно получить. Всё равно в России не существует централизованного высшего образования по направлению разработки. Чистая математика - может быть, вполне. Учитывая достижения на олимпиадах различных. Но "айти образование" в РФ - это пиздец.
>В синергии говорят часто кидают
Как эта залупа вообще до сих пор существует? Они же без гос.аккредитации.
вроде бы гос. аккредитация у них есть
Выше уже писалось, что питонистам важно, чтобы import this соблюдался. Быстрее научить с нуля писать читабельный, технологичный код, чем переучивать уже набившего руку спеца. В общем наверно холиварная тема, но я согласен с предыдущими сообщениями на эту тему. Те, кто сумел по книгам прийти к дзену, еще большее уважение.
>import this
Там все настолько расплывчато и со столь свободной трактовкой, что при обсуждении кода выйдет победителем самый гуманитарный среди всех разработчиков.
Как на Пистоне смержить 2 отсортированных массива? (чтоб получился другой отсортированный массив). Есть дефолтное решение как на скрине, а в либах есть че-то подобное?
Неплохо, но неэффективно
У тебя уже 2 Array отсортированы, а ты херишь это когда вместе их склеиваешь
В твоей задаче в любом случае будут потери на дополнительную сортировку. Это самый лаконичный вариант.
В смысле расплывчато??? Ты пишешь импорт зис и получаешь список правил. Что расплывчатого?
На какую дополнительную?
sort сработает быстрее только потому что он на си реализован, и собственный алгоритм слияния будет тормозить из-за того, что интерпретатор питона вместо скомпилированного кода. При больших числах это сказывает и f начинает догонять g.
В первой строчке количество элементов, во второй время выполнения - код на третьем пике.
А если прикрутить нумбу, то собственный алгоритм обгоняет без каких-либо шансов твой sort, потому что sort тут не нужен от слова совсем.
На самом деле я не верю что в питоне нет функции для слияния сортированных массивов которая уже как sort скомпилирована - а я просто её не знаю.
Да.
Вот ещё нашёл: https://habr.com/ru/post/510970/
Получается просто из-за ограничений языка полный sort быстрее всего оказывается.
Спасибо
Скажите, на сколько достоверна эта паста:
Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода - PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты
Поясните за setup.py
Когда он нужен? Я ведь могу просто добавить нужную мне версию либы в requirements.txt и потом установить все через pip install -r requirements.txt
Это вариант системы поставки. Как гугл будет запускать твой проект, когда купить его у тебя? python laba1.py? Хуй там. Хочется установить и запускать как нормальный пакет https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html#the-console-scripts-entry-point
Начни с tkinter, если прям базово знаешь питон.Эээхх, помню свой калькулятор на ткинтере...
Поясни тупому, почему ты цифры поставил в группу () и зачем обозначил конец строки $?
Группы
r = match(regex, string)
r.group(2)
Выдает значение второй группы сразу. В документации написано, но всем похую. $ конец строки
Вот чтобы ты мог "просто добавить нужную версию либы в requirements.txt и потом установить все через pip install -r requirements.txt" разработчику этой самой либы может понадобиться setup.py.
>>76224
Что за синергия и почему кидают?
>>76134
У яндекса курсы прикольные, но мне не понравилась тема что на тренажере у них например ты написал код, и он блядь работает.
но проверку не проходит. Я один раз охуел не понимал как такое возможно.
потом оказалось что нужно было писать путь к файлу на чтение, как указано в задании.
при том что блядь без указания пути в коде файл читался прекрасно.
Вот это ОЧЕНЬ ХУЕВО, уровень низкий.
>Что за синергия и почему кидают?
Вузик самого паршивого качества, где никто нихуя не делает. Кидают потому, что на последнем курсе тебе просто могут не выдать диплом/отчислить/спиздить деньги
У них просто направления не аккредитованы или как это называется, причем направление киберспорт что забавно аккредитовано, страшно подумать какие направления хуже чисто если по названию судить. А вуз частный а не государственный
А. я такие вузы кстати помню были в начале нулевых, у нас даже был вузик, состоявший полностью из пидорнутых с подобного универа преподов, а декан был бывшим директором такого вуза.
их пидорнули как раз потому что не было у них никаких аккредитаций и лицензий.
На одной виндовой машине использую скомпилированные pyinstaller'ом скрипты, и в какой-то момент они перестали работать.
Вылезает ошибка
PermissionError: [Errno 13] Permission denied: 'files_list.txt'
на строке открытия файла
f = open(filesList,'w')
Я как бы не полный дурак, читать умею. Все права выставлены правильно, запуск от имени администратора не помогает.
Смущает то, что при запуске .py-файла все отрабатывает хорошо. Что за ебаный нахуй?
Видел как в проекте одну новую либу одновременно занесли в requirements.txt и заделали setup.py файл. Нахера?
хочу написать свой интерпретатор для fim++ на питоне
в ходе размышлений понял, что мне надо как то создавать функции. Функции самые простые. можно, конечно, прибегнуть к кодогенерации в отдельном файле, но это какой-то костыль.
потом я вспомнил, что все в питоне есть объект, и начал копать в класс function, который должен быть ключом к решению моей задачи. Так вот, у меня несколько вопросов.
1) где можно посмотреть исходник этого класса
2) может быть, я снова занимаюсь хуйней, и у этого класса есть какой-то супер конструктор, в который можно передать код функции и он вернет экземпляр?
3)пока копался в этом классе, нашел конструктор этого класса, но вызывается он максимально неудобно: def test(): pass; test.__class__ . Вопрос: можно ли сделать это другим способом?
по сути, мне нужно посмотреть на исходники, дальше, наверное, я сам разберусь, но может кто-нибудь уже решал такую задачу
Да, снят.
Вообще, только что решил проблему. Добавил экзешник в белый список ебаного Аваста и все заработало. Сука, я чуть кукухой не поехал из-за этой хуйни.
на самом деле, не снят. Compile создает файл с кодом, я хочу этого избежать
>в ходе размышлений понял, что мне надо как то создавать функции
...
Через def функции создаются, ты о чем вообще?
>>77025
Нет, это поднимает другие вопросы. Какой к херам eval и compile? Ты отменного говнокода что ли навернуть решил?
Функция это объекта класса у которого определены методы __call__ и __get__ - пили и модифицируй как тебе угодно
Учил джангу. Вкатился на Торнаду и аиохттп. Для себя пилю на sanic/fastapi. Скоро буду менять галеру, вообще похуй на какой фреймворк - все однохуйственно
да я понимаю это, а еще я опечатался, не eval, а exec. я хотел создавать функции на лету, но, возможно, это плохая идея. да и через exec тоже какая-то хуета получается. наверное стоит сначала создать все функции, а потом уже исполнять программу. в проектировании компиляторов, интерпретаторов я не силен вообще, мне в унике дали таск такой, приходится что-то придумывать
я в тот тред зашел?
еще говорят про какой то "нопитон"?
типа - держу нопитон уже три дня, полет нормальный.
>Скажите, на сколько достоверна эта паста:
Известная паста, но очень старая. Религию из PEP8 делать не надо. Tornado/Gevent устарели, вместо gevent сейчас asyncio. Вместо Tornado другие асинхронные фреймворки.
А хайлоад и технологии это как раз всякие Apache Hadoop и другие модные слова, вот их надо изучать и понимать.
Джанго сложнее, по этому я бы с нее начал. Потом бы пощупал фласк.
Например:
есть условный список списков:
main_list [
[word1, word2],
[word3, word4],
[number1, word5]
]
нужно чтобы он стал словарём:
main_dict {
'word1': 'word2', 'word3': 'word4', number1: 'word5'
}
пик_рандом
Странно, у меня выдаёт такую ошибку. Первый элемент недостаточной длинны?
ValueError: dictionary update sequence element #0 has length 0; 2 is required
import re
import json
filepathw = "/home/test.json"
filepath = "/etc/nginx/conf.d/hosting.conf"
data = []
dom = None
result = None
parser_dict = {}
with open(filepath, 'r') as conf_line:
for conf_lines in conf_line:
description = conf_lines.strip().split(None, 1)
dom = description
data.append(dom)
parser_dict = dict(data)
print(parser_dict)
with open(filepathw, 'w') as file_write:
json.dump(parser_dict, file_write, indent = 4)
Почему многие их пишут как в нижнем варианте?
Значит у тебя список не такой, как ты указал в прошлом посте.
>>77350
И код твой довольно бессмысленный, если ты json файл не прикрепляешь, не говоря уже про то, что ты никак не используешь то что у тебя json файл, а не просто файл.
Если у тебя пустая строка в начале файла, то он всегда будет на ней падать. Или если там фигурная скобочка и больше ничего нет.
У меня ноль идей, почему ты не написал print(data) и не посмотрел что за кашу ты там считываешь, а вот писать список вручную в посте >>77339 тебе не лень.
Недавно в радиоте этот солид обсирали, как раз за то что каждый его по-своему понимает и за то что применять его хоть как-то можно разве что в жаве. Паттерны хуйня. Можешь считать что property, classmethod, декоратор, дескриптор — это тоже паттерны. Они у каждого языка свои. В хаскеле всякие лифтинги с линзами паттерны. Те паттерны про которые все слышали по сути все из жавы или шарпа.
Код с третьей картинки же.
t1=time()
...
t2=time()
return t2-t1
Там есть модуль timeit - используй лучше его. Я просто не питонист и было впадлу вникать как тут измеряют производительность нормальные люди, или как передать в timeit не просто функцию, а ещё и аргументы к ней без строки - потому просто большие числа поставил, чтобы время выполнения было сопоставимо с точность time()
Если бы я писал что-то на питоне - я бы настроил под него kcachegrind, просто потому что мне оче нравится картинки из него.
> чтобы вложенный список стал парой "ключ:значение" и каждый первый элемент внутри вложенного списка стал ключом
{item[0]: item[1:] for item in main_list}
key=lambda team: winners[team]
Что конкретно эта лямбда делает? Ну, те я понял, что она сортирует ключи по их value, вместо алфавитного порядка, но может мне кто объяснить как это работает?
Алсо, поч дебагер отказывается видеть файл? Сам по себе скрипт прекрасно отрабатывает, но вот дебагер VSCode работать отказывается.
>я бы настроил под него kcachegrind, просто потому что мне оче нравится картинки из него.
Есть пособия по этому:
https://julien.danjou.info/guide-to-python-profiling-cprofile-concrete-case-carbonara/
Но это не даст тебе построчного анализа, сколько какая строка работает. Но для какого-то анализа может быть полезно.
timeit так себе вариант, слишком синтетический для очень ограниченных случаев.
> если прикрутить нумбу
Можно, в принципе, что угодно прикрутить - вопрос целесообразности. Если речь идёт о каких-то двух несчастных массивах в пределах тысяч элементов, не вижу никакого смысла использовать что-то, кроме sorted() или ".sort". Дальше уже можно задуматься.
Потому что так удобнее редактировать список и меньше конфликтов в гите. Ещё после тройки надо запятую поставить и будет как надо.
Это копия, сохраненная 26 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.