Это копия, сохраненная 2 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1883441 (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
Уже решил, я еблан
Подумалось мне, было бы неплохо осуществлять с кем-то совместно вкат, можно вопросы друг-другу задавать, объяснять темы, пилить совместные проекты.
Всё что имею при себе - базовые знания питона и программирования (переменные, циклы, ветвления, списки, словари, исключения вот это всё).
Если кому интересно пишите на фейкомыло
Подумалось мне, было бы неплохо осуществлять с кем-то совместно вкат, можно вопросы друг-другу задавать, объяснять темы, пилить совместные проекты.
Всё что имею при себе - базовые знания питона и программирования (переменные, циклы, ветвления, списки, словари, исключения вот это всё).
Если кому интересно пишите на фейкомыло
не наебнется ли сильно ничего, не зачмырят ли вообще за использование питона а не R какого-нибудь?
Чиво? Что тебе мешает считать в нормальных числах а после манипуляций с ними перевести в "очень маленькие"?
Что-то я не врубаюсь, каким именно образом в Пистоне реализована асинхронность на коллбэках? Вот скрин из одной небольшой проги-примера которая ходит по нескольким url которые заданы у нас в списке. Я конечно понимаю что на верхнем уровне у нас пиздато исполняется функция http_client.fetch которая ничего не блокирует и ждет получения результата чтобы "выстрелить" коллбек но... как это блин происходит? Если я захочу написать такую же функцию которая работает на коллбеках я тут же упрусь в том что моя функция после вызова заблокируется, "застрянет" и будет ждать исполнения кода прежде чем задействовать коллбек
Как это блин работает?
Какое блять "легаси"? Асинхронка на коллбеках это основа основ. Вся асинхронность жс тоже восходит к ним, только вот там ивенты и коллбеки нативно вписаны в движок, поэтому вопросов к работе кода на пикриле не возникает
Хз что там в этом торнадо. Скорее всего fetch ничего не ждёт вообще, эта функция регистрирует коллбэк для соответствующего url
А дальше запускается цикл обработки сообщений, который принимает входящее соединение, парсит его, и как распарсит, так вызывает соответствующий URL.
Тут вообще такого настоящего асинхронного нет, асинхронное если есть, то в функции обработки и парсинга входящих соединений.
ps: и да, тебе надо смотреть на асинхронность в asyncio и фреймворки, на нём основанные. Торнадо это уже легаси.
Основа основ это посмотреть исходники твоей легаси либы и понять как она работает. Тебе дали нативный async/await бери и пользуйся.
>Тебе дали нативный async/await
Ммм, тебе бы на жопаскрипте писать. Дохрена макак сейчас развелось, которые про Промисы не слыхали нинужно жи!, но зато async/await вовсю юзают, правда чуть чего несутся роняя говно к своему сеньору-помидору чтобы пояснил почему их дерьмо вдруг плюется ошибками
Сьеби в жс тред.
>джанга может в async await
Норм посмешил. async-await уровня /b просто
ты щас кекнешь, но Торнадо асинхронный by design, и поддержка async-await там подрублена начиная с 2015
Обратный звонок, звонок назад
Норм люди юзают fastapi, а джанга актуальная за счет кучи готовых фич из коробки.
Джанго это очень серьёзный фреймворк для CRUD серверов. Немного легаси, так как его проектировали синхронным, пытаются добавить асинхронность, но с болью. Но замены ему нет, он единственный в своей нише.
Торнадо асинхронный фреймворк, сделанный ещё до asyncio. Имел своё велосипедное решение для асинхронности. Но вроде поддерживает как-то не очень прямо и asyncio. Тем не менее это тормоз, фреймворк не даёт дополнительных возможностей относительно более новых, которые проектировались под asyncio, при этом проигрывает им в производительности. В общем классическое legacy.
Future это аналог промисов. Это некоторый объект, который может быть в нескольких состояниях, хранит список коллбэков, которые надо вызвать, когда объект будет исполнен.
Task это задача, которая зарегистрирована в цикле обработки событий. Цикл обработки отвечает за то, чтобы периодически переключать исполнение на эту задачу, когда она временно отдаст управление, переключать на следующую.
Менее очевидная разница между корутиной и задачей. Корутина сама по себе в цикле не зарегистрирована и передачи управления на неё не происходит. И если ты в коде напишешь
await my_coro()
и внутри корутины явно регистрации задачи не происходит, то у тебя выполнение останется полностью синхронным.
Достали сайты, которые меня отвлекают. При этом, например хочу заблокировать /b/, но оставить тематику.
И хочу это сделать с помощью питона. Подскажите в каком направлении копать.
linux, firefox
тупанул и массив не правильно создал, вопрос снят
>И хочу это сделать с помощью питона.
Сложно или невозможно. Просто настрой адблок и будет тебе счастье. Только ты же его сам постоянно отключать будешь.
Иначе тебе нужно делать прокси. Причём или веб прокси, который будет качать сайт и подменять URL, или тебе придётся возиться с сертификатами, делать подмену сертификатов httsp, прописывать в браузер свой сертификат и т.п.
Потому что браузер устанавливает с сайтом защищённое соединение и просто так вторгнуться в него и фильтровать url ты не можешь, максимум ты можешь доступ к доменам ограничивать.
Короче единственный разумный вариант это адблок настроить.
Ни в чем, это общий подход для отказа от callback hell, вся суть в синтаксическом сахаре и необходимости loop в питухоне
TaxVAT. Если TaxVat ещё могу превратить в tax_vat, то как быть в первом случае? Даже в headings не превратить
map и другие подобные фичи подходят для прогнать какую-то небольшую операцию для коллекции и получить результат.
Ты можешь изъебнуться и заменить ими вообще все форы, но это будет громоздко и неочевидно.
Давайте теперь все говорить как умственно отсталые потому что васе орку который питается стекломоем непонятно. И считать на пальцах и счета с костяшками тоже. Так?
В жс-треде буквально недавно был очередной срач на тему. Какой-то пизданутый ФПшник верещал что обычные циклы нинужны и по возможности надо всего городить map-reduce-filter парашу ибо "так пиздатее"
Только вот цикл for максимально нативен и понятен и часто нет нужды городить конструкции из хуй пойми чего лишь бы ублажить ФПшника
Но мап действительно не даёт никаких преимуществ. Давал бы, если бы бы лучше поддержан в языке, если бы можно было бы цепочки вызовов делать
my_array.map(foo).map(fuzz).filter(buzz)
но в питоне этого нет.
В питоне реализовано так, что никаких преимуществ относительно генераторов списка или генераторных выражений нет. Причём генераторы списков куда более понятные и читаемые.
Цикл целиком слишком громоздкий, map может сократить код.
Но конкретно в питоне есть генераторные выражения, которые фактически один в один транслируются в map, и поэтому map теряет смысл. Хотя вложенные map, наверное, всё-таки более читаемые будут, меньше скобок и символов, больше слов.
Если бы в питоне можно было нативно цепочки из map и других функций делать, был бы смысл. Но этого нет.
В случае если ты один раз в теле цикла используешь t-квадрат да. Но если несколько раз, то в цикле придётся или делать дублирование кода, перемножать каждый раз, или вводить дополнительную переменную.
И в чем проблема? Если у тебя какая-то простая трансформация, то можно обойтись однострочником без переменных, а в форе можно и развернуться.
Для map да, большого профита нет. Одна дополнительная строчка в теле цикла читаемости добавит.
filter может дать куда больше профита, потому что его придётся заменять тем, что в теле цикла вставлять if-continue, что усложняет логику кода и не очень красиво.
А filter дополнительно можно обернуть в enumerate, и тогда уже эквивалентную логику сильно сложнее реализовать.
Вообще смысл в том, что map-filter и т.п. операции по-настоящему стреляют, когда объединяются в цепочки. Но в питоне это не поддержано как следует, а потому неудобно и смысл теряется.
Не знаю, не проглотит ли двач что-нибудь. Пример:
with open('file.txt', 'rt', encoding='utf-8') as ff:
____for index, line in enumerate(map(str.rstrip, filter(str.strip, ff))):
________print (index, line)
код, который читает текстовый файл, игнорирует пустые строки (включая состоящие из одних пробелов), и выводит на экран номер строки в отфильтрованной нумерации, с обрезанным заключительным "\n"
Немного громоздко, но во что превратится код, если вот этими трюками не пользоваться? Придётся добавлять в теле цикла проверку на пустоту, заводить свой счётчик строк и инкрементировать его, потом отдельно обрезать.
Не скажу, что это какой-то прямо жизненный пример, чисто иллюстрация идеи.
На практике ограничения на map-filter довольно большие, приучаешься поэтому ими не пользоваться даже тогда, когда было бы с ними лучше.
Куда торопишься? Серьезно, питон не про скорость.
Да не очень
python3.8 p.py
result: 333332833333500000, worktime: 0.183s
result: 333332833333500000, worktime: 0.236s
Разница есть, но треть. И это только потому, что очень примитивные операции, на которых скорость точно не про питон. Под pypy при этом работает раз в 30 быстрее где-то, там другие соотношения, в зависимости от версии, но для объективного результата надо тест-платформу переделывать.
Ну я так понял мапы-фильтры хватанули где-то на старте из других языков, а потом уже допилили свои нативные и более выразительные компрехенсы и генераторные выражения, а эти остались как легаси. Иногда можно ввернуть красиво, не более.
Но с условиями реально коряво, ждем когда морж пойдет в люди, уже хоть что-то.
Если выберу с 1 по 10, то 10 столбов. Как это реализовать?
Епт, что за фреймворк у тебя?
Не говоря уже о том что это элементарная хуйня уровня sql и postgresql (если выберешь ее), которая трснаслируется в sqlaclhecmy, в пистон и в json
Все, понял куда посмотреть, в sqlaclhecmy. Спасибо, мне это и надо было
короткий ответ: нахуй иди.
развёрнутый ответ: смотри что происходит в фетч, а потом иди нахуй с калбеками.
это на джаву парашу походит. ведь нет ничего читабельней чем my_array = list(filter(buzz, map(fuzz, map(foo, my_array))))
Читай про эксепшны и варнинги.
Для изучения не важны, а для практического применения важны.
Книжек несколько классических ходовых есть, найти несложно.
wsl есть если тебе нужен софт под линух, редис или какая какая нибудь бд типа постгресса
Появился хитрый план сэкономить переменную, но похоже он не увечлся успехом. Я открываю файл, кидаю туда данные и сразу закрываю его, но как я понял, так делать нельзя?
https://ideone.com/fMWaMZ
А есть какая-нибудь ультимативная книга на русском языке типа: "Все алгоритмы для конченых даунов за 3 часа"? Чтобы прочитал её и обрёл дзен?
А на табуляцию у тебя не ругалось, не? А почему? В примере выше же табуляции нет
>Например мне нужно чтобы TypeError вообще не участвовал в одном блоке
...
Просто не лови его в try-catch try-except блоке вот и все
Вернее лови вот так
Не кидайте палками, я только спросить: очередной вкатыш, появилась потребность вывода уведомлений-напоминаний на рабочий стол win 10.
На чем можно реализовать данную вещь без говна и палок? Уровень около-нулевой, поэтому и спрашиваю. Была идея попробовать сделать бота в Телеге для этих целей, но может, есть что-то лучше?
Я полазил по его коту на гитхабе и, к сожалению, мало что понимаю. Ну, разве что, кроме синтаксиса.
Сама идея в том - чтобы написать это все с нуля, дабы понять что и как работает.
ну и зачем? я бы лучше задрачивал типовые задачи из практикума по программированию.
Неужели за ночь здесь не пробегало ни одниго человека, которому приходилось прикручивать к джанго сайту типовую регистрацию?
А почему? Мне как-то говорили, что будет логичнее и правильнее взять пет-проект и хуячить, собственно. Практика там, все дела.
Практикум - это те задачи, которые будут встречаться и в работе?
https://stepik.org/course/56240/promo Ты про это?
у меня просто такое мнение, что сначала надо фундамент выучить, а потом свой пет-проект хуе-муе.
Мой код:
args = [параметры]
try:
subprocess.check_output(args, shell=False, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as ex:
return False
Пробовал Popen и check_call, но разницы нет.
Подозреваю, что опция startupinfo может помочь, но не знаю пока что в нее писать.
Да, это работает. Но это костыль.
Получше нашел кое-что:
передать в Popen аргумент startupinfo=si, а перед этим выставить
si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
Тогда консолечка не возникает, но фокус у окна куда-то пропадает (как и в случае с shell=True, собственно)
Попробую фокус обратно вернуть через какой-нибудь дополнительный вызов.
curl -u username:password -T path_to_file "https://my-cloud.com"
У Мэтиза про это не написано, в гугле говорят по поводу пустой строки, но я не понимаю.
А вообще, я пытаюсь начать проход цикла поновой при нужном аргументе, но это уже другая история
Потому что елиф ставится в середине блока условий
Иф>Елиф>Элсе
У тебя всего два условия, значит закрываться все должно Элсе
у елиф должно быть ещё своё условие, а ты его пытаешься использовать как элсе
>>901023
>>901027
Понял, принял, спасибо.
Может, еще натолкнете на мысль почему continue (в моем понимании) работает не так, как я этого хочу?
Написав строчку if sandwich_order == 'sandwich_pastrami': continue
, я предполагал, что цикл начнется по новой и не будет включать сандвичи с пастрами. Что я сделал не так?
пишу с помощью telebot, да, знаю, python-telegram-bot или как там его вроде лучше, но этот проще, а я совсем новичок
примерно такой кусочек кода:
if message.text == 'сап двач':
bot.send_message(message.chat.id, 'пошел нахуй', reply_markup=keyboard_russian)
и если этот бот находится в беседе, то при написании "сап двач" русская клавиатура открывается у всех кто находится в беседе
а мне надо чтоб открывалась только у того кто написал "сап двач"
как это сделать?
При этом, он не выводит первое значение (sandwich_tuna), а сразу выводит второе.
Эм, а где об этом можно подробнее почитать?
pop же убирает последнее значение словаря, но я не совсем понимаю, как это связанно с continue.
понял
А что, так низзя?
Как мне матчить вот хз какие цифры в ключах словарей?
Я конечно понимаю что можно startswith но так получаются длинные конструкции
Суть словарей в том, что ты должен знать ключи и использовать их для извлечения значений.
В случае твоего наркоманского кейса надо итерировать по наличным ключам и матчить. Но в целом так быть не должно, значит, что ты делаешь что-то не так.
Спасибо, анон.
я уже вроде сам разобрался, клавиатурам добавил selective=True а сообщениям, вызывающим эти клавиатуры, добавил reply_to_message_id=message.id
надо было просто полистать документацию к апи телегиhttps://core.telegram.org/bots/api
Ты так не только ключи, но и значения не выберешь.
Если тебе такая конструкция нужна постоянно, разумный вариант был бы написать свой класс, похожий за словарь, но поддерживающий дополнительно быструю выборку по подобным ключам.
>Я конечно понимаю что можно startswith но так получаются длинные конструкции
Добавлятся всего одна строчка.
Я полагаю что как-то через наследование можно сделать, но не пойму в каком моменте и как его применять, например я наследуюсь полностью от моделей из модуля, добавляю свои поля, тоже и с формами, как мне потом сделать так, чтобы при запросах у меня отображалась не стандартная форма, а моя кастомная
это не я восторгался
ты про что-то такое?
from collections import namedtuple
Data = (Data, ['name', 'age', 'city_n'])
my_data = Data('Vasya', 23, 'Hongkong')
20 байт же
Я попробовал создать файл, в котором кроме print("hello world") ничего нет. Потом собрал его с помощью pyinstaller. Действительно 20мб получается. Есть ли способы уменьшить размер? Хотя бы до 7 было бы уже классно.
При старте оно распаковывается в TEMP, добавь в конце time.sleep(1000) и можно посмотреть, что оно там за говна насобирало у тебя.
Попробовал собрать с nuitka, после чего запускать под докером для проверки переносимости. Всё под линуксом
--standalone --onefile
как следует не заработал, то есть собрал в один файл, выкачав какую-то библиотеку appimage с чьего-то гитхаба, локально файл запустился, под докером отказался, хочет библиотеки, как я понимаю, с того же гитхаба. То есть не переносится. А так файл был размером 12.5 Мб.
Если просто --standalone, то создаёт каталог dist размером 30 Мб. Но тоже не идеальная версия.
Если я под докером делаю сборку на базе убунты, то в ней нормально всё работает. Если же делаю сборку на базе alpine или scratch, то почему-то не хочет, видимо не хватает библиотек, по ldd много зависимостей.
Попробую минимальную докер scratch сборку сделать со всеми зависимостями, интересно, сколько займёт. И под виндой тоже надо бы потестировать.
Попозже.
Пишу тесты, эндпоинт принимает некоторые данные и файл через form-data. В данных есть nested вложенности, которые я обрабатываю в сериализаторе. Но проблема в том что из-за того что реквест идет через format="multipart", вложенности прилетают не как dict, а как str. Сталкивался кто-то с таким, и как можно это пофиксить?
Для обработки данных использую MultiPartParser и FormParser парсеры
Пока короткие извращения. Собираю hello world в докер контейнер, кладу только то, без чего не запускается.
Сборка
~/virtualenvs/python_38/bin/nuitka3 --standalone tst.py
FROM scratch
COPY . /
CMD ["/tst.dist/tst"]
Файлы в контейнере:
./Dockerfile # это не нужно очевидно
./tst.dist
./tst.dist/libexpat.so.1
./tst.dist/libpython3.8.so.1.0
./tst.dist/libz.so.1
./tst.dist/tst
./lib
./lib/x86_64-linux-gnu
./lib/x86_64-linux-gnu/libdl.so.2
./lib/x86_64-linux-gnu/libc.so.6
./lib/x86_64-linux-gnu/libpthread.so.0
./lib/x86_64-linux-gnu/libm.so.6
./lib/x86_64-linux-gnu/libutil.so.1
./lib64
./lib64/ld-linux-x86-64.so.2
du --max-depth=1
13384./tst.dist
3828./lib
180./lib64
17400.
Итого 17 мегабайт. Это минимум, без лишних библиотек, которые не используются, если их добавить, то будет больше, примерно до 30-35 мегабайт.
Часть библиотек заведомо лишние, которые для GUI.
Надо ещё под винду потестировать, но это не сегодня скорее всего. Но возможно под виндой проще и там всё соберётся в один файл без зависимостей.
Пока короткие извращения. Собираю hello world в докер контейнер, кладу только то, без чего не запускается.
Сборка
~/virtualenvs/python_38/bin/nuitka3 --standalone tst.py
FROM scratch
COPY . /
CMD ["/tst.dist/tst"]
Файлы в контейнере:
./Dockerfile # это не нужно очевидно
./tst.dist
./tst.dist/libexpat.so.1
./tst.dist/libpython3.8.so.1.0
./tst.dist/libz.so.1
./tst.dist/tst
./lib
./lib/x86_64-linux-gnu
./lib/x86_64-linux-gnu/libdl.so.2
./lib/x86_64-linux-gnu/libc.so.6
./lib/x86_64-linux-gnu/libpthread.so.0
./lib/x86_64-linux-gnu/libm.so.6
./lib/x86_64-linux-gnu/libutil.so.1
./lib64
./lib64/ld-linux-x86-64.so.2
du --max-depth=1
13384./tst.dist
3828./lib
180./lib64
17400.
Итого 17 мегабайт. Это минимум, без лишних библиотек, которые не используются, если их добавить, то будет больше, примерно до 30-35 мегабайт.
Часть библиотек заведомо лишние, которые для GUI.
Надо ещё под винду потестировать, но это не сегодня скорее всего. Но возможно под виндой проще и там всё соберётся в один файл без зависимостей.
Я вообще подозреваю, что от системных зависимостей от /lib и /lib64 можно избавиться, пронести каким-то образом флаг -static в gcc, которым всё реально собирается.
Пока не вникал особо, в реальной практике пока nuitka не использовал, ХЗ сколько там подводных камней и какие реальные возможности.
Таки декоратором придется оборачивать код из модуля, т.е модифицировать его, но ведь это неправильно
Я значит решил с помощью питона связать два компа, чтобы на них можно было играть в пинг понг, ну чтобы мячи через экраны летал. И при попытке передать координаты мяча у меня буфер сокета на сервере забивается из-за того, что на нём висят старые координаты мяча и не удаляюются. Как собственно мне удалить старые координаты мяча из буфера сервера?
https://pastebin.com/1hhJ9Hdr - Это правый кусок программы, у левого логика идентична
https://pastebin.com/cNVCvWiX - Это сам сервер
Не вникал в твой код, но ошибок там немало.
Ошибка, которая может и не стрельнёт, если пакеты маленькие - ты не можешь гарантировать, что читая из сокета пакет получишь его целиком.
Это актуально, если ты большие пакеты получаешь, которые в один ip пакет не влезают, 1400 байт условно. На пакетах в 500 байт в реальности скорее всего проблему никогда не словишь.
Сетевые программы вообще иначе пишут, через многопоточность и асинхронность. Ты делаешь синхронно, блокируясь на ожидании данных.
Если так, то это грубо и примитивно, но в первом приближении можно.
Попробуй другую схему. В месте, где ты читаешь данные из сокета, читаешь данные до упора в какой-нибудь буфер, может быть там будет один пакет, может ни одного, может пять. Как прочитаешь, игнорируешь все, кроме последнего.
ну чё добился, ммм?
знаешь, это типо классно что ты пытаешься понять чому и куда, но правда это не в таком объеме нужно ирл.
лучше учи какой-нибудь веб фреймворк, типо классического джанго, либо анинхронщины фласка.
больше опыта принесет реального.
Почему py pip istall zalupa не работает, а py -m pip istall zulapa работает?
В доках всё есть
When called with -m module-name, the given module is located on the Python module path and executed as a script.
Питон в этом случае вызывает модуль как программу. И соответственно переменная __nam__ имеет значение "__main__", в скрипте активируется код, который не запускается, когда этот скрип подключаешь как модуль.
>Почему py pip istall zalupa не работает
ХЗ как там у тебя всё установлено и настроено, ХЗ какая система.
Но чтобы работал pip как программа, как минимум он должен быть в системе установлен и доступен не только как модуль, но и как вызываемый скрипт. Что не всегда так, насколько я помню.
команда выглядит как
pip install xxxxx
или pip3, или может быть pip3.8, но без python
Надо при этом проверить, какая версия, соответствует ли версии питона.
Учился кто-нибудь по нему? Есть реальные отзывы?
Идешь на stepik и проходишь в порядке:
биггикс "поколение python"
биоинформатика "программирование на python"
биоинформатика "Python: основы и применение"
Потом, для закрепления и углубления, идешь в youtube и ищешь Тимофея Хирьянова. Смотришь и выполняешь практику: http://judge.mipt.ru/mipt_cs_on_python3/
Это правильней чем шатать модуль по идее.
Пс. добавлю что это с моей точки зрения (с точки зрения нищего) и курс по твоей ссылке вполне возможно может быть нормальным, так что это был не ответ на вопрос а просто доп. информация к размышлению.
Я помню хекслет, когда он был простым каналом на ютубе.
Везде хуево, а там-то за деньги пояснят по-хардкору, ага.
Для питоновкатунов есть официальный тутор написанный лично фюрером, остальное ненужно.
В xml нашел с помощью xpathEval интересующие меня ноды.
Теперь в списке этих нод я хочу найти их потомков по определенному названию. Не могу понять какую команду использовать. Если я использую:
xmlNodeNmae.xpathEval('запрос')
то он опять от корня ищет (зачем так сделано?), а мне надо от этой ноды, от которой запущено.
если что мой уровень: вчера закончил бесплатный курс на степике, т.е. никакой, поэтому сильно не поливайте.
Отбой, просто написал функцию перебора из элементов, которые получил от get_children
В книге все примеры на псевдокоде. В прикрепленных картинках, говорится о таком понятии как "интерфейс" и я не могу понять, как бы на пайтоне выглядела реализация примера с летательными аппаратами и аэродромом.
Что есть интерфейс в данном случае и как это все будет выглядеть в коде?
Можно пример пожалуйста
На днях делал нечто подобное.
Почему тебе стандартной xml.etree.ElementTree не хватает?
У меня это выглядит так
Хочу с помощью питона сделать лабу, там надо проверить зависимость времени запроса от размера пакета
Скачал либу icmplib, использую там ping но как только размер пакеты превышает 1000 байт он мне выдает: "[WinError 10040] Сообщение, отправленное на сокет датаграмм, было больше, чем буфер внутренних сообщений или был превышен иной сетевой параметр. Также возможно, что буфер для принятия сообщения был меньше, чем размер сообщения" (в обычном терминале все работает нормально)
Есть еще какие-то способы послать icmp-запросы и прочитать метаданные ответа? В терминале ответ он печатает на экране что не очень-то удобно
Есть ли какая-то встроенная функция, чтобы получить нужное [0, 0.1, 0.2, 0.3, ...]?
Использовал list(np.linspace(0,1,11)), так он мне показывает:
[0.0,
0.1,
0.2,
0.30000000000000004,
0.4,
0.5,
0.6000000000000001,
0.7000000000000001,
0.8,
0.9,
1.0]
Откуда там эти крохи берутся?
Инб4 [x//10 for x in range(1,11,1)]
Тогда встречный вопрос: как в питоне выполнить команду в терминале (ну допустим это subprocess.call) и что главное - прочитать и сохранить вывод из этого терминала?
А так можно было?! Где мне прокачать мышление с уровня пятилетнего? =(
Или для более быстрого вкатывания надо что-то другое учить?
Двачую, сам написал за 70 даларов вебсервис и было предложение для сайта интересного, но потом дядя забил на свою идею, но я хз все еще это мне так повезло или реально в этом потребноть нужна
Сначала там идут значения (100,200 ... 600) с шагом 100
Затем идут (1000, 3500 ... 11000) с шагом 2500
И потом (20000, 30000 ... 100000) с шагом 10000
Очевидно что это можно вбить и руками, но хотелось бы адекватный алгоритм для подобного. Да, я знаю что можно написать функцию в которой последовательно вызывается несколько циклов for где мы создаем эти значения, но хотелось бы придумать общий итератор, который выдавал бы пары multiplier (множитель, он же "шаг"), count (сколько раз надо пройтись по циклу), start (начальное значение) и который помог бы уменьшить объем кода
Php
А range для кого придумали, ебать тебя в сраку.
Для питона это нетипичный подход, из-а его динамической природы. Создавать отдельную сущность для интерфейса объекта больше подходит для java или C#, потому что у них статическая типизация, т.е. если ты в джаве создашь переменную строкового типа и попробуешь присвоить ей число, компилятор пошлет тебя нахуй, потому что это переменная строкового типа, и она навсегда останется переменной строкового типа, а в питоне пожалуйста, напишешь сначала x = "qwerty", а потом x = 5, питон все схавает. Поэтому в питоне больше в ходу так называемая "утиная типизация", т.е. если что-то выглядит как утка, плавает как утка, и даже крякает как утка, то, скорее всего это и есть утка, ну по крайней мере если надо плавать и крякать она с этим справиться.
На практике это выглядит так: если мы ждем, что на вход функции foo подадут объект aircraft, который имеет метод fly(), мы просто берем и без задней мысли вызываем в теле функции aircraft.fly()
def foo(aircraft):
...
aircraft.fly()
...
если вдруг, по какой-то причине в функцию подадут объект, у которого нет такого метода, то вылитит исключение, задача тех, кто будет использовать эту функцию проверять, чтобы в функцию попадали нужные объекты, либо обрабатывать соответствующее исключение. При таком подходе не важно, кто родитель используемого класса, важно, что у него есть требуемый метод fly().
Если хочется создать именно интерфейс, как отдельную сущность, как в твоей книжке, это тоже возможно. Можно создать класс FlyingTranspot с одним единственным методом fly(), и не делать для него никаккой реализации, типа
class FlyingTranspot:
def fly(self):
...
или даже выбрасывать исключение:
class FlyingTranspot:
def fly(self):
raise NotImplementedError
Потом все классы, которые будут использовать как летательные средства, делать наследниками FlyingTranspot, и пропиывать свою реализацию fly(). Такой подход, наверное, лучше совмещать с аннотацями типов, аннотации опять таки не к чему не обязывают, их можно проверять с помощью статических анализаторов, чтобы находить потенциальные ощибки у себя, также среды разработки, вроде PyCharm, умеют их анализировать, ну и как дополнительная документация для кода, чтобы лучше понимать, что происходит, но это все актульно для больших проектов.
def foo(aircraft: FlyingTranspot):
...
aircraft.fly()
...
Можно еще для пущей строгости использовать https://docs.python.org/3/library/abc.html
Для питона это нетипичный подход, из-а его динамической природы. Создавать отдельную сущность для интерфейса объекта больше подходит для java или C#, потому что у них статическая типизация, т.е. если ты в джаве создашь переменную строкового типа и попробуешь присвоить ей число, компилятор пошлет тебя нахуй, потому что это переменная строкового типа, и она навсегда останется переменной строкового типа, а в питоне пожалуйста, напишешь сначала x = "qwerty", а потом x = 5, питон все схавает. Поэтому в питоне больше в ходу так называемая "утиная типизация", т.е. если что-то выглядит как утка, плавает как утка, и даже крякает как утка, то, скорее всего это и есть утка, ну по крайней мере если надо плавать и крякать она с этим справиться.
На практике это выглядит так: если мы ждем, что на вход функции foo подадут объект aircraft, который имеет метод fly(), мы просто берем и без задней мысли вызываем в теле функции aircraft.fly()
def foo(aircraft):
...
aircraft.fly()
...
если вдруг, по какой-то причине в функцию подадут объект, у которого нет такого метода, то вылитит исключение, задача тех, кто будет использовать эту функцию проверять, чтобы в функцию попадали нужные объекты, либо обрабатывать соответствующее исключение. При таком подходе не важно, кто родитель используемого класса, важно, что у него есть требуемый метод fly().
Если хочется создать именно интерфейс, как отдельную сущность, как в твоей книжке, это тоже возможно. Можно создать класс FlyingTranspot с одним единственным методом fly(), и не делать для него никаккой реализации, типа
class FlyingTranspot:
def fly(self):
...
или даже выбрасывать исключение:
class FlyingTranspot:
def fly(self):
raise NotImplementedError
Потом все классы, которые будут использовать как летательные средства, делать наследниками FlyingTranspot, и пропиывать свою реализацию fly(). Такой подход, наверное, лучше совмещать с аннотацями типов, аннотации опять таки не к чему не обязывают, их можно проверять с помощью статических анализаторов, чтобы находить потенциальные ощибки у себя, также среды разработки, вроде PyCharm, умеют их анализировать, ну и как дополнительная документация для кода, чтобы лучше понимать, что происходит, но это все актульно для больших проектов.
def foo(aircraft: FlyingTranspot):
...
aircraft.fly()
...
Можно еще для пущей строгости использовать https://docs.python.org/3/library/abc.html
Да я хотел амбициозно с наскока написать консольную fb2 читалку в качестве практики, с дальнейшими перспективами дальнейшего наращивания функционала.
В libxml2 (соответственно и lxml) вроде как есть проверка схемы xsd, что может быть полезным будущем.
Пока что у меня получилось написать простенькую косенькую программу, которая выпукивает в консоль текст из текстовых тегов.
Раньше греб в фирме где интерфейсы в пистоне были хорошим тоном (наверно потому что их притащили с фронта фуллстек-разрабы, которые писали на ангуляре и TypeScript)
Значит у меня два устройства подключаются по s.accept(), как мне обратится к ним по отдельности?
Типо выглядит это как conn, addr = s.accept(), и вот как мне обратится к каждому конн по отдельности?
s.accept тебе нужен для того, чтобы принимать входящие соединения. Если ты подключаешься к другому компьютеру, то accept не нужен.
Вообще тебе надо разобраться с архитектутой, кто к кому подключается.
Если у тебя два экземпляра пинг-понга запущены, то один из них должен быть сервером, принимать соединения, а другой или другие должны быть клиентами.
Возможны и более хитрые схемы.
То есть, одна программа слушает какой-нибудь порт, а другая подключается к первой программе.
Вообще ты лезешь в довольно квалифицированную область, к которой пока не очень готов. Я бы советовал сначала поиграть отдельно с сетевыми функциями, чтобы свободно в них себя чувствовать, все эти установки соедениний, пересылка данных, обработка обрывов соединений и т.п. А потом уже совмещать это с игрушкой.
Реально тебе ещё и важно с многопоточностью разобраться, чтобы один поток обрабатывал сеть, а другой саму игру, но это сложная тема. Или с асинхронностью, но это тоже сложно и ещё сложно дружить с графикой при этом.
Иначе ты просто предсказуемо утонешь в проблемах и напорешься просто на лес граблей.
И меня заинтересовало следующее: какие библиотеки вы посоветуете посмотреть. Просто чтобы знать, что они.
Начал учить для вката, но сейчас учу чтобы подняться в codewars.
Я могу сказать, что regular expr и collections - важны всем. А что ещё?
>>903326
Ну ХЗ, сложно ответить так сразу.
Есть базовые системные либы, про которые надо знать
json, pickle
os, os.path, sys, time, glob
re, itertools, random
argparse какой-нибудь
Есть либы, за которыми стоят целые технологии программирования, то есть тут вопрос не либу изучить, а именно с технологиями разобраться
threading, asyncio
Есть индустриальные либы, для промышленного программирования
typing
logging
dataclasses
pytest (последняя сторонняя либа, вместо штатной unittest)
Есть масса либ, которые нужны, если ты занимаешься конкретными направлениями, и не нужны в других случаях. В принципе про половину там можно сказать.
Что-то там какая-то экзотика, что-то легаси, что-то просто развлекуха.
Есть годная книга по стандартной библиотеке https://www.amazon.com/Python-Standard-Library-Example-Developers/dp/0134291050/
Смотришь обзорные описания, что заинтересовало можно уже курить детально.
1. актёрам трудно на сцене без декораций. они могут заблудиться
2. зрители не поймут, почему билет так дорого стоит. разве ты пришёл посмотреть на нихуя? а тут - хуяк! и декорации
мимо театрал
current_h, pad = 5, 3
for line in win_text:
____w, h = draw.textsize(line, font=TEXT_FONT)
____draw.text(((MAX_W - w) / 2, current_h), line, fill=TEXT_COLOR, font=TEXT_FONT)
____current_h += h + pad
Дерзай, сучка.
Ну и к чему ты это высрал? Думаешь мне реально всралось рефакторить твой говнокод?
Чепуха из-под ногтей слилась мгновенно. Ну вот и молчи в тряпочку со своим "for нинужын, map ришаит".
Нах мне объяснять? Я и сам тебе объясню, сопляку. Ты за слова свои ответь. То есть, приведи аналог на своём map для такого цикла for, как я привёл.
Ты не понял, у меня есть сервер, к которому подключается два компа, оба компа к серверу подключаются по conn, addr = s.accept(), как мне обратится к одному из этих компов?
Всяких разных библиртек и фреймворков просто дохуя, и они плодятся и развиваются, что конкретно учить, это все сильно зависит от твоих интересов. Для веба будет свой список актуальных либ, для датасайнса свой, и так далее. Есть много разных списков популярных либ. Например,
https://github.com/vinta/awesome-python
У меня такое чувство, что тебе рановато о таком думать.
Спасибо большое за твоё разъяснение. Но увы я его не могу понять в полной мере. Это из-за отсутствия опыта ООП
как думаешь, не слишком ли поздно вкатываться в питон? просто начитался об этом тут и аж даже страшно стало за своё будущее
На трекере наблюдаю штук 20, есть интересные, скачаю. Потом скину сюда ссылку.
Странно, что все не слили.
а книги не старые? я смотрю там 11 год, 14
Есть куча информации вида:
<tag value="to4tomnenyjno_so_skobkami"/>
Есть регулярное выражение:
(<tag value=)(".*")
1 2
1, 2 это, как вы поняли группы
которое мне возвращает через re.findall список кортежей вида [(1, 2)...(1, 2)]
Можно через регулярки сделать чтобы оно сразу мне выдавало только вторую группу? Что-то вроде ^(начало слова), но в качестве начала слова принимать то что в первой группе.
>Так убери скобки из первой части.
Спасибо, не знал что это так работает.
На regex101.com подсвечивалось все и я думал оно мне будет засылать fullmatch т.е. и все вместе.
а почему именно он?
Спасибо, интересно было узнать именно базовые системные либы. Хороший, развернутый ответ.
Что значит промышленное, индустриальное программирование? Я просто программист АСУТП (на заводах программирую)
>>903367
Во, я это и хотел. Только думал мне накидают либы, а я буду документацию смотреть бегло
>>903368
Не учить. Знать что и где лежит.
>>903596
>У меня такое чувство, что тебе рановато о таком думать.
>У меня такое чувство, что тебе рановато о таком думать.
Так я пока для себя. Мне интересны именно самые базовые либы. Типа itertools
>Не учить. Знать что и где лежит.
Задачи то какие?
>а я буду документацию смотреть бегло
Открываешь пипи и смотришь что там в топе.
Среди школьников зафорсили мемасы с Фреско, а дебичи подыгрывают. Даже время на просмотр тратить не буду.
>Что значит промышленное, индустриальное программирование? Я просто программист АСУТП (на заводах программирую)
Индустриальное, значит в индустрии программирования, когда ты работаешь над большими программами, с большим кодом, с долгим циклом поддержки, когда ты сам забываешь, что и зачем писал, когда несколько человек работает над кодом и т.п.
Когда ты делаешь лабы, олимпиады, литкод и т.п., это одна история, там тебе надо знать библиотеки вот для этого, всякие re, itertools, collections, может понадобиться что-нибудь вроде heapq и др. Чтобы компактно реализовывать разные алгоритмы.
Есть технологические либы вроде asyncio/threading. За ними стоят технологии программирования, ты не сможешь их изучить просто как библиотеки. Ты не сможешь ничего адекватно сделать, пока с технологиями не разберёшься, тебе придётся сначала конкретно сломать мозги, что довольно мучительно.
А есть просто "индустриальные". Они не дают каких-то дополнительных возможностей особых, можно обходиться и без них. Они в принципе не нужны, если ты делаешь программы для условных литкодов/кодеварс, они не нужны, если ты делаешь небольшие утилиты для своих нужд.
Но количество переходит в качество, и когда код большой и сложный, без этих инструментов становится сложно и они становятся действительно нужными. В общем это то, что нужно для работы, а не just for fun.
Ну и дальше есть масса библиотек и модулей для конкретных задач. Если ты ими занимаешься, они нужны. Если это задачи не трогаешь, то совсем не нужны.
Самих же элементов в списке сотни.
Как выбрать 5 элементов-кортежей, где второе значение кортежа, например, минимально?
Вот, послушай.
https://www.youtube.com/watch?v=VFBXx7O9BxU
Чувак рассказывает как он начал работать в промышленном программировании
>Как выбрать 5 элементов-кортежей, где второе значение кортежа, например, минимально?
Проясни подробней о чем ты.
Если мне нужен 1 элемент, у которого второе значение минимально, я просто делаю min(data, key = lambda t: t[1])
А мне надо 5 элементов выбрать, у которых вторые значения минимальны во всём списке.
Спасибо.
Попробуй отсортировать по вторым элементам
Глупости, на питоне 3.6+ версии очень легко писать крупные и средние проекты. Есть нормальная асинхронность, проверка типов и интерфейсов, легко подключить библиотеки на С или С++. Если нужна максимальная производительность, то лучше брать раст или го, они будут производительней джавы. Сейчас же монолиты не пишут, все дробят на сервисы.
Спасибо брат! Хотел конечно по DRF, и кстати ты на каком трекере смотрел?
Умеет, но очень заебисто. Плюс не умею раскалывать модули к нему на aws-ках.
Раскатывать*
Да знаю я. У меня в монгаклауде премиум сторейдж на дохулион гигов. Короче все за то, чтобы монгу использовать
Если использовать, то не через джанго орм, а написать свое апи и модели для монги.
В энтерпрайз секторе своя логика, там правят бал Java/C++/C#, это и традиции, и кодовая база, и куча разных решений, и разработчики с нужным опытом.
А вот в средних проектах, которые уже делают на чём-то более современном и гибком, у питона хорошие позиции и перспективы.
Нода зашла в сектор раньше, когда питон был в плачевном состоянии, в кризисе из-за неграмотной миграции с 2 в 3, без поддержки современных технологий.
Начиная с 3.5 ситуация стала меняться. Появляются asyncio, typing и другое. На третью ветку уже все библиотеки перекатили.
В то время как нода стала тонуть в болоте. Сам JS как язык жутко кривой и напрочь сливает питону во всём, по структурам данных, языковым конструкциям и т.п. Только callback функции удобнее писать, на что питон не рассчитан из-за отступов.
Помимо JS, в ноде смешиваются парадигмы, основные библиотеки построены на callback-based подходе, против современных async-await, основанных на промисах. Нужно криво стыковать. npm превратился в откровенное болото, с хипстерскими поделками, троянами и кодом, который должен работать и на морально устраревших браузерах, когда тебе реально нужна только работа на современных версиях ноды.
В общем сейчас выбор ноды для бэкенда не очень разумен. Он был понятен и разумен 5+ лет назад, но не сейчас.
Спасибо!
А то почитал интернеты, и сложилось впечатление, что нода - лучший язык для бэкэнда в средних проектах.
Питон ванлав, всё равно.
Это ты где такой высер прочитал? Пыхтон пыхтит как пых на бэкэнде, нода говно. На бэке из скриптовых perl пиздец с какой натяжкой и изъёбкой, либо на FastCGI писать апликуху — c, c++, java, c#, но последнее весьма спорно.
Пыхтон на бэкэ это как та пикча про буханку-троллейбус.
И расскажите, пожалуйста, зачем здесь or, если здесь нет if, по сути, всегда же должно быть присвоение Res[j]
a = a or b
Если а не фолс, то оставить, иначе присвоить с.
В чем смысл конструкции с and не совсем понятно.
В булевом контексте оно кастуется в булеан.
То же самое, что
hui = 1
if hui:
Можем делать
hui = 0 or 1
получим 1, и т.д.
А, всё, 0 и 1 за тру и фолс, спасибо, дошло
Он умер.
https://youtu.be/oF6gZG6rFmQ?t=511
И что-то охуел от наличия УКАЗАТЕЛЕЙ.
Неужели нельзя было реализовать язык с дефолтным поведением, чтобы любое повторное действие с переменными было бы через указатели?
указатели в си это такой кал, от которого в с++ поспешили избавиться путем ООП+RAII. Каждый класс в STL держит свои указатели при себе и не выдает это дерьмо наружу. А в си оно торчит и вызывает только одни проблемы.
Алсо, когда ты в пистоне передаешь объекты в функцию, они фактически тоже по ссылке/указателю передаются. Там нет копирования, пока ты сам не попросишь, сделав что-то вроде new = Obj(old)
[('git', 659),
('java', 618),
('c', 609),
('sql', 507),
('api', 463),
('javascript', 438),
('js', 401),
('web', 401),
('it', 394),
('docker', 383),
('postgresql', 378),
('react', 373),
('senior', 372),
('developer', 370),
('kotlin', 366),
('code', 358),
('rest', 328),
('android', 317),
('ios', 311),
('css', 304),
('backend', 294),
('and', 294),
('php', 290),
('html', 285),
('team', 283),
('a', 281),
('for', 274),
('in', 274),
('to', 273),
('linux', 272),
('of', 271),
('ci', 269),
('typescript', 264),
('core', 263),
('net', 259),
('with', 258),
('unit', 257),
('experience', 255),
('on', 254),
('redis', 254),
('the', 253),
('python', 251),
('mysql', 250),
('agile', 245),
('frontend', 241),
('development', 238),
('work', 234),
('is', 234),
('we', 231),
('swift', 230),
('ui', 227),
('review', 227),
('jira', 220),
('scrum', 217),
('rabbitmq', 208),
('full', 203),
('google', 201),
('or', 198),
('spring', 197),
('sdk', 197),
('angular', 193),
('framework', 193),
('data', 193),
('english', 191),
('our', 191),
('s', 189),
('design', 187),
('requirements', 186),
('as', 184),
('solid', 182),
('end', 179),
('kubernetes', 178),
('years', 177),
('cd', 174),
('be', 173),
('node', 169),
('are', 168),
('working', 168),
('looking', 164),
('an', 163),
('remote', 161),
('time', 160),
('server', 157),
('etc', 155),
('you', 153),
('mongodb', 153),
('devops', 152),
('go', 151),
('skills', 149),
('software', 148),
('knowledge', 148),
('ms', 148),
('stack', 147),
('open', 147),
('webpack', 147),
('middle', 147),
('github', 146),
('company', 146),
('mvc', 146),
('objective', 146),
('aws', 145),
('redux', 145),
('your', 143),
('kafka', 143),
('technologies', 140),
('apple', 139),
('new', 138),
('nosql', 137),
('elasticsearch', 133),
('vue', 133),
('gitlab', 132),
('understanding', 130),
('http', 130),
('play', 129),
('high', 127),
('services', 127),
('store', 127),
('professional', 126),
('e', 125),
('performance', 125),
('xml', 123),
('flexible', 123),
('strong', 121),
('will', 120),
('es', 120),
('b', 119),
('unity', 118),
('firebase', 117),
('cloud', 116),
('have', 115),
('integration', 115),
('architecture', 115),
('salary', 114),
('from', 113),
('us', 113),
('build', 112),
('intermediate', 110),
('asp', 110),
('com', 110),
('at', 109),
('best', 108),
('offer', 107),
('platform', 107),
('back', 107),
('part', 106),
('product', 106),
('front', 106),
('ru', 106),
('project', 105),
('application', 105),
('develop', 105),
('maven', 105),
('responsibilities', 104),
('hours', 103),
('based', 102),
('competitive', 102),
('ux', 100),
('that', 99),
('projects', 99),
('good', 99),
('d', 99),
('mvvm', 98),
('games', 96),
('symfony', 96),
('level', 95),
('developing', 95),
('applications', 94),
('world', 94),
('json', 94),
('other', 93),
('life', 93),
('boot', 93),
('this', 91),
('oracle', 91),
('all', 90),
('support', 90),
('hibernate', 90),
('jenkins', 90),
('appsflyer', 90),
('management', 88),
('using', 88),
('confluence', 88),
('ability', 87),
('language', 87),
('source', 86),
('office', 86),
('ads', 86),
('join', 85),
('technical', 84),
('environment', 84),
('kanban', 84),
('appmetrica', 84),
('admob', 84),
('lafa', 83),
('startapp', 83),
('native', 82),
('plus', 82),
('insurance', 82),
('database', 82),
('laravel', 81),
('mobile', 81),
('erp', 81),
('growth', 81),
('tools', 80),
('https', 80),
('highload', 80),
('next', 79),
('systems', 79),
('products', 79),
('ruby', 79),
('clickhouse', 79),
('testing', 78),
('django', 77),
('help', 77),
('use', 77),
('soap', 77),
('job', 76),
('sass', 76),
('mvp', 76),
('teamcity', 76),
('x', 75),
('which', 75),
('distributed', 75),
('crm', 75),
('qa', 74),
('app', 73),
('technology', 73),
('opportunities', 73),
('t', 72),
('solutions', 72),
('lead', 72),
('developers', 72),
('service', 72),
('unix', 72),
('system', 72),
('jetbrains', 72),
('if', 71),
('user', 71),
('nginx', 70),
('less', 70),
('up', 70),
('flow', 70),
('client', 69),
('well', 69),
('azure', 69),
('about', 68),
('position', 68),
('apache', 68),
('spa', 68),
('their', 67),
('more', 66),
('self', 66),
('including', 66),
('golang', 66),
('science', 66),
('jquery', 66),
('interesting', 65),
('orm', 65),
('components', 65),
('security', 64),
('pro', 64),
('ide', 64),
('building', 63),
('industry', 63),
('able', 63),
('can', 63),
('by', 63),
('classes', 63),
('relational', 63),
('process', 62),
('make', 62),
('business', 62),
('employees', 62),
('not', 62),
('but', 62),
('practices', 61),
('communication', 61),
('tasks', 61),
('leading', 61),
('fast', 60),
('clean', 60),
('features', 60),
('commerce', 60),
('do', 59),
('after', 59),
('problems', 59),
('customers', 58),
('growing', 58),
('fintech', 58),
('medical', 58),
('postgres', 58),
('big', 57),
('free', 57),
('successful', 57),
('computer', 57),
('oop', 57),
('graphql', 57),
('test', 56),
('deep', 56),
('apis', 56),
('success', 56),
('macbook', 56),
('slack', 55),
('complex', 55),
('restful', 55),
('windows', 55),
('culture', 55),
('reactjs', 55),
('written', 54),
('write', 54),
('experienced', 54),
('programming', 54),
('such', 54),
('jest', 54),
('pay', 53),
('schedule', 53),
('teams', 53),
('digital', 53),
('youtrack', 53),
('clients', 52),
('great', 52),
('value', 52),
('take', 52),
('driven', 52),
('friendly', 52),
('what', 52),
('studio', 52),
('nodejs', 52),
('frameworks', 51),
('customer', 51),
('generation', 51),
('people', 51),
('intellij', 51),
('tests', 50),
('patterns', 50),
('idea', 50),
('jpa', 50),
('low', 50),
('market', 50),
('search', 49),
('designing', 49),
('tcp', 49),
('within', 49),
('tdd', 49),
('russia', 49),
('paid', 48),
('guidelines', 48),
('welcome', 48),
('related', 48),
('platforms', 48),
('apply', 48),
('create', 48),
('results', 48),
('legacy', 48),
('should', 48),
('smart', 48),
('spoken', 47),
('engineering', 47),
('real', 47),
('description', 47),
('saas', 47),
('highly', 47),
('across', 47),
('international', 47),
('required', 47),
('writing', 47),
('no', 47),
('both', 47),
('grpc', 47),
('control', 46),
('least', 46),
('would', 45),
('infrastructure', 45),
('dynamic', 45),
('scala', 45),
('one', 45),
('modern', 44),
('grafana', 44),
('iot', 44),
('implement', 44),
('available', 44),
('scalable', 44),
('bootstrap', 44),
('junit', 44),
('latest', 44),
('tech', 43),
('candidate', 43),
('who', 43),
('npm', 43),
('cassandra', 43),
('blockchain', 43),
('labs', 43),
('websockets', 43),
('interview', 42),
('so', 42),
('companies', 42),
('over', 42),
('continuous', 42),
('gradle', 42),
('them', 42),
('training', 42),
('yii', 42),
('websocket', 42),
('swagger', 41),
('top', 41),
('has', 41),
('comfortable', 41),
('challenging', 41),
('any', 41),
('lot', 41),
('hr', 41),
('material', 40),
('u', 40),
('like', 40),
('microsoft', 40),
('designs', 40),
('during', 40),
('dagger', 40),
('mssql', 39),
('some', 39),
('works', 39),
('ddd', 39),
('own', 39),
('rxjava', 39),
('bitbucket', 39),
('key', 39),
('home', 39),
('databases', 39),
('financial', 39),
('di', 39),
('ar', 39),
('webapi', 39),
('role', 38),
('degree', 38),
('quality', 38),
('minimum', 38),
('ee', 38),
('visual', 38),
('young', 38),
('solving', 38),
('period', 38),
('now', 38),
('most', 37),
('automation', 37),
('fluent', 37),
('k', 37),
('elastic', 37),
('only', 37),
('algorithms', 37),
('private', 37),
('engine', 37),
('gulp', 37),
('room', 37),
('fullstack', 37),
('responsibility', 37),
('get', 36),
('viper', 36),
('cross', 36),
('principles', 36),
('bonus', 36),
('dev', 36),
('re', 36),
('users', 36),
('retrofit', 36),
('these', 36),
('why', 36),
('prometheus', 36),
('vuejs', 35),
('opportunity', 35),
('planning', 35),
('how', 35),
('learn', 35),
('each', 35),
('event', 35),
('base', 35),
('sick', 35),
('latency', 35),
('health', 35),
('vacation', 35),
('hard', 35),
('express', 35),
('labor', 35),
('defined', 35),
('se', 35),
('first', 34),
('g', 34),
('engineers', 34),
('small', 34),
('apps', 34),
('europe', 34),
('db', 34),
('its', 34),
('nix', 34),
('enterprise', 34),
('network', 34),
('ajax', 34),
('must', 34),
('moscow', 34),
('outsourcing', 34),
('want', 34),
('mail', 34),
('online', 33),
('realm', 33),
('responsible', 33),
('problem', 33),
('processes', 33),
('multi', 33),
('coding', 33),
('ideas', 33),
('ai', 33),
('soft', 33),
('uikit', 33),
('group', 33),
('excellent', 33),
('manage', 33),
('need', 33),
('wpf', 33),
('further', 33),
('compliance', 33),
('trading', 33),
('bash', 33),
('travel', 33),
('implementing', 32),
('than', 32),
('fit', 32),
('passionate', 32),
('learning', 32),
('maintenance', 32),
('upon', 32),
('oriented', 32),
('future', 32),
('desktop', 32),
('skype', 32),
('place', 32),
('communicate', 32),
('extensive', 32),
('mongo', 32),
('pre', 32),
('marketing', 32),
('bigdata', 32),
('remotely', 31),
('talent', 31),
('participate', 31),
('cqrs', 31),
('fulltime', 31),
('r', 31),
('days', 31),
('bring', 31),
('helping', 31),
('annual', 31),
('v', 31),
('trial', 31),
('flask', 31),
('even', 30),
('angularjs', 30),
('professionals', 30),
('machine', 30),
('ml', 30),
('library', 30),
('rxjs', 30),
('main', 30),
('coroutines', 30),
('pl', 30),
('amazon', 30),
('better', 30),
('completion', 30),
('ontarget', 30),
('backlog', 30),
('queue', 30),
('tfs', 30),
('year', 29),
('contract', 29),
('ll', 29),
('entity', 29),
('advanced', 29),
('implementation', 29),
('large', 29),
('functional', 29),
('xcode', 29),
('passion', 29),
('component', 29),
('zone', 29),
('rails', 29),
('worldwide', 29),
('under', 29),
('targeted', 29),
('jax', 29),
('upper', 28),
('members', 28),
('maintain', 28),
('weeks', 28),
('around', 28),
('load', 28),
('day', 28),
('jdbc', 28),
('conferences', 28),
('set', 28),
('into', 28),
('engineer', 28),
('io', 28),
('space', 28),
('groovy', 28),
('relocation', 28),
('balance', 28),
('member', 28),
('opengl', 28),
('structure', 28),
('babel', 28),
('forms', 28),
('seo', 28),
('skyeng', 28),
('term', 27),
('kibana', 27),
('offering', 27),
('responsive', 27),
('running', 27),
('compensation', 27),
('global', 27),
('scss', 27),
('career', 27),
('cycle', 27),
('rxswift', 27),
('reporting', 27),
('webrtc', 27),
('long', 26),
('cv', 26),
('gitflow', 26),
('out', 26),
('provide', 26),
('please', 26),
('interfaces', 26),
('custom', 26),
('bi', 26),
('usd', 26),
('community', 26),
('figma', 26),
('internet', 26),
('manager', 26),
('game', 26),
('bonuses', 26),
('research', 26),
('storage', 26),
('j', 26),
('mission', 26),
('forward', 26),
('documented', 26),
('ansible', 26),
('production', 26),
('mq', 26),
('memcached', 26),
('jvm', 26),
('ip', 26),
('ws', 26),
('snacks', 26),
('message', 26),
('rs', 26),
('through', 25),
('week', 25),
('payments', 25),
('lifecycle', 25),
('microservices', 25),
('whole', 25),
('access', 25),
('memory', 25),
('leave', 25),
('fixing', 25),
('boost', 25),
('improvements', 25),
('stories', 25),
('rust', 25),
('terms', 25),
('ps', 25),
('elk', 25),
('petersburg', 25),
('find', 24),
('usability', 24),
('highest', 24),
('grow', 24),
('m', 24),
('deployment', 24),
('benefits', 24),
('fun', 24),
('above', 24),
('cocoapods', 24),
('foundation', 24),
('colleagues', 24),
('used', 24),
('offices', 24),
('analysis', 24),
('tomcat', 24),
('verbal', 24),
('european', 24),
('volume', 24),
('methodologies', 24),
('single', 24),
('soa', 24),
('jms', 24),
('activemq', 24),
('spark', 24),
('discipline', 24),
('transfer', 24),
('styled', 24),
('upsource', 24),
('age', 24),
('appstore', 23),
('external', 23),
('they', 23),
('startups', 23),
('side', 23),
('candidates', 23),
('feature', 23),
('existing', 23),
('mac', 23),
('includes', 23),
('largest', 23),
('exchange', 23),
('background', 23),
('daily', 23),
('bugs', 23),
('location', 23),
('sockets', 23),
('atlassian', 23),
('reviews', 23),
('wcf', 23),
('percona', 23),
('celery', 23),
('reliable', 22),
('freedom', 22),
('hands', 22),
('collaborate', 22),
('expertise', 22),
('wide', 22),
('solution', 22),
('countries', 22),
('usa', 22),
('expects', 22),
('inc', 22),
('i', 22),
('motivated', 22),
('expect', 22),
('prototyping', 22),
('stock', 22),
('structures', 22),
('gym', 22),
('also', 22),
('saga', 22),
('ensuring', 22),
('hot', 22),
('put', 22),
('feel', 22),
('excel', 22),
('children', 22),
('hadoop', 22),
('course', 22),
('rabbit', 22),
('crypto', 22),
('mobx', 22),
('sap', 22),
('zennolab', 22),
('many', 21),
('variety', 21),
('there', 21),
('qualifications', 21),
('ambitious', 21),
('delivery', 21),
('serverless', 21),
('information', 21),
('diverse', 21),
('creating', 21),
('center', 21),
('facebook', 21),
('directly', 21),
('modules', 21),
('healthy', 21),
('here', 21),
[('git', 659),
('java', 618),
('c', 609),
('sql', 507),
('api', 463),
('javascript', 438),
('js', 401),
('web', 401),
('it', 394),
('docker', 383),
('postgresql', 378),
('react', 373),
('senior', 372),
('developer', 370),
('kotlin', 366),
('code', 358),
('rest', 328),
('android', 317),
('ios', 311),
('css', 304),
('backend', 294),
('and', 294),
('php', 290),
('html', 285),
('team', 283),
('a', 281),
('for', 274),
('in', 274),
('to', 273),
('linux', 272),
('of', 271),
('ci', 269),
('typescript', 264),
('core', 263),
('net', 259),
('with', 258),
('unit', 257),
('experience', 255),
('on', 254),
('redis', 254),
('the', 253),
('python', 251),
('mysql', 250),
('agile', 245),
('frontend', 241),
('development', 238),
('work', 234),
('is', 234),
('we', 231),
('swift', 230),
('ui', 227),
('review', 227),
('jira', 220),
('scrum', 217),
('rabbitmq', 208),
('full', 203),
('google', 201),
('or', 198),
('spring', 197),
('sdk', 197),
('angular', 193),
('framework', 193),
('data', 193),
('english', 191),
('our', 191),
('s', 189),
('design', 187),
('requirements', 186),
('as', 184),
('solid', 182),
('end', 179),
('kubernetes', 178),
('years', 177),
('cd', 174),
('be', 173),
('node', 169),
('are', 168),
('working', 168),
('looking', 164),
('an', 163),
('remote', 161),
('time', 160),
('server', 157),
('etc', 155),
('you', 153),
('mongodb', 153),
('devops', 152),
('go', 151),
('skills', 149),
('software', 148),
('knowledge', 148),
('ms', 148),
('stack', 147),
('open', 147),
('webpack', 147),
('middle', 147),
('github', 146),
('company', 146),
('mvc', 146),
('objective', 146),
('aws', 145),
('redux', 145),
('your', 143),
('kafka', 143),
('technologies', 140),
('apple', 139),
('new', 138),
('nosql', 137),
('elasticsearch', 133),
('vue', 133),
('gitlab', 132),
('understanding', 130),
('http', 130),
('play', 129),
('high', 127),
('services', 127),
('store', 127),
('professional', 126),
('e', 125),
('performance', 125),
('xml', 123),
('flexible', 123),
('strong', 121),
('will', 120),
('es', 120),
('b', 119),
('unity', 118),
('firebase', 117),
('cloud', 116),
('have', 115),
('integration', 115),
('architecture', 115),
('salary', 114),
('from', 113),
('us', 113),
('build', 112),
('intermediate', 110),
('asp', 110),
('com', 110),
('at', 109),
('best', 108),
('offer', 107),
('platform', 107),
('back', 107),
('part', 106),
('product', 106),
('front', 106),
('ru', 106),
('project', 105),
('application', 105),
('develop', 105),
('maven', 105),
('responsibilities', 104),
('hours', 103),
('based', 102),
('competitive', 102),
('ux', 100),
('that', 99),
('projects', 99),
('good', 99),
('d', 99),
('mvvm', 98),
('games', 96),
('symfony', 96),
('level', 95),
('developing', 95),
('applications', 94),
('world', 94),
('json', 94),
('other', 93),
('life', 93),
('boot', 93),
('this', 91),
('oracle', 91),
('all', 90),
('support', 90),
('hibernate', 90),
('jenkins', 90),
('appsflyer', 90),
('management', 88),
('using', 88),
('confluence', 88),
('ability', 87),
('language', 87),
('source', 86),
('office', 86),
('ads', 86),
('join', 85),
('technical', 84),
('environment', 84),
('kanban', 84),
('appmetrica', 84),
('admob', 84),
('lafa', 83),
('startapp', 83),
('native', 82),
('plus', 82),
('insurance', 82),
('database', 82),
('laravel', 81),
('mobile', 81),
('erp', 81),
('growth', 81),
('tools', 80),
('https', 80),
('highload', 80),
('next', 79),
('systems', 79),
('products', 79),
('ruby', 79),
('clickhouse', 79),
('testing', 78),
('django', 77),
('help', 77),
('use', 77),
('soap', 77),
('job', 76),
('sass', 76),
('mvp', 76),
('teamcity', 76),
('x', 75),
('which', 75),
('distributed', 75),
('crm', 75),
('qa', 74),
('app', 73),
('technology', 73),
('opportunities', 73),
('t', 72),
('solutions', 72),
('lead', 72),
('developers', 72),
('service', 72),
('unix', 72),
('system', 72),
('jetbrains', 72),
('if', 71),
('user', 71),
('nginx', 70),
('less', 70),
('up', 70),
('flow', 70),
('client', 69),
('well', 69),
('azure', 69),
('about', 68),
('position', 68),
('apache', 68),
('spa', 68),
('their', 67),
('more', 66),
('self', 66),
('including', 66),
('golang', 66),
('science', 66),
('jquery', 66),
('interesting', 65),
('orm', 65),
('components', 65),
('security', 64),
('pro', 64),
('ide', 64),
('building', 63),
('industry', 63),
('able', 63),
('can', 63),
('by', 63),
('classes', 63),
('relational', 63),
('process', 62),
('make', 62),
('business', 62),
('employees', 62),
('not', 62),
('but', 62),
('practices', 61),
('communication', 61),
('tasks', 61),
('leading', 61),
('fast', 60),
('clean', 60),
('features', 60),
('commerce', 60),
('do', 59),
('after', 59),
('problems', 59),
('customers', 58),
('growing', 58),
('fintech', 58),
('medical', 58),
('postgres', 58),
('big', 57),
('free', 57),
('successful', 57),
('computer', 57),
('oop', 57),
('graphql', 57),
('test', 56),
('deep', 56),
('apis', 56),
('success', 56),
('macbook', 56),
('slack', 55),
('complex', 55),
('restful', 55),
('windows', 55),
('culture', 55),
('reactjs', 55),
('written', 54),
('write', 54),
('experienced', 54),
('programming', 54),
('such', 54),
('jest', 54),
('pay', 53),
('schedule', 53),
('teams', 53),
('digital', 53),
('youtrack', 53),
('clients', 52),
('great', 52),
('value', 52),
('take', 52),
('driven', 52),
('friendly', 52),
('what', 52),
('studio', 52),
('nodejs', 52),
('frameworks', 51),
('customer', 51),
('generation', 51),
('people', 51),
('intellij', 51),
('tests', 50),
('patterns', 50),
('idea', 50),
('jpa', 50),
('low', 50),
('market', 50),
('search', 49),
('designing', 49),
('tcp', 49),
('within', 49),
('tdd', 49),
('russia', 49),
('paid', 48),
('guidelines', 48),
('welcome', 48),
('related', 48),
('platforms', 48),
('apply', 48),
('create', 48),
('results', 48),
('legacy', 48),
('should', 48),
('smart', 48),
('spoken', 47),
('engineering', 47),
('real', 47),
('description', 47),
('saas', 47),
('highly', 47),
('across', 47),
('international', 47),
('required', 47),
('writing', 47),
('no', 47),
('both', 47),
('grpc', 47),
('control', 46),
('least', 46),
('would', 45),
('infrastructure', 45),
('dynamic', 45),
('scala', 45),
('one', 45),
('modern', 44),
('grafana', 44),
('iot', 44),
('implement', 44),
('available', 44),
('scalable', 44),
('bootstrap', 44),
('junit', 44),
('latest', 44),
('tech', 43),
('candidate', 43),
('who', 43),
('npm', 43),
('cassandra', 43),
('blockchain', 43),
('labs', 43),
('websockets', 43),
('interview', 42),
('so', 42),
('companies', 42),
('over', 42),
('continuous', 42),
('gradle', 42),
('them', 42),
('training', 42),
('yii', 42),
('websocket', 42),
('swagger', 41),
('top', 41),
('has', 41),
('comfortable', 41),
('challenging', 41),
('any', 41),
('lot', 41),
('hr', 41),
('material', 40),
('u', 40),
('like', 40),
('microsoft', 40),
('designs', 40),
('during', 40),
('dagger', 40),
('mssql', 39),
('some', 39),
('works', 39),
('ddd', 39),
('own', 39),
('rxjava', 39),
('bitbucket', 39),
('key', 39),
('home', 39),
('databases', 39),
('financial', 39),
('di', 39),
('ar', 39),
('webapi', 39),
('role', 38),
('degree', 38),
('quality', 38),
('minimum', 38),
('ee', 38),
('visual', 38),
('young', 38),
('solving', 38),
('period', 38),
('now', 38),
('most', 37),
('automation', 37),
('fluent', 37),
('k', 37),
('elastic', 37),
('only', 37),
('algorithms', 37),
('private', 37),
('engine', 37),
('gulp', 37),
('room', 37),
('fullstack', 37),
('responsibility', 37),
('get', 36),
('viper', 36),
('cross', 36),
('principles', 36),
('bonus', 36),
('dev', 36),
('re', 36),
('users', 36),
('retrofit', 36),
('these', 36),
('why', 36),
('prometheus', 36),
('vuejs', 35),
('opportunity', 35),
('planning', 35),
('how', 35),
('learn', 35),
('each', 35),
('event', 35),
('base', 35),
('sick', 35),
('latency', 35),
('health', 35),
('vacation', 35),
('hard', 35),
('express', 35),
('labor', 35),
('defined', 35),
('se', 35),
('first', 34),
('g', 34),
('engineers', 34),
('small', 34),
('apps', 34),
('europe', 34),
('db', 34),
('its', 34),
('nix', 34),
('enterprise', 34),
('network', 34),
('ajax', 34),
('must', 34),
('moscow', 34),
('outsourcing', 34),
('want', 34),
('mail', 34),
('online', 33),
('realm', 33),
('responsible', 33),
('problem', 33),
('processes', 33),
('multi', 33),
('coding', 33),
('ideas', 33),
('ai', 33),
('soft', 33),
('uikit', 33),
('group', 33),
('excellent', 33),
('manage', 33),
('need', 33),
('wpf', 33),
('further', 33),
('compliance', 33),
('trading', 33),
('bash', 33),
('travel', 33),
('implementing', 32),
('than', 32),
('fit', 32),
('passionate', 32),
('learning', 32),
('maintenance', 32),
('upon', 32),
('oriented', 32),
('future', 32),
('desktop', 32),
('skype', 32),
('place', 32),
('communicate', 32),
('extensive', 32),
('mongo', 32),
('pre', 32),
('marketing', 32),
('bigdata', 32),
('remotely', 31),
('talent', 31),
('participate', 31),
('cqrs', 31),
('fulltime', 31),
('r', 31),
('days', 31),
('bring', 31),
('helping', 31),
('annual', 31),
('v', 31),
('trial', 31),
('flask', 31),
('even', 30),
('angularjs', 30),
('professionals', 30),
('machine', 30),
('ml', 30),
('library', 30),
('rxjs', 30),
('main', 30),
('coroutines', 30),
('pl', 30),
('amazon', 30),
('better', 30),
('completion', 30),
('ontarget', 30),
('backlog', 30),
('queue', 30),
('tfs', 30),
('year', 29),
('contract', 29),
('ll', 29),
('entity', 29),
('advanced', 29),
('implementation', 29),
('large', 29),
('functional', 29),
('xcode', 29),
('passion', 29),
('component', 29),
('zone', 29),
('rails', 29),
('worldwide', 29),
('under', 29),
('targeted', 29),
('jax', 29),
('upper', 28),
('members', 28),
('maintain', 28),
('weeks', 28),
('around', 28),
('load', 28),
('day', 28),
('jdbc', 28),
('conferences', 28),
('set', 28),
('into', 28),
('engineer', 28),
('io', 28),
('space', 28),
('groovy', 28),
('relocation', 28),
('balance', 28),
('member', 28),
('opengl', 28),
('structure', 28),
('babel', 28),
('forms', 28),
('seo', 28),
('skyeng', 28),
('term', 27),
('kibana', 27),
('offering', 27),
('responsive', 27),
('running', 27),
('compensation', 27),
('global', 27),
('scss', 27),
('career', 27),
('cycle', 27),
('rxswift', 27),
('reporting', 27),
('webrtc', 27),
('long', 26),
('cv', 26),
('gitflow', 26),
('out', 26),
('provide', 26),
('please', 26),
('interfaces', 26),
('custom', 26),
('bi', 26),
('usd', 26),
('community', 26),
('figma', 26),
('internet', 26),
('manager', 26),
('game', 26),
('bonuses', 26),
('research', 26),
('storage', 26),
('j', 26),
('mission', 26),
('forward', 26),
('documented', 26),
('ansible', 26),
('production', 26),
('mq', 26),
('memcached', 26),
('jvm', 26),
('ip', 26),
('ws', 26),
('snacks', 26),
('message', 26),
('rs', 26),
('through', 25),
('week', 25),
('payments', 25),
('lifecycle', 25),
('microservices', 25),
('whole', 25),
('access', 25),
('memory', 25),
('leave', 25),
('fixing', 25),
('boost', 25),
('improvements', 25),
('stories', 25),
('rust', 25),
('terms', 25),
('ps', 25),
('elk', 25),
('petersburg', 25),
('find', 24),
('usability', 24),
('highest', 24),
('grow', 24),
('m', 24),
('deployment', 24),
('benefits', 24),
('fun', 24),
('above', 24),
('cocoapods', 24),
('foundation', 24),
('colleagues', 24),
('used', 24),
('offices', 24),
('analysis', 24),
('tomcat', 24),
('verbal', 24),
('european', 24),
('volume', 24),
('methodologies', 24),
('single', 24),
('soa', 24),
('jms', 24),
('activemq', 24),
('spark', 24),
('discipline', 24),
('transfer', 24),
('styled', 24),
('upsource', 24),
('age', 24),
('appstore', 23),
('external', 23),
('they', 23),
('startups', 23),
('side', 23),
('candidates', 23),
('feature', 23),
('existing', 23),
('mac', 23),
('includes', 23),
('largest', 23),
('exchange', 23),
('background', 23),
('daily', 23),
('bugs', 23),
('location', 23),
('sockets', 23),
('atlassian', 23),
('reviews', 23),
('wcf', 23),
('percona', 23),
('celery', 23),
('reliable', 22),
('freedom', 22),
('hands', 22),
('collaborate', 22),
('expertise', 22),
('wide', 22),
('solution', 22),
('countries', 22),
('usa', 22),
('expects', 22),
('inc', 22),
('i', 22),
('motivated', 22),
('expect', 22),
('prototyping', 22),
('stock', 22),
('structures', 22),
('gym', 22),
('also', 22),
('saga', 22),
('ensuring', 22),
('hot', 22),
('put', 22),
('feel', 22),
('excel', 22),
('children', 22),
('hadoop', 22),
('course', 22),
('rabbit', 22),
('crypto', 22),
('mobx', 22),
('sap', 22),
('zennolab', 22),
('many', 21),
('variety', 21),
('there', 21),
('qualifications', 21),
('ambitious', 21),
('delivery', 21),
('serverless', 21),
('information', 21),
('diverse', 21),
('creating', 21),
('center', 21),
('facebook', 21),
('directly', 21),
('modules', 21),
('healthy', 21),
('here', 21),
Бля, не тот трэд, сорян.
Ты путаешь разные вещи.
Специфика указателей в Си это адресная арифметика, когда ты указатель можешь двигать вперёд-назад, когда ты можешь передать в функцию указатель не на массив целиком, а на произвольную часть внутри. Причём можешь выбраться и за пределы, попав в соседний массив (хрен отловишь) или вообще в левую область памяти (это проще ловится).
Вторая специфика в отсутствии контроля, в питоне у тебя у каждого объекта есть счётчик ссылок, то есть если ты где-то сохранил ссылку на объект, то об этом будет известно. А в Си такого контроля нет, и ты тупо не знаешь, используется объект или нет, можно его удалять или нет.
Но указатели в Си прикольная тема.
Там кстати записи
m[a] и a[m] эквивалентны, как и
m[1] и 1[m]
и другая подобная магия встречается.
__def wrapper(args, kwargs):
____wrapper.count += 1 <<<
____ func(args, kwargs)
__wrapper.count = 0 <<<
__return wrapper
@count
def foo(): pass
for i in range(10):
__foo()
print(foo.count) <<<
Как это работает? И почему можно писать wrapper.count не ловя ошибок (ведь инициализация "wrapper.count" находится-то после изменения) ?
Схуяли после изменения, внутренний def исполняется как определение объекта функции, код внутри не исполняется при этом.
ладно, хуй с ним
Почему тогда можно писать .count? Вообще не отрезаю
Где можно почитать про такие приколы?
Просто подумай, как происходит исполнение >>905262
Ты когда пишешь
@count
def foo: pass
уже в момент условно парсинга происходит исполнение вида
foo = count(foo)
декоратор именно это значит. В этом момент вызывается функция foo, которая создаёт функцию wrapper, но не исполняет её. Но объект-функция уже есть. Дальше своёство count этого объекта создаётся и присваивается значение 0, и этот объект-функция возвращается
после чего foo это объект-функция wrapper со свойством count=0. А уже когда ты его вызываешь, счётчик увеличивается.
Функции это объекты, у которых можно читать и писать аттрибуты. Хранятся в __dict__. Хуй знает, зачем это нужно, конкретных применений я не знаю. В случае с твоим примером это могло быть сделано замыканием вместо этой фичи.
>В случае с твоим примером это могло быть сделано замыканием вместо этой фичи
Если подумать, то тут тоже замыкания, в примере связывание идёт с переменной wrapper, которая снаружи не существует.
Теперь андерстуд, более менее
В принципе, через замыкание не совсем так получится, потому что извне не достанешь потом. Точнее достанешь, но через жопу.
Так что таки вот одно из применений.
Замыкание есть и в этом примере, можно сделать
print(foo.__closure__),
там будет два значения, их можно посмотреть
for x in foo.__closure__:
____print(x.cell_contents)
Это будет функция func и wrapper. Здесь используется wrapper, код замкнут на него.
На самом деле замыкания это почти как синтаксический сахар. Хотя они поддержаны в языке, то есть там механика исполнения другая, именно через замыкания.
Но схожую идею можно реализовать и традиционными ООП методами. На скрине пример.
То есть принципиально других возможностей, которые нельзя реализовать традиционными инструментами, замыкания не дают.
Но тем не менее это чуть более прямой подход к решению задач. Хотя вариант с callable классом свои плюсы имеет, не в этой задаче, а в каких-то других, более сложных.
И ради интереса посмотрел, вариант с замыканием работает быстрее, чем вариант с классом, примерно на 20% разница.
Ты только что бутылку кока колы.
Глубочайше надеюсь, что питон это не первый твой язык программирования, ибо если ты хочешь вкатиться с нуля в питон и прыгаешь сразу в самую огромную, блять, бездну под названием нейросети, то ты очень и очень глуп и безнадежен.
а я так начал вкат, обосрался в итоге с МЛчиком вкатился в джанго и жабускрипт(вуе.жс)
Ну давай покажи закон логики по которому логическое и возвращает первое ложное утверждение или последнее истинное, а логическое или возвращает первое истинное или последнее ложное
> можно сделать print(foo.__closure__),
Я и говорю, через жопу. Концептуально не совсем правильно туда лезть.
Вот как раз с исполнением не могу понять
Ломает мозг то что мы сначала изменяем wrapper.count и лишь потом мы только его пишем что он равен нулю
Да это только определение функции, она сразу не выполняется.
Добавь там принты и смотри в каком порядке выводится.
400x300, 0:10
Дело твое.
окей, где можно прочитать про такие приколы? Очень интересно что еще есть
Ps собес скоро, вот и решил вспоминать пихтон
Спасибо
>адресная арифметика, когда ты указатель можешь двигать вперёд-назад, когда ты можешь передать в функцию указатель не на массив целиком, а на произвольную часть внутри. Причём можешь выбраться и за пределы, попав в соседний массив (хрен отловишь) или вообще в левую область памяти (это проще ловится).
Это есть. Но можно, например, передать вектор по ссылке и получить все те же плюсы. От ошибок ты защищен, все инкапсулировано, но работает так же быстро.
>Вторая специфика в отсутствии контроля, в питоне у тебя у каждого объекта есть счётчик ссылок, то есть если ты где-то сохранил ссылку на объект, то об этом будет известно. А в Си такого контроля нет, и ты тупо не знаешь, используется объект или нет, можно его удалять или нет.
Да, поэтому придуман RAII. Объект внутри себя занимается своей памятью, а пользователю об этом думать не нужно.
>fluent python
Норм книга? В первый раз слышу про неё, но до этого читал книгу про реактивный двигатель (пистон краш курс).
Хорошая. Но если читал только краш курс, то может быть сложновато.
Посоветуйте какие-нибудь advanced курсы/уроки по Django/DRF. Основными штуками умею пользоваться, а вот если нужно что-то выходящее за туториал начинаю писать какой-то придуманный костыльный код, не зная что тоже самое можно было написать готовыми способами. Можно даже платные
Как это можно сделать? А то уже голова не варит совсем
смотри модуль itertools
и итератор
itertools.chain.from_iterable(m)
Но смотря что тебе надо. Если тебе надо менять значения или индексы использовать, то проще всего в лоб.
Почему ты пишешь слова энд, питон и т.п. на английском языке?
Они же понятны и на русском если их написать.
Мне не сложно
Не слушай дегенерата выше. Питон просто кривой язык с кучей тупых моментов. Начинается все с единицы. Путхон видит AND (если не знаешь - тру только когда оба значения равны), соответственно единица (любое число кроме 0) это true, поэтому путхон идёт проверять второй оператор (2 OR 3). OR это когда хоть один из них тру. Путхон видит, что 2 - тру и не идёт дальше проверять ибо нахуй надо, выражение и так тру. Соответственно возвращает последнее на котором путхон понял, что все выражение тру(2).
Спасибо за обьяснение. Как батюшка пояснил. Я ещё поэкспериментировал и все понял.
Слова:
with as
def
class
итд
Являются ОПЕРАТОРАМИ такими же как +-;/. Я правильно понимаю?
Почему тогда можно задать свое поведение для with as через __enter__ и __exit__ также как и задать свое поведение операторам через свои дандер методы?
Потому что можно, это стандартный способ реализации всяких кастомных штук в питоне. Или ты хотел чтобы везде всё разное было для интересности?
Не знаю, вроде все так
Ору
Боже, поставь ты VSCode, он тебе прямо подчеркнёт красным эту скобку. В каком говне ты код пишешь? Что это за доисторическое говно, нотепад++?
Ты его IDE видел, ну ты видел? Он к нам прямиком из 97го года в тред закатился. А ты еще спрашиваешь такие сложности, лол.
Это вроде idle, её почти в всех нубских книжках рекомендуют, т.к. она поставляется искаропки с бидоном.
> Что это за (int) вообще? В пхп вроде такое приведение типов, ты оттуда прикатился?
Вебмакака не слышавшая о С/С++ спалилась.
Я на чистом си, не говоря о плюсах, написал больше кода чем ты читал за всю жизнь, сынок.
А тут ты хули забыл?
Стал старый беззубый и тебя прогнали альфачи? Теперь будешь тут бомжевать на пенсии?
Скобочки стоят неправильно там где инт.
скобки убери перед инт, чел
Создать цикл, который будет делать следующую операцию:
До тех пор, пока А меньше Б, прибавлять к а В и сравнивать с Б. Если после прибавления, А все еще меньше Б - повторить предыдущее действие. Результат каждого сравнения должен выводиться в консоль в формате "Значение А" + "Пока что нет".
В момент, когда А станет больше Б - вывести "Дождались!" + "Финальный А"
Все это заворачиваем в функцию!
Ну вот что собьственно получилось, правильно?
def func():
print("сравнение закончили")
a=1
b=10
while a < b:
print("a все еще не равно b")
a = a+ 1
print("A + 1 =", a)
if a >= b:
print('a больше b')
func()
выбор сделан
tip = int(input('Введите выражение= '))
Неправильно. А что тебе нужно сообщать когда А == Б? У тебя while выйдет после тога как А станет равным Б, если надо именно больше, то переделай условие на меньше или равно.
def func():
����a=1
����b=10
����while a <= b:
��������print("a все еще не равно b")
��������a = a+ 1
��������print("A + 1 =", a)
����print("сравнение закончили")
����print('a больше b')
func()
А что, у нас уже нельзя обзывать коллег даунами? Мы в свободной стране живем. Питонодауны порвались прям, хыы
Пиздец у тебя задачки простые, напиши мне лучше код под сабж
В одну транспортную компанию поступил заказ на перевозку двух ящиков из одного города в другой. Для перевозки ящики решено было упаковать в специальный контейнер.
Ящики и контейнер имеют вид прямоугольных параллелепипедов. Длина, ширина и высота первого ящика — l₁,w₁ и h₁, соответствующие размеры второго ящика – l₂,w₂ и h₂. Контейнер имеет длину, ширину и высоту lc,wc и hc.
Поскольку ящики содержат хрупкое оборудование, после упаковки в контейнер каждый из них должен остаться в строго вертикальном положении. Таким образом, ящики можно разместить рядом или один на другом. Для надежного закрепления в контейнере стороны ящиков должны быть параллельны его сторонам. Иначе говоря, если исходно ящики были расположены так, что все их стороны параллельны соответствующим сторонам контейнера, то каждый из них разрешается перемещать и поворачивать относительно вертикальной оси на угол, кратный 90 градусам (относительно горизонтальной оси ни контейнер, ни ящики поворачивать нельзя).
Разумеется, после упаковки оба ящика должны полностью находиться внутри контейнера и не должны пересекаться.
Выясните, можно ли поместить ящики в контейнер с соблюдением указанных условий.
Формат ввода
Во входных данных записаны числа l₁, w₁, h₁, l₂,w₂, h₂, lc, wc и hc. Все размеры — целые положительные числа, не превышающие 1000. Числа в строках разделены пробелами.
Это или перебирать вручную все комбинации, или есть какая-то формула сосницкого, которую надо знать для элегентного решения.
всего два ящика? Тупо перебор.
Сначала проверить, влезают ли ящики по-отдельности, потом можно ли один поставить на другой, потом можно ли их поставить рядом (4 варианта тупым перебором).
Писать неохота, сам свою entry level лабу делай.
>Длина, ширина и высота первого ящика — l₁,w₁
Не получается
____l₁ = 123
____ ^
SyntaxError: invalid character in identifier
А вообще, если ты хочешь научиться программировать, то представь, как ты бы решал эту задачу сам, руками. Вот тебе дали конкретные числа, на бумажке, и спросили бы, помещаются ящики или нет.
А потом всю эту логику просто надо закодировать на питоне.
Если вообще не сталкивался с программированием, то найди учебник Турбопаскаля и делай оттуда лабораторки.
hard way to learn python 3
Для самых дебичей книжка по питону. Можешь её глянуть, точно справишься
спасибо.
Брат, я это понимаю.
Кстати скажи, почему такие задачи часто дают решать на курсах?
Например дается задача где нужно написать всего несколько переменных и принт, но блядь для правильного вывода нужно запидорить эти переменные в лютую формулу.
Это же чистая математика, нахуй это задавать?
То есть такие задачи можно решить, но нужно тратить время и навыку программирования это слабо поможет
Какая это математика? Тут только операции сложения двух чисел и сравнение. Это где-то 3-5 класс, так как числа дробные.
Задачка исключительно на то, чтобы закодировать эту тривиальную логику сравнений. Нормальная для тех, кто только начинает разбираться с программированием, на первую неделю.
>Вроде да, есть формула даже на вики статья есть про такого рода задачи.
>формула фибодроччи - дристунни
Друзья, ну вы чего? Какой в жопу фибоначи?
Сказано, всего два (!) ящика. Не два типа ящиков, а просто два ящика. Которые могут быть повёрнутыми двумя способами. Всё, 4 варианта расположения в один уровень.
Ты специально так уебищно отформатировал и спрятал под спойлер чтобы читать было как можно сложней?
у машин двоичная система счисления и там точно так же почему у человека в десятичкой системе счисления 1 / 3 = 3.333333333(3) , короче ну ты понял надеюсь
Программа получает на ввод совершенно разные размеры ящиков каждый раз .они произвольные.
как и размеры контейнера
так что там может быть не два ящика, а 100500 вариантов
l1 = int(input())
w1 = int(input())
h1 = int(input())
l1 = max(l1, w1)
w1 = min(l1, w1)
l2 = int(input())
w2 = int(input())
h2 = int(input())
l2 = max(l2, w2)
w2 = min(l2, w2)
lc = int(input())
wc = int(input())
hc = int(input())
lc = max(lc, wc)
wc = min(lc, wc)
if h1 + h2 <= hc and l1 <= lc and w1 <= wc \
and l2 <= lc and w2 <= wc:
print("YES")
elif l1 <= lc and w1 <= wc and l2 <= lc \
and w2 <= wc and h1 <= hc and h2 <= hc:
if l1 <= lc and w1 <= wc:
if (l2 <= wc - w1 and w2 <= lc) \
or (w2 <= wc - w1 and l2 <= lc) \
or (l2 <= lc - l1 and w2 <= wc) \
or (w2 <= lc - l1 and l2 <= wc):
print("YES")
elif w1 <= lc and l1 <= wc:
if (l2 <= wc - l1 and w2 <= lc) \
or (l2 <= lc and w2 <= wc - l1) \
or (l2 <= lc - w1 and w2 <= wc) \
or (w2 <= lc - w1 and l2 <= wc):
print("YES")
else:
print("NO")
else:
print("NO")
else:
print("NO")
else:
print("NO")
Программа получает на ввод совершенно разные размеры ящиков каждый раз .они произвольные.
как и размеры контейнера
так что там может быть не два ящика, а 100500 вариантов
l1 = int(input())
w1 = int(input())
h1 = int(input())
l1 = max(l1, w1)
w1 = min(l1, w1)
l2 = int(input())
w2 = int(input())
h2 = int(input())
l2 = max(l2, w2)
w2 = min(l2, w2)
lc = int(input())
wc = int(input())
hc = int(input())
lc = max(lc, wc)
wc = min(lc, wc)
if h1 + h2 <= hc and l1 <= lc and w1 <= wc \
and l2 <= lc and w2 <= wc:
print("YES")
elif l1 <= lc and w1 <= wc and l2 <= lc \
and w2 <= wc and h1 <= hc and h2 <= hc:
if l1 <= lc and w1 <= wc:
if (l2 <= wc - w1 and w2 <= lc) \
or (w2 <= wc - w1 and l2 <= lc) \
or (l2 <= lc - l1 and w2 <= wc) \
or (w2 <= lc - l1 and l2 <= wc):
print("YES")
elif w1 <= lc and l1 <= wc:
if (l2 <= wc - l1 and w2 <= lc) \
or (l2 <= lc and w2 <= wc - l1) \
or (l2 <= lc - w1 and w2 <= wc) \
or (w2 <= lc - w1 and l2 <= wc):
print("YES")
else:
print("NO")
else:
print("NO")
else:
print("NO")
else:
print("NO")
>так что там может быть не два ящика, а 100500 вариантов
Нет, ящика только два.
Зачем ты так код постишь? Во-первых зачем под спойлером, во-вторых используй сервисы для расшаривания, ссылки есть в шапке. Разбираться со съехавшими пробелами желания нет.
Но тут всего два ящика. Хотя аналогичная задача может быть на много ящиков. Например N ящиков, но двух типов. Либо N ящиков произвольного вида. Но это уже реально сложные задачи, особенно 3d вариант, когда все ящики разные.
Да это все понятно, можно и round использоваться.
Что интересно то и пиши, очевидно.
пиши игру на pygame. самый простой жанр это scroller типо игроком уворачиваться от предметов, или арканоид но это посложнее
https://pastebin.com/PzhNEtBL
если что я 3 дня изучаю питон я дурак не оскорбляйте пж
Оооо спасибо огромное
https://ideone.com/QI9lNx
а это хорошая практика использовать eval или лучше максимально воздерживаться от использования?
Можно использовать когда пользователь точно никак не может влиять на объект который евалят, ну максимум можно чтобы пользователь выбирал из списка, но никак не мог выбрать что-то что не задумано программистом, т.е нет в этом списке
Это какая-то спамерская хуйня, вполне возможно что там намеренно добавлены простенькие ошибки, чтобы вот такие левые хуи просто так не пользовались, лол.
Да и смысла ему что-то подсказывать нет.
Ни разу не видел в курсах сложный код, в большинстве случаев наоборот упрощенный.
Вкатываешься третий день?
Там достаточно сложный бот, с апи, со стейтами, с контекстом. Для нуба сложный. Вкатываюсь 3ий месяц.
первая строчка
>if current_field[y][x]:
"если массив ( то что?)" не понимаю что за условие тут
Спасибо большое!
что за курс? может он подразумевает, что ты уже знаком с питоном и вкатывает тебя только в телеграм?
Скилбоксовский. Апи вкудахта.
>может он подразумевает, что ты уже знаком с питоном
Поясню. Вот ты знаешь про свеклу, про мясо, про лук, про овощи там тебе рассказали про них по отдельности. И тут тебе показывают как с этого можно сварить борщ при этом быстро и с минимальными пояснениями.
Там это называется курсовая работа, пишут её какие-то опытный челики.
Заменяет некоторые имплементации сишными в текущем неймспейсе, но всё остальное доступно через _.
Извини, а можешь подробней. Как это происходит?
Лол, отбой, увидел на скриншоте выше.
Мессенджер
Рекомендую скачать vim, прекрасный консольный редактор. Может поначалу сложновато будет, но как привыкнешь, будешь кайфовать
Сейчас вот поставил себе задачу, вдохновляясь первым заданием с "Project Euler" https://projecteuler.net/problem=1 , найти сумму всех чисел, меньших X, которые делятся на хотя-бы одно из введенного набора чисел <X.
Как посчитать сумму чисел, меньших Х и кратных определенному числу, я придумал, пикрил (не берите в голову, наверное можно было менее запутанно придумать). Пользуясь этим, решить для двух, например, делителей достаточно легко - f(делитель1) + f(делитель2) - f(делитель1*делитель2). Для 3 тоже несложно, ручками. И так далее. А вот как решить эту задачу для ЛЮБЫХ Х и для любого набора делителей (меньших Х конечно) - хз. На ум приходит только найти все возможные произведения среди делителей (вроде 2^z - (z+1) произведений получится, где z - число делителей) и вычесть сумму f от каждого из этих произведений из суммы f(делитель1) + ... f(делитель z).
Забыл кринжовые инты убрать. тут есть тред, где просто задачи решают от скуки, с нулевым знанием синтаксиса и проч., а не вкатываются? а то я тут лишний наверное
Кстати, задачу стоит упростить таким образом, чтобы речь шла только о делителях, являющихся простыми числами. Иначе вообще муть какая-то, и логика, представленная в моем посте, не очень работает. никто не желает решить с любыми делителями? было бы интересно посмотреть...
...
1. Как мне в этот event loop добавить любой произвольный коллбек?
2. Это че на тредах пилить придется? Потому что иначе все будет блокировать к херам
3. Без создания кастомного говноняного event loop не работает что ли? В asyncio этого нет?
Вот куда ты лезешь в програмерство если у тебя базовых знаний нет?
Ну так сейчас везде интернет, как ты хотел?
>>909049>>909055
>нельзя ли сделать решение более экономным по времени
Ну что ты начинаешь... Мне просто интересно, как именно математически можно увеличить скорость вычисления, в рамках одного и того же языка, в данном случае - питона.
Так, мне пока что лень что-то писать, я не выспался нихрена, но есть одна идея, правда не принципиальная - надо сначала проверить все делители (у1, ... yN) на взаимную простоту, если НЕ взаимно просты, то большее число можно просто отбросить.
Подождите, не на взаимную простоту, а на наличие общих кратных. Если, например, есть число 63 и число 3, то большее, 63, надо отбросить. Вот.
Поясни на примере, я чота условие понять не могу.
Допустим, на входе (2, 5, 8, 14, 20), где Х = 20.
Ну вот, нужно найти сумму чисел, которые меньше 20 и делятся на хотя-бы один из (2, 5, 8, 14). То есть, 2 + 4 + 5 + 6 + 8 + 10 + 12 + 14 + 15 + 16 + 18.
Я кстати решил вместо дроча задачек, изучить основу работы интернетов и прочие фундаментальные принципы.
Думаю это будет полезней чем решать задачи которые можно нагуглить.
Конечно это качает моск, но нахуя мне тратить на это время, если я могу изучать основы!
Проще без дроча запилить приложение в браузере чем ебстись с портированием на все устройства.
Вот основы https://www.udemy.com/course/statistics-probability/ (на торрентах есть этот курс)
Дальше уже ищи учебники
Анон, посоветуй виртуалку линуксовскую чтоб с винды запускать. На работе не дают накатить другую ОС.
Не могу никак найти источник, где объясняют ВСЁ ПОДРОБНО, почему-то все каналы для начинающих рассчитаны на тех, у кого уже есть какие-то знания, а вся литература даёт только слишком базовые знания.
Ещё нужно понять, что именно и в каком порядке изучать в питоне, я уже знаю:
- переменные и их типы
- if/else
- списки и циклы
- буфером обмена
- файлы, запись, чтение
- функции
- регулярные выражения
ВСЁ, дальше хотел разобраться в библиотеке requests и ОХУЕЛ ОТ ТОГО, ЧТО НИКТО НЕ МОЖЕТ ОБЪЯСНИТЬ ВНЯТНО И ПОДРОБНО, а рассказывают так, как будто я блять всю жизнь писал на С++ и решил освоить питон. Перебрал уже 50+ источников.
СУКА, помогите, умоляю, двач - последний рубеж надежды
Зачем ты решил НАЧИНАТЬ с питона? Это очень сложный язык.
Всем здравия. Порекомендуйте книжку для вкатывания в питон. Лучше на английском.
Опыт программирования у меня есть, закончил колледж на программиста, писал активно на C++ да и на Python тоже. Но давно уже не программировал(месяца три может), так как не могу сейчас работать по профилю. Хочу структурировать свои знания по питону. Когда писал на нём, изучал его по принципу хочу сделать N, запрос в гугл "How to do N in Python".
Почитал шапку, но гайд 2015, кидает на статью на хабре 2012, которая кидает на книгу 2010, 2010, Карл!. А в превой ссылке на книжки просто свалка книг. Поэтому что читать не понятно.
Ну, вот, например:
5-я строка непонятна вообще, что такое search_query? Это ключ и значение?
6-я строка, непонятна конструкция url,data=query, что она делает? Почему именно так?
Что такое response? Когда применяется?
13-я строка: что конкретно он хочет получить этим?
Ты не понимаешь не питон, а программирование в целом, включая сетевые протоколы. Иди учи, как работает HTTP.
Анон, тут дело не в питоне, у тебя убито мышление, нужное для программирования. Иди кури математику школьную.
Дай угадаю, очередной ВОЙТИВАЙТИ безработный мамкин хуй?
Чому тогда ты пишешь что знаешь что такое списки и спрашиваешь что такое куери?
Напиши функцию для отправления гет и пост запросов на чистых сокетах, потом добавь заголовки и хендлинг печенек.
Для начала этого хватит.
Есть люди которые пользуются Atom IDE?
В последнее время он начал жадно кушать систему (проц грузит до 50%)
Есть идеи как исправить?
С такой манерой речи и подходу к новому, надеюсь тебя под жопу выпнут из образования.
WSL чем не устраивает?
Напиши сам.
raise Fault(self._stack[0]) xmlrpc.client.Fault: <Fault -32500: "RuntimeError: PyPI's XMLRPC API has been temporarily disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.">
Заебало. Весь pip теперь не работает из дудоса? и это навсегда?
пошол нахуй, наркоторговец.
>Блять, почему нет никакой реализации приватных чатов на джанге?
троллейбус из буханки хлеба.жпг
>такой манерой
Какой?
>подходу к новому
У меня отличное отношение к новому. Я просто оцениваю свои силы реалистично. Я биолог, не математик. Я чисто физически не смогу работать с, например, линейной алгеброй на уровне специалиста, потому что эти знания остались на первом курсе института в угоду клеточной биологии и молекулярной химии.
>>909626
И тебе не хворать.
>>909781
Благодарю за ответ.
да тебе не надо с алгеброй ней работать. R - высокоуровневый.
посмотри еще такую программу Orange.
Хотя в ML-треде ее регулярно обоссывают DL-зумеры, она представляет собой значительный прорыв в науке. Очень нравится таким как ты.
Потом, возможно созреешь до Knime.
Питон то и не требует ничего для портирования. Максимум закинуть в экзешник интерпретатор с исходниками.
ютубе есть неплохой русскоязычный курc по Orange . Ученым он даже возможно слишком простым покажется.
Если вы в своем пердежном институте даже классический statistical learning не применяете, Orange - это пиздец, прорыв.
Но для использования актуальнейших алгоритмов там нет ничего. Вот тут нужен питон.
У меня на одну строчку внешний сервер возвращает большую структуру данных, я её просто складываю в словарь и по нужде проверяю.
Но надолго же не оставишь, память пожрётся, нужна какая-то ротация кэша с учётом частоты использования.
Так в чем проблема применить материал, который тебе дали? С такими аналогиями из тебя бы вышел отличный заказчик-еблан
Ты еще здесь?
lru_cache
Спасибо
Уже давно не фриланшу, да и не агрился а сказал как есть. Просто задетектил вкатуна 25+
Кто из анонов в прошлом году вкатился на джанго, запилите кулсторей плиз про собесы и саму работу
В си-подобных языках совершенно понятно, как передается тип переменной в функцию (по значению или по ссылке)
В питоне, в целом то, тоже ок.Однако я не могу никак найти вразумительный ответ на тему того, как в функцию передается класс. Подскажите плес
Веб на питоне не пишут, там процента два его на рынке. А итт сидят одни вкатыши безработные.
Какие посоветуете книги о Питоне на русском для новичка? Английский знаю хорошо, но русский, как мне кажется, запоминается получше.
Я знаю как работает компьютер.
https://younglinux.info/python.php
Вот тут на русском и СУПЕР доходчиво. Можешь даже авторку поддержать и купить книгу рублей 100 стоит может чуть больше, не помню
И советую установить jupyter notebook
Это такая хуйня, которая будет в браузере запускаться и там ты можешь писать код. Но фишка в том, что можно всяко изучать переменные и данные без пердолинга(как это в специальных текстовых редакторах которые созданы для написания проектов).
Из минусов, это немного тормознутое автодополнение.
Жирно чел
В питоне всё объект и передаётся по ссылке. Но есть объекты иммутабельные, а есть мутабельные.
Любая переменная в питоне - это всего лишь id объекта.
Погугли как его установить, это не то. После установки будешь его из командной строки запускать и тебя будет направлять в браузер.
не ставь. это вредно.
это испортит становление тебя как классического программиста и только лишь приведет тебя к запутанным багам из-за разного порядка выполнения
Ноутбуки нужны датасаентистам, потому что результат их работы - Решение Проблемы, а не макакичный код.
>И советую установить jupyter notebook
>>910130
>Ноутбуки нужны датасаентистам, потому что результат их работы - Решение Проблемы, а не макакичный код.
Автокомплит плохой, ошибки не подсвечиваются, разбить код на несколько файлов нельзя, использовать гит нельзя. Основную фишку - интерактивную консоль с возможностью запуска произвольных кусков кода - завезли в пайчарм (в VS код скорее всего тоже, но я не проверял). Изучать переменные и данные в жупитере можно только через print, что крайне неудобно. В общем, ноутбуки - хуйня без задач, включая датасаенс.
Заранее спасибо.
Теперь синьйор?
Чтобы ты понял насколько всё хуёво - мне предлагали 8к + проездной за ведение полноценного дс проекта. Я конечно взлольнул, но призадумался.
Попробовал скачать с хаба готовый проект (так вроде лучше всего учить, не?), так вот когда пишет
Using the below command you can generate a video
>python3 __init__.py face ben.jpg morgan.jpg 5 25 example.mp4
Я хоть туда ввожу? Или как это вообще работает? Или я че-то не правильно установил...? или надо обратить внимание на warning вверзху?
Чтобы ты понял уровень абсурда ситуации приведу аналогию. Вот есть такая строчка "Чтобы перезапустить роутер нажмите на кнопку On/Off, подождите 5 сек и нажмите на кнопку On/Off еще раз". Ты нашел кнопку на клавиатуре, написал на ней фломастером On/Off, жмякаешь на нее и спрашиваешь что пошло не так. Попробуй начать с чего-то более простого, скачай питон с офсайта, там идет IDLE в комплекте. Найди любую книжку по питону в интернете и там чисто все по порядку делай.
>>910372
Что такое дс проект? Ты тоже джун?
ок уже разобрался
Я подумал, что можно воспользоваться формулой вычисления членов арифметической прогрессии. Потом закинуть эти числа в множество, повторить на остальных элементах списка и проделать операцию объединения множеств.
Но! Почему-то у меня в множество попадает и последнее число. Например, из списка sample = [x for x in range(3, 21)] для 4 последнее число 20. Я не очень силен пока в кодинге и не могу побороть это.
def get_sum(a1: int, sample: list) -> set:
....limit = (sample[-1] // a1)
....s1 = [a1 + (i-1)*a1 for i in range(limit+1)]
....return set(s1)
>? В чем мулька иметь докер
Докер не нужен. Профиты от него:
1. Один раз собрал контейнер (имеется ввиду написание докер файла) и дальше используешь где хочешь. Без него тебе прийдется поддерживать твой ЕС2 сервак в определенном состоянии (установленые пакеты, версии пакетов, версия ОС), тогда как с докером тебе нужно только чтобы на твоем сервере работал докер и все.
2. Все гавно запускается и убивается одной командой. Без докера тебе нужно самому будет запускать и останавливать все нужные сервисы. Конечно это автоматизируется скриптами, но с локером как-то попроще.
3. Моджный, молодежный.
>мне предлагали 8к + проездной за ведение полноценного дс проекта
Нечему удивляться. Нейронки умеют только в игры играть и генерировать шизофазию. Есть конечно компьютерное зрение, чтобы распознават либерастов на митингах, но для него питон - узкое место и его обычно меняют на плюсы.
В джанге есть модель пользователя, у пользователя есть атрибут is_blocked. Мне нужна кнопка в админке - "BAN", которая меняет это поле с Fasle на True. Как это реализовать?
Ну вот мне нужно как и для моей машины только поставить гит, чтобы тянуть код оттуда или как я его закину с гитхаба в докер?
Потом мне нужная всякая ботва типа анаконды для среды в котором это все будет ранится.
Как мне все это организовать? Спасибо.
потому что "питон - самый популярный второй язык".
но если ты знаешь только один язык, то для тебя нет вакансий.
> полноценного дс проекта
трансформация данных из экселей это не дс-проект. Хотя многие в дс вынуждены этим заниматься, они то знают свою конечную цель.
тебе просто предложили простую и грязную часть DS.
О, курсера.
Это какой курс, браток?
погружение в питон или основы питон? выглядит как основы питон, первая неделя вроде.
raise тип исключения('<описание проблемы>') ?
Докер нужен для изоляции сервисов от системы, чтобы ты мог поднимать много сервисов с разными настройками независимо друг от друга и т.п.
Он нужен, когда сервис занимает сетевые порты, прописывает себя в системные директории вроде /etc, /var и т.п.
Для тестов скорее всего докер не нужен, тебе нужно какое-нибудь виртуальное окружение питона, которое даёт достаточную изоляцию.
Если же тебе для тестов надо поднимать, например, копию своего веб сервера, то тогда уже пользая есть. Либо если твои тесты могут менять систему.
raise - выбрасываешь исключение
except - перехват исключений
try:
#your code
except Exception as ex:
print(ex)
То есть "перехват", это что делать при той или иной ошибке, а "выбрасывать" - показывать ту или иную ошибку?
Спасибо!!!
Есть штатный модуль cmd, может это тебе надо?
https://docs.python.org/3/library/cmd.html#module-cmd
Выглядит как то что нужно. Спасибо!
Вот это перемога
С точки зрения вкатывальщика-работяги любой из трех: пхп, ява, дотнет.
Это не значит что они лучше, но таков рыночек легаси и грязной работы.
а с точки зрения ПРО? плюсы?
Самое говно перечислил, лучше знать вторым языком го если чистый бэк, либо тс + ангуляр если фулл стек. Самые жирные и интересные вакансии на таком стеке.
И работу нужно искать в дс конторах, либо удаленка на запад.
Уже начал курсы проходить, правда всё ещё колеблюсь между R и питоном, ибо мне про оранж выше сказали. Но по питону как-то в мириады раз выше информации будет. Про перекатиться не знаю, я математикой не владею на нужном уровне, а питон, как я понял, требует огромного знания высших математических дисциплин. Но вообще интересно.
1024x1024, 0:05
Что где надо поменять чтобы убрать ебаную сетку?
Там вроде всего 9 файлов но не могу найти. Это вообще здесь менять или где-то в ебенях opencv?
https://github.com/Azmarie/Face-Morphing/find/master
Ничего никто не требует. Они все элементарные языки.
Это конкретная отрасль/вакансия может требовать, и то не факт.
Школьников и первокурсников учат на питоне
если ты знаешь математику в пределах школы, то этого хватит, если не собираешься нахуеверчивать научные мегабиблиотеки.
>Ничего никто не требует
Кукарекнул джун с 10к зп в душном опенспейсе. А настоящие сеньоры-мужики естесна знают вообще всё, топологию, линал, функциональный анализ, теорию автоматов и так далее. Поэтому этот залетный долбоеб-вкатыш естесна не осилит.
Вводится 2020 натуральных чисел.
полностю согласен
я пока докторскую по функциональному анализу и топологию не защитил, даже мидлом не брали
слава богу, поступил в мфти третий раз (ну третий дисерт же. конечно три высших еще маловато до сеньора, но все же) и взяли мидлом за 30к рублей - еще пару научных степеней - и можно будет попробовать пойти куда-то дальше технического писателя
>python for windows
>не работает на windows
>Потому-что ты долбаёб, читать не умеешь.
До слёз...
Все виноваты. Микрософт хочет поскорее закопать, этим лень возиться, хотя можно было просто забить.
Поясните должен ли django раздавать статику? или это должен делать nginx? у меня по сути есть сингл пейдж приложение и я index.html и js и css закинул в /var/www/static/ и по сути статику раздает nginx а api уже обрабатывает джаного, но т.к у меня SPA приложение то джанго у меня ловит все урлы которые не относятся к API и возвращает index.html который лежит в templates/myproject/index.html . но этот собственно index.html это копия из /var/www/static/ . и получается так что у меня на хостинге лежит просто приложение которые лежит по адресу / раздаёт ngnix а если надо роут которые прописан в конфиге vue-router то получается это запрос уже обрабатывает джанго. КАКАЯ ТО ХУЙНЯ ВЫШЛА. что делать? у меня нет в джанго юрлс ардресс / ничего не обрабатывает, это делает nginx. Я слышал что типо нельзя статику джангой раздавать потому что это всё качается через 1 процесс и если у клиента супер медленный интернет и таких клиетов много то кончатся все процессы нах в системе, разъясните этот момент ПЛЗ
Они только недавно избавились от поддержки питона 2.7, дай им отдохнуть =D
nginx стоит жопой в интернет и обслуживает всех клиентов, всё что может раздает сам, а динамику передает жанге. Больше тебе ничего знать не надо.
у меня джанго раздает только index.html если надо облуслужить путь который прописан в vue-router. а если надо просто выплюнуть / то это делает nginx. Похуй что джанго отдает 1 страничку всего?
>>911388
у меня таких нет всё рисует джава скрипт из данных которые приходят через django rest framework
Ну вот у тебя DRF динамика, всё остальное статика и должно раздаваться сразу nginxом.
а как мне например обработать site.com/user/1 так чтобы этот адрес отдавал не джанго? у меня есть в url такая штука
url(r'^.*$', TemplateView.as_view(template_name="index.html"))
и это прописано в самом конце urls, смысл в том чтобы все урлы которые не отностся к api обрабатывал vue-router, а без этой сточки он не обрабатывает, а с этой строчкой получается что django отдаёт страчку вместо nginx
Тебе нужно в самом nginx настроить, по какому урлу он будет передавать в жангу, например, /api, а всё остальное он раздаст сам.
Получается всё что не /api должно редиректится на index.html ? потому что у меня типо роутер на фронте сам этот вопросик решает, правильно понял?
По-моему, эти фронтовые фреймворки вообще не выпускают запросы на бэк, а сами перехватывают, так что дополнительно ничего делать не надо.
Так и пишет: no name 'myClassName' in module 'module1'
пс это появляется если сделать пакет из папки добавлением __init__.py
Спасибо! Ну вот я и планировал использовать анаконду для тестов.
А как-то можно гитэаб настроить или гит чтобы он сам пулил код с общего репа? Или просто заходить и пул делать самому?
Можно ли сервер настроить так, чтобы на нем тесты гонялись сами по себе скажем раз в день? Чтобы я даже не заходил в него запускать их?
Задача реально начинающего. Даже не джуна.
result = [i2 for i in range(1, 2020) if not i 2 % 4 if i2 % 8 if not i2 % 22 if i2 % 189]
Тоже мимо вкатываюсь, изучаю джанго, пока скучновато. Поясните, питонисты, в конструкции написанной выше же не будет каждый раз число возводиться в квадрат? Он же зарезервирует i2 в память и будет обращаться как к ссылке?
result = [i\\ 2 for i in range(1, 2020) if not i\\ 2 % 4 if i\\2 % 8 if not i\\2 % 22 if i\\2 % 189]
хотфикс, если не работает то там двойки в квадрат возводятся
можем кто дать ссылку как и что делать?
да я нуб и тупой
Это копия, сохраненная 2 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.