Python junior что это
Junior, Middle, Senior: чего мы ждем от кандидатов на позиции Python-разработчиков
Прежде всего, хочу заметить, что в DataArt мы смотрим на традиционную систему грейдов немного по-своему, используя 6 уровней: Junior, Strong Junior, Middle, Strong Middle, Senior, Expert. Промежуточные грейды позволяют дать более точное представление об уровне профессиональной подготовки кандидата или коллеги. Например, Strong Middle — состоявшийся разработчик с 3-4 годами опыта, которому расти до уровня Senior остается совсем немного. Внимательный читатель сразу заметил и уровень Expert — он обозначает человека, достигшего определенного дзена. Эксперт чувствует себя в теме, как рыба в воде, его опыту могут позавидовать многие. Такой человек строил свою карьеру, глубоко погружаясь в технологию и работая несколькими фреймворками в различных направлениях. Важно, что он может успешно решать задачи и в смежных технологиях.
Но в этой статье я поговорю о классических уровнях и о том, чего мы ожидаем от ребят, претендующих на соответствующие вакансии. Достроить необходимое для промежуточных — не так сложно. Конечно, важно, что на каждой позиции от человека требуются не только теоретические и практические знания технологии, но и так называемые софт скиллы. Последние практически не зависят от специализации, зато тесно связаны с личными качествами.
Чтобы внести ясность, сразу напомню, что Python — язык многогранный. С его помощью можно эффективно решать задачи по анализу данных, веб-разработке, машинного обучения, отчасти системному администрированию и веб-скрейпингу и даже автоматизации тестирования. Поэтому список вопросов и тем для обсуждения на собеседовании, конечно, будет меняться от проекта к проекту. Но в несколько упрощенном виде он будет выглядеть примерно так, как я опишу ниже. В основном поговорим о том, какими навыками должен обладать кандидат.
Junior
Мы предполагаем, что кандидат прошел стажировку в DataArt или имеет опыт работы в другой компании не менее полугода. Такой специалист уже должен принимать участие во внутренних встречах, сотрудничать и общаться с командой, уметь выходить из конфликтных ситуаций. Мы ждем, что он или она может самостоятельно выполнить задание по четко сформулированной инструкции, но не требуем дополнительного анализа требований или дизайна решения. Джуниор должен самостоятельно оценить объем работы, который потребуется для решения несложной задачи.
С точки зрения технологий от кандидата ожидается знание объектно-ориентированного программирования, понимание теории и некоторый опыт практического взаимодействия с основными шаблонами проектирования и тестированием. Конечно, мы будем рады видеть знание и опыт работы с базовыми конструкциями языка, понимание принципов работы простых алгоритмов и начальное представление о непрерывной доставке кода.
Соискатель должен понимать устройство HTTP-протокола и веба в целом, иметь хотя бы теоретическое представление о REST API. Крайне желателен опыт с одним веб-фреймворков. Поскольку в информационном мире нельзя обойтись без баз данных, мы обязательно беседуем с кандидатами об основах SQL, обсуждаем JOIN, взаимосвязи сущностей и запросы. Если человек хорошо подготовлен и не спал на парах в университете, можем обсудить принципы разработки ПО. Некоторый опыт работы с GIT мы считаем обязательным, опыт с HTML, CSS, JS, а также базами данных засчитываем как плюс в карму.
Middle
С этим грейдом все немного сложнее, так как кандидат должен обладать и всеми знаниями, нужными джуниору, но на более глубоком уровне. При этом мы ждем от него навыков, которые на начальном этапе карьеры можно назвать необязательными. Приблизительный опыт мидл-разработчика составляет 2-3 года. Он готов к встречам не только внутри команды, но и с заказчиком. Как правило, у него уже появляется начальный опыт руководства или наставничества. И конечно, он уже готов работать самостоятельно и решать поставленные задачи, не требуя детализированной инструкции.
По технической части мы ожидаем базового опыта работы с параллельными вычислениями, понимания отличий и принципов работы потоков и подпроцессов, знания, что такое GIL, зачем он нужен и как работает. На уровне Middle уже необходимо не только теоретическое представление, но и практический опыт работы с серверами приложений, юнит-тестированием, алгоритмами и структурами данных. Кандидат должен хорошо понимать проблемы безопасности: CSRF, CORS, XSS, SQL-инъекция, и оптимизации: профилирование, EXPLAIN ANALYZE, N + 1.
Кроме того, мы рассчитываем на базовое понимание жизненного цикла приложения и представление о ключевых компонентах: балансировщике нагрузки, сервере приложений (uwsgi, gunicorn), воркеров. Предполагаем некоторую практику c контейнеризацией: Docker, Docker compose, и наличие опыта работы с системами мониторинга ошибок и состояния системы.
Механизм баз данных нужно понимать уже достаточно глубоко: знать продвинутые запросы и их механику, понимать, что такое нормализация/денормализация и транзакции (хотя бы в теории), иметь практический опыт с работой индексов. Приветствуются базовые знания и опыт работы с микросервисной архитектурой, а также отложенным выполнением задач: Celery, RQ, Airflow.
Senior
Обычно такие кандидаты уже имеют 4-5 лет опыта в разработке, они должны уверенно чувствовать себя на встречах с заказчиком и быть в состоянии отстоять свое решение. Синьорные разработчики могут самостоятельно (или почти самостоятельно) работать над задачами любого уровня сложности. В принципе такой человек должен быть способен без постороннего вмешательства реализовать дизайн-решение и провести аналитическую работу, включая исследования, нужные для более эффективного выполнения проектных задач.
По техническим навыкам, соискатель должен хорошо разбираться во внутреннем устройстве Python, реализации GC, иметь опыт работы с AsyncIO, синхронными и асинхронными фреймворками. Важно иметь глубокие знания в сфере оптимизации решения, будь то веб, ETL-решение или фреймворк для тестирования.
Обычно мы обсуждаем опыт кандидата в построении SPA-приложений, работу с SQL и NoSQL базами данных, опыт оптимизации и работы с транзакциями. Приветствуется практические навыки работы с бессерверной архитектурой и интеграции с облачными провайдерами, горизонтального/вертикального масштабирования. Хорошо, если человек способен оценить риски решения до начала реализации. Плюсом будет опыт работы с фронтенд-фреймворком, таким как React, Angular или Vue.js.
Общие рекомендации
Стоит помнить, что интервью это не экзамен. Это беседа, позволяющая выявить, насколько компания и кандидат подходят друг другу. Конечно, инициатива и самые каверзные вопросы исходят от потенциального работодателя, но и соискателю не стоит стесняться спрашивать и отстаивать свою точку зрения. Будьте готовы, что минут десять нужно будет потратить на написание кода — например, решить небольшую задачу на знание языка или баз данных.
Основные рекомендации простые:
Помните, выучить и запомнить все невозможно, да и не нужно, а люди, которые проводят собеседование, тоже могут допускать ошибки. Готовьтесь к интервью — ведь это время — ваше и других участников процесса, его нужно использовать с пользой и по назначению. Будьте собой, не волнуйтесь и чувствуйте себя уверенно — тогда все получится.
Грядущие обновления грейдов
Подходы к градации, которые я описал выше, направлены, скорее, на классических web-разработчиков. Раньше Python в основном и использовался для построения web-приложений и, скажем, анализ данных затрагивал в меньшей степени. Сейчас ситуация изменилась: на рынке востребованы и ETL-разработчики, и дата-сайентисты, и DevOps, которые в качестве главного языка используют Python.
Определить грейды таких разработчиков по существующей системе может быть довольно проблематично.
Например, разработчик, который хорошо знает Python, но занимается в основном обработкой Big Data, может столкнуться с некоторым дискомфортом, если оценивать его будут как web-разработчика — ведь речь в его случае идет о несколько иных технологиях, подходах и представлениях. Такого специалиста, скорее, стоило бы назвать Senior Python-разработчиком с упором на ETL. То же касается и дата-сайентистов.
Недавно ко мне обратились HR-специалисты с просьбой проверить, вырос ли Python-левел коллеги, который занимается Data Science. Пообщавшись с ним, я понял, что уровень знания Python за 10 месяцев у него вырос с Junior до Strong Junior. Обычно такое движение происходит быстрее. Но позже мы встретились с этим коллегой в другом проекте, где он отлично справлялся с задачами как дата-сайентист уровня Strong Middle. Ясно, что по-прежнему числить его Strong Junior Python-разработчиком неправильно, сейчас мы занимаемся системным решением, которое устранит подобные несоответствия.
Python растет и уже стал третьим по популярности языком программирования. Он развивается и охватывает все больше доменных зон. В связи с этим мы в DataArt ведем работу по расширению и развитию нашей градации специалистов, разрабатываем стратегию обновления грейдов в соответствии с текущими и будущими изменениями. Как только обновления будут готовы, мы обязательно поделимся с вами новым видением. Оставайтесь на связи!
Что должен знать разработчик на Python без опыта?
Язык программирования Python является одним из наиболее популярных и востребованных. Освоить его относительно просто, плюс на рынке труда вакансий очень много: те же сайты HH или Rabota предлагают сотни вакансий. Если же вспомнить, что Python разработчик получает зарплату в районе 70 000 — 300 000 рублей (особенно высока зарплата в Москве и Санкт-Петербурге), то становится понятно, что игра стоит свеч. Однако в реальности все зависит от опыта, и до такого заработка еще надо «дорасти». Но, как и любой генерал когда-то был простым солдатом, так и любой Senior-программист когда-то был джуниором или стажером. В этой статье мы рассмотрим, что требуют современные работодатели на собеседованиях у начинающих программистов на Python.
Какое должно быть образование?
В большинстве случаев резюме на позицию джуниора подают выпускники университетов либо студенты 4-5 курсов технических специальностей. Важны и соответствующие курсы, пройденные как очно, так и онлайн. Это могут быть курсы от Otus, Stepic, Coursera и т. п. В данном случае речь идет о получении дополнительного профильного образования, а образования много не бывает.
Когда цель соискателя — получить работу разработчика Python в сфере Data Science, пригодятся хорошие знания математики, опыт выступления на конференциях, магистерская степень либо аспирантура, а также наличие авторских научно-технических публикаций.
Однако работодатели могут взять на позицию Джуниора не только разработчика программного обеспечения без опыта, но и программиста без высшего образования — такие случаи бывают. Но следует учесть, что для этих кандидатов возможно проведение дополнительных испытаний.
Чтобы получить работу, нужен опыт, чтобы получить опыт, нужна работа
Тот, кто имеет опыт неудачных собеседований при попытке попасть в IT, хорошо знает, как непросто бывает прорваться в эту сферу. Что уж греха таить — попадание в IT для многих становится счастливым билетом в более качественную жизнь, где зарплата высока, социальный пакет приятен, а ежегодный отпуск в теплые страны находится в порядке вещей. Следовательно, желающих с каждым годом становится все больше, в результате чего растут требования к соискателям, причем растут гораздо быстрее, чем заработная плата. Некоторые утверждают, что современный джун должен иметь знания на уровне мидла 10-летней давности.
Очень часто, когда ищут специалистов без опыта, работодатели все же слегка лукавят. К примеру, они требуют, чтобы вы имели опыт от полугода или, по меньшей мере, чтобы за вашими плечами была стажировка в ИТ-компании (то, что вы должны иметь за плечами пройденные курсы, даже не обсуждается — это уже давно из серии «must have»).
Но что делать, если образование есть, знания есть, сертификат после курсов есть, а вот опыта нет от слова совсем? В таком случае вы должны иметь в своем активе какие-нибудь завершенные личные либо учебные проекты. Такие проекты весьма важны, т. к. работодатель на их основании сможет сделать вывод о вашей реальной заинтересованности в предметной сфере и о вашей стремлении к развитию. Поэтому:
— будьте готовы опубликовать свои проекты на GitHub или на личном сайте-портфолио;
— будьте готовы рассказать на собеседовании, какая задача стояла, какие технологии вы выбрали, почему именно их и т. д.
Важно помнить, что дополнительные проекты не только выделят вас из толпы соискателей, но и позволят дополнительно прокачать собственные навыки разработки на Python.
Какие soft skills особенно важны?
При работе на реальном проекте программисту Python недостаточно иметь необходимые технические навыки и уметь решать поставленные задачи. Не менее важны различные социальные и личностные качества:
— умение коммуницировать с людьми;
— умение работать в команде;
— стремление к профессиональному росту;
— повышенное чувство ответственности;
— умение управлять своим рабочим временем.
Все это — базовые soft skills, необходимые почти на любой должности в сфере IT.
Если речь идет о кандидате без опыта, претендующего на позицию джуниора, то тут можно сделать акцент на следующих навыках:
— умение быстро осваивать много нового материала, способность учиться;
— умение вникать в суть поставленных задач;
— умение быстро схватывать, что от тебя хотят;
— отсутствие страха перед рутинными задачами.
На собеседовании могут спросить об отношении соискателя к рутинным задачам, и это неспроста, т. к. работа нередко включает в себя монотонные процессы. Задавая этот вопрос, работодатель просто желает убедиться, что на вас стоит тратить время, то есть вы не заскучаете через 2 месяца и не сбежите, т. к. «неинтересно». Идеальный ответ — что-то вроде: «Сейчас такие задачи для меня — это реальная возможность получить опыт и отработать свои навыки. В перспективе этот опыт позволит мне справляться с более сложными задачами».
Также могут спросить, по какой причине вы желаете работать именно в этой компании, именно на этом проекте, именно на этой должности. Чтобы высказать искреннюю заинтересованность и произвести наиболее благоприятное впечатление, желательно заранее изучить:
— будущие задачи, проекты, продукты;
— особенности компании, ее корпоративную культуру;
— условия работы и т. п.
Выберите, что для вас действительно важно. Неплохие ответы звучат так:
— «В вашей компании я смогу полностью реализовать свои компетенции и получить ценный опыт»;
— «Моя кандидатура прекрасно подходит под ваши требования, так как я владею следующими техническими навыками…»
Какие технические навыки нужны?
Самое главное — это знание языка программирования Python и умение писать на нем код. Порой требуются разработчики (developers), которые имеют базовые навыки программирования и на других языках: C++, Java, Golang и т. п.
Обычно на собеседованиях проверяют еще и общую IT-грамотность. Вы должны знать, как работает компьютер и программные приложения (мобильные, десктопные), как функционирует интернет, иметь понимание работы сетей передачи данных, разбираться в алгоритмах и структурах данных. Вдобавок к этому, желательно:
— уметь работать с базами данных;
— знать фреймворки (хотя бы общее понимание должно присутствовать);
— понимать принципы асинхронного и многопоточного программирования;
— уметь работать в командной строке, иметь начальные навыки системного администрирования (простейшие команды в Linux не должны вас пугать).
Если речь идет о брендовой компании, то собеседование делится на несколько этапов, на каждом из которых проверяется определенный пул навыков, в результате чего отбираются лучшие.
Иногда разработчика Python ищут под задачи Machine learning. Когда речь идет об отборе Data Science-специалиста, дополнительно проверяются знания алгоритмов машинного обучения. Соискатель должен уметь их применять, идеально, если он участвовал в хакатонах или Kaggle-соревнованиях по Python. Не обойтись и без математики: не должны вызывать затруднений ни теория вероятности, ни линейная алгебра, ни математический анализ.
Что повторить?
Ниже представлен краткий список того, что нужно повторить перед собеседованием:
Подытожив, скажем, что далеко не всегда на собеседовании будут задавать вопросы из всех вышеперечисленных разделов. Но важно понимать, что от кандидата на позицию Junior Developer ждут, если не досконального знания, то хотя бы общего понимания сути описанных процессов. Вдобавок к этому, всегда смотрят, в правильном ли направлении вы мыслите, пытаясь ответить на неизвестный вопрос. И чем более подготовленным будет соискатель, тем больше шансов получить работу разработчика на Python — работу, которая по мере накопления знаний станет для вас действительно высокооплачиваемой.
Примеры вакансий разработчиков на Python можно посмотреть на Jobsora.
Кто такой Python-разработчик, что делает и где работает
Здравствуйте! В статье поговорим о программистах на Python. Разберемся, чем занимаются разработчики, что входит в их обязанности, востребованы ли специалисты, куда можно трудоустроиться и какие перспективы у профессии.
Кто такой Python-разработчик и чем он занимается
Python-разработчик – это IT-специалист, который участвует в создании сайтов, игр, онлайн-сервисов, ботов для соцсетей и другого ПО. Язык программирования Python используется в разных отраслях, но наиболее популярен в следующих направлениях:
Python-программисты занимаются созданием, техподдержкой и доработкой совершенно разных цифровых программ: отсайтов до нейросетей. Ниже подробно расскажем про все, что нужно знать о профессии: знания, навыки, квалификации разработчиков, сферы деятельности и перспективы в карьере.
Питон – это про backend или про frontend
Python – это универсальный язык, который используется для реализации разных задач. При желании его можно применять в разработке фронтенда, но в большинстве случаев целесообразнее писать код для внешней (клиентской) части программы на более подходящем языке, например, на JavaScript. Поэтому можно сказать, что Python – это язык для backend-разработки, поскольку он подходит именно для программирования на стороне сервера.
Backend-разработчик на Python – это специалист, который разрабатывает серверную (внутреннюю, скрытую) часть приложения, и отвечает за внутреннюю архитектуру, логику и взаимодействие с базами данных. Его главная цель – сделать так, чтобы сервисы понимали запросы, а сайты правильно реагировали на действия пользователей. Например, чтобы при нажатии кнопки товар добавлялся в корзину или заявка уходила на рассмотрение.
Какие задачи решает бэкенд-разработчик:
Что делает fullstack-разработчик
Fullstack-разработчик на Python – это профессия, которая совмещает сразу 2 направления: frontend и backend. То есть full stack – это универсальный специалист, который может самостоятельно и с нуля создавать клиентскую и серверную части сайта или веб-приложения.
Что умеет делать фулстэк-программист:
Что должен уметь программист на Python
Перечислим, что должен знать и уметь программист на Питоне:
Обучиться Питон-программированию можно на онлайн-курсах. Мы собрали для вас обучающие программы проверенных школ. С помощью удобного фильтра вы можете отсортировать их по стоимости, длительности, формату занятий и другим параметрам.
Расскажем подробнее о том, какие знания и навыки должны быть у Python-разработчиков разных квалификаций.
Junior
Junior-разработчик на Python – это начинающий специалист с опытом разработки от 6-12 месяцев, который знает на базовом уровне язык программирования, фреймворк Django и базы данных.
Особенности работы джуниора:
Junior – это первая ступень в разработке, на которой нужно интенсивно заниматься самообразованием и читать код более продвинутых программистов.
Middle
Миддл-разработчик на Python – это специалист среднего звена с опытом от 2-3 лет. Он знает язык программирования и фреймворки на продвинутом уровне, имеет базовое понимание жизненного цикла приложения.
Особенности работы middle-специалиста:
Senior
Senior-специалист – разработчик высшего звена с опытом от 5 лет, который может работать над проектом любого уровня сложности. Он хорошо разбирается в синтаксисе Python, синхронных и асинхронных фреймворках, знает специфику своего стека и особенности его работы в разных окружениях. Может самостоятельно спроектировать масштабное приложение.
Он понимает, в каких случаях следует использовать или отказаться от определенных паттернов или решений. Благодаря большому опыту консультирует менее опытных коллег.
Senior может стать тимлидом, который не только участвует в технической части разработки, но и руководит другими программистами, распределяет задачи, согласует условия с заказчиком и защищает итоговый проект.
Востребованы ли Питон-разработчики
Python входит в тройку самых популярных языков программирования на протяжении последних лет. Именно его используют крупные технологические компании, например, Uber, Pinterest, Mozilla, Spotify, Netflix и Asana.
Питон можно считать одним из наиболее перспективных языков, поскольку его применяют не только в веб-разработке, но и в аналитике данных, машинном обучении и других высокотехнологичных отраслях.
Чтобы выяснить, насколько востребованы Python-разработчики, мы изучили данные на сайте HeadHunter. На текущий момент опубликовано более 13 000 вакансий для специалистов со знанием языка Питон. Из них:
Если вы хотите работать Python-developer, читайте нашу статью Как научиться программированию на Питон и стать разработчиком с нуля.
Место работы
Перечислим отрасли, в которых наиболее востребованы разработчики на Python:
О зарплатах Питон-программистов читайте в статье Сколько зарабатывает Python-разработчик в России и за границей.
Перспективы профессии
Мы изучили отзывы о профессии и собрали самые распространенные варианты в карьере Питон-разработчика:
15 вопросов по Python: как джуниору пройти собеседование
Готовитесь к собеседованию на позицию Python-джуниора? Подборка важных вопросов по Python с объяснением и полезными ссылками вам поможет.
Python надежно занял место в пятерке самых популярных языков программирования. Кажется, в ближайшее время он не собирается сдавать позиции. Число разработчиков растет быстрее, чем количество рабочих мест для них. Чтобы получить должность джуниора в хорошей компании, важно отлично показать себя на собеседовании. Итак, что же должен знать начинающий Python-программист по мнению работодателя.
О Питоне в двух словах
Разумеется, отправляясь на интервью по Python, соискатель должен иметь общее представление об этом языке программирования.
Мировые IT-лидеры, такие как Google и Dropbox, активно используют Python в своих проектах. Причина популярности кроется в его простоте и мощности.
Прежде всего, язык эффективен в активно развивающихся сферах веб-разработки, машинного обучения и big data. На нем создаются игры и научные модели. Также он с успехом применяется в системном администрировании и автоматизации задач.
Python относится к интерпретируемым языкам и не требует компиляции. Обработчик проходит по Python-коду построчно и сразу его выполняет. Это облегчает отладку, но может негативно отражаться на скорости работы. Самый известный интерпретатор называется CPython.
Официально язык поддерживает ООП. Но в то же время в нем имеются средства для функционального программирования. Так что Python не ограничивает разработчика в парадигмах.
10 базовых вопросов по Python
Прежде всего, программист должен хорошо знать свой рабочий инструмент и его возможности. В противном случае придется изобретать велосипеды и тратить время на поиски очевидных решений. Чтобы показать себя в лучшем свете на собеседовании, просмотрите еще раз справочники по Python.
Изменяемые и неизменяемые типы данных
Все данные относятся к одному из двух типов – неизменяемые или изменяемые. Очевидно, что первые в конце программы выглядят точно так же, как и в начале. К ним относятся числа, строки и кортежи. С другой стороны, списки и словари могут измениться в процессе работы. Например, добавятся или удалятся элементы.
Когда данные передаются в функцию, способ их обработки зависит от типа. Например, для неизменяемых чисел создается независимая копия. Следовательно, любое преобразование внутри функции не повлияет на исходное число. И наоборот, вместо изменяемого списка передается указатель на то место в памяти, где он хранится. Таким образом, все трансформации повлияют на внешний объект.
Первый вызов функции foo предсказуемо выведет список, состоящий из одного элемента 1. Однако если вы ожидаете такого же результата от второго и третьего вызовов, то будете удивлены. На самом деле, вывод будет следующим:
Так происходит, потому что при первом вызове в памяти создается пустой список a. Именно к нему функция будет обращаться и дальше, если не получит собственный аргумент. Так как список не копируется, а передается по ссылке, он будет изменяться.
Эту концепцию важно понять, чтобы не допускать подобных ошибок. Их сложно отследить в процессе отладки, поэтому приходится тратить много времени на поиск проблемы.
Хеширование
Хеш-таблицы – это особые структуры данных, подобные ассоциативным массивам. Ключами в них могут выступать не только числа, но и другие объекты. Однако есть одно важное условие. Для каждого ключа требуется вычислить особый уникальный код. Этим занимаются специальные функции.
Хеш-функции получают на входе данные разного объема, а возвращают хеш фиксированной длины. Набор данных может пройти через такую функцию много раз, но результат для него будет одинаковым. И наоборот, для наборов, отличающихся хотя бы одним символом, коды всегда разные.
Не каждую порцию данных можно хешировать. Возьмем, например, список, изменяющийся в процессе работы программы. В разные моменты времени его хеш будет разным.
Часто говорят, что изменяемые объекты Python в принципе нельзя хешировать, а неизменяемые – всегда можно. На самом деле, возможность хешировать объект и его неизменяемость – понятия разные.
Лучше разобраться в концепции поможет видео:
Виды строк
Оперировать строками в Python – одно удовольствие, так как язык предоставляет для них множество удобных методов. Также имеется поддержка «сырых» строк и строковых литералов.
Чтобы строка стала «сырой», перед ней необходимо поставить символ r в любом регистре:
В такой строке отключается экранирование. Это значит, что обратная косая черта считается самостоятельным символом. Основное применение сырых строк – работа с регулярными выражениями.
Строковые литералы заключаются в тройные кавычки или апострофы. С их помощью удобно обрабатывать большие блоки текста, например, HTML-код, так как их можно разбить на несколько строк. Экранирование кавычек внутри литерала не требуется.
Этот код выведет все, что находится между тройными апострофами. При этом кавычки в значении атрибута и переносы строк сохранятся.
Лямбда-выражения
Списки
Многие программисты испытывают сложности с пониманием списков. Однако, это очень важная тема, и в ней необходимо разобраться.
Вот небольшая задачка по python-спискам для тренировки мозга:
Определите, что находится в каждой переменной, и сравните свои предположения с ответом.
Если эти преобразования вам непонятны, потратьте на них немного времени.
Итераторы и генераторы
Пример простого итератора:
На базе итераторов в языке появились новые элементы синтаксического сахара: выражения-генераторы и генераторы коллекций. Они позволяют устанавливать условия для отбора.
В этом примере из списка чисел отбираются четные, а в финальную коллекцию вносятся их квадраты.
Выражения-генераторы не создают целый список заданной длины сразу, а добавляют элементы по мере необходимости.
*args и **kwargs
Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции *args и **kwargs.
На самом деле, названия переменных – args, kwargs – это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.
Можно заменить *args на *vars, а **kwargs на **options или другое слово. Программа будет работать так, как ожидается. Однако, другие разработчики могут вас не понять.
Конструкции *args и **kwargs можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg обрабатывается отдельно, а все остальные собираются в коллекцию.
Декораторы
Функции и классы в Python – объекты удобные. Они сами могут быть входящими и исходящими аргументами функций. Это свойство можно использовать, чтобы сделать жизнь разработчика немного приятнее.
Смысл паттерна Декоратор заключается в том, что некоторая функция заворачивается в другую функцию, приобретая от нее новые возможности. Например, так можно вести логи, вводить пред- и постусловия, добавлять методы для классов.
Код ниже описывает обычный вариант приготовления сэндвича. Нужно взять что-нибудь мясное, обложить с двух сторон овощами и положить в булку.
Изначально функция sandwich только печатает начинку, а затем она становится полноценным бутербродом. То же самое можно сделать чуть проще:
Вместо привычного синтаксиса вызова функции, используются два декоратора, которые оборачивают исходный сэндвич. Название остается прежним, но результат работы уже другой.
Исключения
При анализе или исполнении кода иногда возникают ошибки или исключения. Например, это может произойти при попытке чтения файла, которого не существует. Хороший разработчик должен уметь ловить и обрабатывать их.
В Питоне определен главный класс BaseException, от которого наследуются все остальные классы ошибок. У него есть четыре прямых наследника:
От класса Exception наследуется больше десятка различных ошибок, которые может обработать программист. Вот лишь некоторые из них:
В Python изначально заложена поддержка ООП, метаклассов, наследования, включая множественное, и инкапсуляции.
Пример наследования в Python:
Класс CatDog демонстрирует пример множественного наследования в Python. Он берет лучшее от обоих родителей: плавает как Dog и говорит на двух языках.
5 вопросов о Python-технологиях
Потоки
Вопрос о потоках – один из самых животрепещущих в сообществе. Поэтому вполне можно ожидать, что он прозвучит на собеседовании по Python.
Работа нескольких потоков иногда заканчивается конфликтом. Чтобы защититься от этого, CPython использует технологию Global Interpreter Lock.
Глобальный блокировщик следит за тем, чтобы активен был всегда только один поток. По сути, он просто запрещает параллельность. Хотя такой подход очень упрощает работу, он фактически убирает все преимущества многопоточной модели. Например, нельзя ускорить программу, разделив один поток на несколько. Python-сообщество неоднократно просило убрать GIL, однако, создатель языка решил оставить все как есть.
Впрочем, иногда потоки нужны. Например, на них можно переложить загрузку файлов с сервера. Для этого в Python используется модуль threading.
Код ниже демонстрирует добавление функции clock в поток.
Асинхронность
Асинхронность – еще один способ выполнения нескольких задач сразу. Она предлагает решать проблему с помощью функций обратного вызова (callback).
Встретив в коде блокирующий запрос, интерпретатор вешает на него сигнальный маячок и идет дальше. Когда запрос завершится, маячок подаст сигнал. В этот момент обработчик вернется, получит результат и вызовет коллбэк.
В Python есть несколько асинхронных библиотек. Самые популярные из них – стандартная AsyncIO и Tornado.
В последних версиях языка появились новые синтаксические конструкции async и await.
Тестирование
В Python есть стандартный модуль unittest. Он позволяет объединять тесты в группы, настраивать и автоматизировать их. Дополнение Mock дает возможность использовать mock-объекты, что облегчает тестирование.
Отладка
Python-код можно и нужно отлаживать. Для этого в языке есть специальный интерактивный дебаггер pdb.
Расширения на C/C++
Интерпретатор CPython позволяет внедрять в программы расширения, которые написаны на C и C++. Разработчик может оптимизировать код и пользоваться библиотеками языка C. Кроме того, можно управлять ресурсами на низком уровне.
Другие вопросы
Список из 15 вопросов по Python не является исчерпывающим.
Многое зависит от специфики компании, которая проводит интервью. Где-то требуется знание популярных фреймворков, например, Django. В другом месте важно понимать основы взаимодействия с базами данных.
Тем не менее вопросы охватывают большую часть знаний, которые нужны разработчику. Разобравшись в них, вы улучшите свои шансы на успех.
Вероятно, вам предложат задачи по Python. Чтобы решить их, нужна не только хорошая теоретическая подготовка, но и практика. Начните с простых упражнений и постепенно поднимайте свой уровень.