Задания на питоне для начинающих. Язык программирования Python — с чего начинать? Скринкаст по Python от ShowMeDo

Как никогда популярен, используется где только возможно, начиная от бекенд серверов, заканчивая разработкой фронтенд игр, и так далее. Python по праву считается языком общего назначения и быстро становится мастхев инструментом в арсенале любого уважающего себя программиста.

Но Python популярен не только потому что он популярен. Его легко учить, читается он как псевдо-код и он очень динамичный. Однако, изучение нового языка может оказаться довольно проблематичным занятием, найдя правильное место для обучения и людей от которых можно узнать новую информацию, вы решите половину поставленной задачи. Наш путеводитель поможет вам в этом. Это будет ваш надёжный план, который облегчит изучение Python, сделает процесс обучение весёлым и интересным.

Задание 1: начните с основ

На момент написание этой статьи, существует две основные версии Python: Python 2.7 и Python 3.2. Какую версию вы выберете для изучение не так важно, так как различия будут минимальными-особенно для новичка. Но вам стоит знать, что Python 2 поддерживает больше сторонних библиотек, в то время, как Python 3 в основном фокусируется на разработчиках работающих над улучшением языка. Выбор остаётся за вами, если код из какого-либо туториала работает не так как задумано, убедитесь, что вы используете подходящую версию Python из этого туториала.

Wikibooks всегда был надёжным источником для изучения чего-то нового и Python тут не исключение. Здесь вы найдёте отличную серию руководств, которая поможет вам лучше ориентироваться в Python. Здесь не будет множества технологичных терминов и вы можете приступить к написанию кода довольно быстро, что несомненно окажется полезным опытом. Поэтому я рекомендую этот сайт, как подходящее место, с которого стоит начать ваше путешествие в язык Python.

Вы не найдёте лучший источник информации, чем официальная документация на сайте python.org. Тем не менее, если вы хотите начать сразу отсюда, это может оказаться плохой идей.

Контент здесь является более техническим, чем wikibooks, что в свою очередь окажется полезным позднее, по мере продвижения в изучении языка. Для новичка содержание может показаться сложным и это окажется препятствием в изучении этого простого и красивого языка.

Для начинающих самым заметным отличием Python 2 от Python 3 скорее всего будет возможность в Python 2 использовать print без скобок. Скобки в Python 3 обязательны, на этом пожалуй всё.

Задание 2: туториалы и скринкасты

Плейлист NewBoston всегда замечательный и вы можете изучить множество языков. "Bucky" отличный инструктор, его интересно слушать, так как он нашёл баланс между быть смешным и информативным, то что он пытается донести всегда легко воспринимается. Я рекомендую ознакомиться с любым из его плейлистов-особенно с плейлистом Python. Не нужно обладать какими-либо знаниями в программировании, после просмотра его видео туториалов у вас появиться прочное понимания языка.

Nettuts+ Python с нуля

Неплохим введением в язык Python будет курс Giles Lavelle. Как и в случае с серией от TheNewBoston, Lavelle подразумевает, что у вас нет опыта в программировании.

Если вы хотите увидеть реальные приложения или хотите понять веб-разработку на Python, эта серия подойдёт, как нельзя кстати.

В этом скринкасте вы создадите динамический веб-сайт с нуля, используя Python фреймворк Django.

Скринкаст по Python от ShowMeDo

StackOverflow известен не только новичками, ошибками и проблемами.

ShowMeDo обладает огромным каталогом видео относящихся к Python. Хотя может показаться, что на сайте не самый лучший пользовательский интерфейс, там находится огромный набор полезных видео, как информация для новичков, так и продвинутые методы использования Python. Вам обязательно стоит ознакомиться с этим сайтом.

Создайте Python бота, который может играть в веб-игры

В этом туториале вы познакомитесь со специфичным материалом, я не рекомендую его абсолютным новичкам. Однако я думаю его стоит упомянуть. В данном уроке, Chris Kiehl покажет как создать очень интересного Python бота, который будет играть в простую игру для вас. Туториал покажет вам мощь Python; он может пригодиться для решения повседневных задач, которые можно применить для управления вашим компьютером.

Задание 3: бесплатные электронные книги

Хорошая книга несомненно является надёжным помощником во время изучения чего-либо нового, вокруг языка Python образовалось потрясающее и дружелюбное сообщество, в следствии чего можно найти большой выбор бесплатных электронных книг. Ниже вы увидите небольшой список лучших книг. Можно скачать бесплатную электронную версию каждой из них или купить печатное издание (или пожертвовать) если хотите поддержать автора, я уверен они это оценят.

Learn Python the Hard Way

Несмотря на название книги - "Не простой подход изучения Python", изучение Python всё также является простым занятием-как это и должно быть! В данной книге, Zed A. Shaw даёт вам полное и подробное руководство, с задачами и примерами с помощью которых вы можете проверить свои силы в программировании. Книга написана неформальным языком, однако описывает детально множество подробностей, тем самым у вас не возникнет трудностей при её прочтении и результат не заставит себя ждать.

Think Python: How to Think Like a Computer Scientist

Вы не найдёте лучший источник информации, чем официальная python.org документация.

Как гласит подзаголовок, "Думать, как программист", здесь вы найдёте много теоретического материала. Возможно новички могут расстроится и книга покажется им сложной, но поверьте мне, она стоит того чтобы её прочитали, тут вы найдёте информацию о теории алгоритмов и концепциях высокого уровня.

Invent With Python

Если вас больше интересует практическая часть, создание своей игры, будет действительно полезным опытом! В этой книге, Al Sweigart предполагает, что вы не обладаете уверенным знанием Python и помогает создать вам игру. Несмотря на то что эта книга о разработке игр, она также вполне подойдёт полным новичкам. Позднее в этой статье, я упомянул похожую книгу, однако для неё требуется уверенное владение Python. Если вы чувствуете, что хорошо знаете язык, того другая книга окажется более информативным источником для вас.

The Django Book

В том случае, если хотите научиться веб-разработке на Python, вероятнее всего вы будете использовать фреймворк Django. Вы можете быть не знакомы с фреймворком Django, однако должны отлично разбираться в Python, для прочтения этой книги. Информация в ней незаменима для любого начинающего веб-разработчика.

Книги по Python

Если всех вышеперечисленных книг недостаточно или вас интересует специфичная тема, перейдите по этой ссылке. Ребята с python.org создали обширный список книг, отсортировали их по сложности и тематике.

Задание 4: познакомьтесь с StackOverflow

Тысячи разработчиков испытали те же самые проблемы, с которым вам придется столкнуться лицом к лицу. StackOverflow великолепный источник информации, где любой разработчик может найти решение своей проблемы. Когда вы столкнётесь с очередным багом и у вас не будет идей как его исправить, ищите ответ на StackOverflow. Скорее всего там, уже есть информация, как другие люди решают аналогичную задачу.

Но StackOverflow известен не только новичками, ошибками и проблемами; на этом сайте полно очень умных людей, готовых помочь - учитесь у них!

Большинства хитростей и советов, которые вы здесь найдёте, нет ни в одном из туториалов, они будут очень полезны продвинутым пользователям или пользователем со средним уровнем знаний Python.

Задание 5: проект Euler


Project Euler (произносится ‘Oil-er", запомните это, чтобы не ударить в грязь лицом, в будущем) один из моих любимых веб-сайтов. После создания аккаунта, вы можете принять участие и решить примерно 400 заданий, на этом веб-сайте. Каждое задания на 50 процентов математика, на 50 процентов программирование, на мой взгляд, самый правильный подход изучения каждого из этих предметов.

Задания начинаются с простых, чтобы проверить ваш уровень знаний языка, после чего сложность будет возрастать, в последствии появятся задачи, которые не сможет решить, даже опытный программист. В конце-концов, вам придётся найти самый эффективный алгоритм - на тот случай если у вас нет времени, ждать несколько часов на вычисление правильного ответа.

Ничто не сможет сделать вас превосходным программистом быстрее, чем поиск самого эффективного решения задач на Project Euler.

Когда вам удастся получить решение очередной проблемы, для вас откроется страница форума, где люди обсуждают решения и идеи друг с другом, касательно этой задачи. Большинство этих решения будут на языке Python. Это тот самый ключ, который поможет значительно улучшить способности программирования. Если кто-то нашёл более быстрое решение, не бойтесь потратить время и проанализируйте его, тем самым вы сможете понять какие моменты стоит переработать. Со временем, вы начнёте понимать все хитрости и навык владения языком Python улучшиться, результат не заставит себя ждать.

В дополнению к этому, есть несколько информативных блогов, где можно найти решение задач по Python на Project Euler. Если застряли на какой-нибудь задаче, ничего страшного если вы ознакомитесь с решением других разработчиков, самое главное научиться чему-то новому от них. Вот два моих любимых блога:

Задание 6: создайте игру

Помимо создания своей игры, лишь несколько вещей могут приносить удовольствие.

Помимо создания своей игры, лишь несколько вещей могут приносить удовольствие. Это может оказаться довольно крутой кривой во время процесса обучения, но это точно того стоит. PyGame самая известная библиотека для разработки игр на Python, и вам не составит труда найти бесплатные туториалы о ней. Ниже самые лучшие из них.

Официальная PyGame документация

Как и в случае с туториалами по Python, разработчики PyGame сделали документацию - введение. В материале полно технической терминологии, на случай если хотите приступить сразу к разработке игр. Однако, как всегда, документация для разработчиков, будет самым лучшим источником информации; поэтому я и рекомендую этот сайт.

Invent With Python (With PyGame)

Бесплатная электронная книга от AI Sweigart знакомит читателя с библиотекой PyGame, даже если вы ничего не знаете об этой библиотеки, после прочтения вы будете в состоянии сделать пару игр. Простые игры, будут отличным фундаментом, для создания собственного проекта, если у вас есть желание. Sweigart предоставляет подробные комментарии к своему коду, чтобы помочь в процессе обучения.

Это очередной плейлист от TheNewBoston. Отличное введение в PyGame. Опять же можно быть незнакомым с этой библиотекой, читая книгу вы начнёте разбираться в PyGame, однако в отличии от InventWithPython вы не будете делать полноценную игру.

Задание 7: изучите популярные библиотеки и инструменты

Python язык общего назначения, с которым можно сделать почти всё что угодно; в нашем распоряжении бесконечный набор библиотек и инструментов. Ниже список самых популярных.

PyPy

Если у вас возникнет желание собрать информацию с HTML старниц... BeautifulSoup сделает всё необходимое и сэкономит огромное количество времени.

Выполняя дествия, которые требуют много ресурсов процессора и вам кажется, что Python потребляет эти ресурсы, PyPy придёт на помощь. PyPy альтернативный компилятор для Python, который может ускорить вычисление.

NumPy + SciPy

Данные библиотеки обычно используются вместе (SciPy зависит от NumPy). Если вам предстоит выполнить работу связанную с математическими вычислениями или научными исследованиями, эти библиотеки послужат отличным помощником. NumPy и SciPy расширяют математические функции и возможности Python, в следствии чего значительно ускорят решение поставленных задач.

BeautifulSoup

BeautifulSoup просто потрясающий. Сбор информации с HTML страниц может оказаться довольно утомительным занятием и вас ждёт много разочарования. BeautifulSoup сделает всё за вас и сэкономит огромное количество времени. Очень рекомендую эту библиотеку, с ней интересно работать.

Python Image Library

Библиотека для работы с изображениями (PIL) отлично подходит для любых задач связанных с обработкой изображений. Если есть необходимость каким-либо образом взаимодействовать с изображением, скорее всего PIL поможет выполнить эту задачу.

Django

Как я уже упоминал в этой статье, если вас интересует веб-разработка, ваш выбор - фреймворк Django. Это самый популярный фреймворк на Python и по нему существует огромное количество обучающих ресурсов.

Задание 8: примите участие в проектах с открытым исходным кодом

Обладая приличным пониманием языка, умение читать и ориентироваться в коде других людей является незаменимым навыком, а также это окажется отличным способом обучения.

Поэтому проекты с открытым исходным кодом настолько популярны. Github и Bitbucket веб-сайты откуда вам стоит начать. Не волнуйтесь, в том случае если люди будут критиковать ваш код, вы не должны вносить вклад в эти проекты, незамедлительно. Всегда можно работать на отдельной ветке этого проекта, разобраться как он устроен и делать с ним всё что угодно. Если вдруг вы найдёте моменты, которые следует улучшить, отлично! Сделайте это и отправьте ваши улучшения. Проекты с открытым исходным кодом для этого и существуют.

Заключение

Надеюсь мне удалось предоставить надёжную базу по изучению языка Python для вас. На тот случай если я забыл упомянуть какие-либо ресурсы, дайте знать в комментариях ниже, чтобы помочь другим пользователям!

Меня периодически спрашивают о тестовых заданиях по Python-тематике. Я решил обобщить вопросы и написать их в одном месте. Я не использую эти вопросы и задания в собеседованиях, но использую при обучении.

Типы данных, основные конструкции

  1. Как получить список всех атрибутов объекта
  2. Как получить список всех публичных атрибутов объекта
  3. Как получить список методов объекта
  4. В какой "магической" переменной хранится содержимое help?
  5. Есть два кортежа, получить третий как конкатенацию первых двух
  6. Есть два кортежа, получить третий как объединение уникальных элементов первых двух кортежей
  7. Почему если в цикле меняется список, то используется for x in lst[:] , что означает [:] ?
  8. Есть два списка одинаковой длины, в одном ключи, в другом значения. Составить словарь.
  9. Есть два списка разной длины, в одном ключи, в другом значения. Составить словарь. Для ключей, для которых нет значений использовать None в качестве значения. Значения, для которых нет ключей игнорировать.
  10. Есть словарь. Инвертировать его. Т.е. пары ключ: значение поменять местами — значение: ключ.
  11. Есть строка в юникоде, получить 8-битную строку в кодировке utf-8 и cp1251
  12. Есть строка в кодировке cp1251, получить юникодную строку

Функции

    Написать функцию, которой можно передавать аргументы либо списком/кортежем, либо по одному. Функция производит суммирование всех аргументов.

    >>> f(1, 2, 3) 6 >>> f() 6 >>> f((3, 5, 6)) 14 >>> f(3, (5, 6)) 14

    Написать функцию-фабрику, которая будет возвращать функцию сложения с аргументом.

    >>> add5 = addition(5) # функция addition возвращает функцию сложения с 5 >>> add5(3) # вернет 3 + 5 = 8 8 >>> add5(8) # вернет 8 + 5 = 13 13 >>> add8 = addition(8) >>> add8(2) # вернет 2 + 8 = 10 10 >>> add8(4) # вернет 4 + 8 = 12 12

    Написать варианты с обычной "внутренней" и анонимной lambda-функцией.

    Написать фабрику, аналогичную п.2, но возвращающей список таких функций

    >>> additionals = addition_range(0, 5) # список из функций сложения от 0 до 5 включительно

    т.е. аналогичное

    Написать аналог map:

    • первым аргументом идет либо функция, либо список функций
    • вторым аргументом — список аргументов, которые будут переданы функциям
    • полагается, что эти функции — функции одного аргумента
    >>> mymap(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    в данном случае "развернутая" запись будет: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2(1), add2(2), add2(3))]

Итераторы

    Написать функцию-генератор cycle которая бы возвращала циклический итератор.

    >>> i = iter() >>> c = cycle(i) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 1

    Написать функцию-генератор chain, которая последовательно итерирует переданные объекты (произвольное количество)

    >>> i1 = iter() >>> i2 = iter() >>> c = chain(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (most recent call last): ... StopIteration

Для функций и итераторов написать доктесты

Модули

  1. У нас есть импортированный модуль foo, как узнать физический путь файла, откуда он импортирован?
  2. Из модуля foo вы импортируете модуль feedparser. Версия X feedparser"а есть в общесистемном каталоге site-packages, версия Y — рядом с модулем foo. Определена переменная окружения PYTHONPATH , и там тоже есть feedparser, версии Z. Какая версия будет использоваться?
  3. Как посмотреть список каталогов, в которых Python ищет модули?
  4. У вас есть модуль foo, внутри него импортируется модуль bar. Рядом с модулем foo есть файлы bar.py и bar/__init__.py Какой модуль будет использоваться.
  5. Что означает и для чего используется конструкция __name__ == "__main__"

Классы

    Написать базовый класс Observable, который бы позволял наследникам:

    1. при передаче **kwargs заносить соответствующие значения как атрибуты
    2. сделать так, чтобы при print отображались все публичные атрибуты
    >>> class X(Observable): ... pass >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", props=("One", "two")) >>> print x X(bar=5, foo=1, name="Amok", props=("One", "two")) >>> x.foo 1 >>> x.name "Amok" >>> x._bazz 12
  1. Написать класс, который бы по всем внешним признакам был бы словарем, но позволял обращаться к ключам как к атрибутам.

    >>> x = DictAttr([("one", 1), ("two", 2), ("three", 3)]) >>> x { "one": 1, "three": 3, "two": 2} >>> x["three"] 3 >>> x.get("one") 1 >>> x.get("five", "missing") "missing" >>> x.one 1 >>> x.five Traceback (most recent call last): ... AttributeError

    Пункт 2 с усложнением: написать родительский класс XDictAttr так, чтобы у наследника динамически определялся ключ по наличию метода get_ .

    >>> class X(XDictAttr): ... def get_foo(self): ... return 5 ... def get_bar(self): ... return 12 >>> x = X({"one": 1, "two": 2, "three": 3}) >>> x X: { "one": 1, "three": 3, "two": 2} >>> x["one"] 1 >>> x.three 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "missing") 5 >>> x.get("bzz", "missing") "missing"

    Написать класс, который регистрирует свои экземпляры и предоставляет интерфейс итератора по ним

    >>> x = Reg() >>> x >>> y = Reg() >>> y >>> z = Reg() >>> for i in Reg: ... print i

Написать юнит-тесты, за основу брать тесты выше, но не ограничиваясь ими.

Метаклассы и дескрипторы

  1. Для чего используются, какие аргументы получают, что должны возвращать: методы __new__ и __init__ классов
  2. Какие аргументы получает __new__ и __init__ у метакласса?

    Реализовать дескрипторы, которые бы фиксировали тип атрибута

    >>> class Image(object): ... height = Property(0) ... width = Property(0) ... path = Property("/tmp/") ... size = Property(0) >>> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>>

    Реализовать базовый класс (используя метакласс), который бы фиксировал тип атрибута

    >>> class Image(Object): ... height = 0 ... width = 0 ... path = "/tmp" ... size = 0 >>> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 Traceback (most recent call last): ... TypeError

    Реализовать базовый класс (используя метакласс) и дескрипторы, которые бы на основе класса создавали SQL-схему (ANSI SQL) для модели:

    >>> class Image(Table): ... height = Integer() ... width = Integer() ... path = Str(128) >>> print Image.sql() CREATE TABLE image (height integer, width integer, path varchar(128))

    реализовывать NULL , PRIMARY KEY , FOREIGN KEY , CONSTRAINTS не нужно. Достаточно реализации двух типов: Integer и Str .

Подготовка к собеседованию на позицию Python-разработчика

При подготовке использовались материалы: The Vital Guide to Python Interviewing , Must Have Python Interview Questions , 15 Essential Python Interview Questions , Python Interview Questions and Answers

На сегодняшний день число Python-программистов продолжает расти, однако количество рабочих мест для них увеличивается не так быстро. Современному разработчику нужно быть конкурентоспособным, чтобы пробиться на желаемую позицию. Мы подготовили статью с темами и вопросами, которые работодатель может затронуть на собеседовании, и дополнили их небольшими объяснениями - по сути, это задачи по программированию на Python с решениями. Материал будет полезен продолжающим для повторения, а начинающим поможет сориентироваться, куда делать первые шаги, на что обратить внимание. Воспринимайте как своеобразный маяк.

Работа со списками

Лямбда-выражения, генераторы списков и выражения-генераторы

Лямбда-выражения - сокращённый метод создания однолинейных анонимных функций. Их простота часто (но не всегда) делает код более стройным и читабельным, чем классическое объявление функций. С другой стороны, та же простота ограничивает возможности и зоны применения лямбда-выражений.

Генераторы списков обеспечивают краткий синтаксис для создания списков. Они используются для составления списков, в которых каждый элемент - результат некоторой операции (операций) с элементами другой последовательности или итератором. Генераторы списков могут использоваться для создания подпоследовательности тех элементов, члены которых удовлетворяют определённому условию. Генераторы списков в Python - своеобразная альтернатива встроенным функциям map() и filter() .

Лямбда-выражения с функциями map() и filter() и генераторы списков схожи, поэтому выбор одного из этих инструментов субъективен и зависит от случая. Но следует отметить, что генераторы списков выполняются несколько быстрее - вызов лямбда-функции создаёт новый стековый кадр .

Выражения-генераторы синтаксически и функционально похожи на генераторы списков, но есть важные различия между их механизмами работы и областями применения. Итерация при наложении выражения-генератора или генератора списка будет делать всё то же самое, но генератор списков сначала создаст целый список в памяти, в то время как выражение-генератор будет создавать элементы на ходу по мере необходимости. Выражения-генераторы могут быть использованы в большом или даже бесконечном количестве последовательностей. А генерирование значений по требованию обеспечивает повышение производительности и снижение использования памяти. Однако следует отметить, что стандартные методы списков list в Python могут применяться на результатах выполнения генератора, но не на самом генераторе.

В чём разница между списком и кортежем?

Основная разница: список может изменяться, а кортеж - нет. Работа с кортежами быстрее, чем со списками. Если необходимо определить постоянный набор значений, и все, что с ним когда-либо надо делать, - это перебирать его элементы, рациональнее использовать кортеж вместо списка. Кортеж также может выступать в качестве ключа для словарей, в отличие от списка.

Самые продвинутые кандидаты скажут, что кортежи неоднородны и их использование аналогично использованию struct в языке программирования С. Списки же аналогичны привычным массивам.

Отладка кода и тестирование

Какой подход вы используете для модульного тестирования в Python?

Фундаментальный ответ на этот вопрос относится к использованию фреймворка Python - unittest .

Unittest поддерживает автоматизацию тестов, использование общего кода для настройки и завершения тестов, объединение тестов в группы, а также позволяет отделять тесты от фреймворка для формирования отчётов. Модуль unittest представляет классы, упрощающие поддержку этих качеств для набора тестов.

Вас могут попросить описать ключевые элементы структуры unittest, а именно:

  • испытательный стенд (test fixture);
  • тестовый случай (test case);
  • набор тестов (test suite);
  • исполнитель тестов (test runner).

Итераторы

Что такое итератор?

Итератор - интерфейс, предоставляющий доступ к элементам коллекции (массива или контейнера) и навигацию по ним. В различных системах итераторы могут иметь разные общепринятые названия. В терминах систем управления базами данных итераторы называются курсорами . В простейшем случае итератором в низкоуровневых языках является указатель .

В чём разница между итератором и генератором?

Эти термины тесно связаны (любой генератор - это итератор), их довольно часто путают, что иногда приводит к недопониманию. Итератор - более общая концепция. Это объект, у которого определены два метода: __next__ и __iter__ . С другой стороны, генератор - это итератор. Но не наоборот. Генератор может получаться использованием ключевого слова yield в теле функции.

Def squares(start, stop): for i in range(start, stop): yield i * i generator = squares(a, b)

GIL

Концепция GIL заключается в том, что в каждый момент времени только один поток может исполняться процессором. Это сделано для того, чтобы между потоками не было борьбы за отдельные переменные. Исполняемый поток получает доступ ко всему окружению. Такая особенность реализации потоков в Python значительно упрощает работу с потоками и дает определенную потокобезопасность (thread safety).

Передача аргументов

Как передаются неизменяемые объекты?

Неизменяемые объекты передаются «по значению». Такие объекты, как целые числа и строки, передаются в виде ссылок на объекты, а не в виде копий объектов.

Как передаются изменяемые объекты?

Изменяемые объекты передаются «по указателю». Такие объекты, как списки и словари, также передаются в виде ссылок на объекты, что очень похоже на то, как в языке C передаются указатели на массивы – изменяемые объекты допускают возможность непосредственного изменения внутри функции так же, как и массивы в языке C.

>>> def f(a): # Имени a присваивается переданный объект... a = 99 # Изменяется только локальная переменная... >>> b = 88 >>> f(b)# Первоначально имена a и b ссылаются на одно и то же число 88 >>> print(b) # Переменная b не изменилась 88

В этом фрагменте в момент вызова функции f(b) переменной a присваивается объект 88 , но переменная a существует только внутри вызванной функции. Изменение переменной a внутри функции не оказывает влияния на окружение, откуда была вызвана функция, – просто в момент вызова создается совершенно новый объект a .

Что будет выведено после второго вызова append() в коде ниже?

>>> def append(list=): ... # добавление длины списка в список... list.append(len(list)) ... return list ... >>> append(["a","b"]) ["a", "b", 2] >>> >>> append() # вызов без аргумента использует значение list по умолчанию >>> >>> append() # Но что произойдёт при повторном вызове append без аргумента?

Когда значением по умолчанию для аргумента функции является выражение, оно вычисляется только один раз, а не всегда при вызове функции. Таким образом, после того как аргумент list был инициализирован в пустой массив, последующие вызовы функции без аргументов продолжат использовать тот же самый массив, что был инициализирован изначально.

>>> append() # при первом вызове без аргумента используется значение по умолчанию >>> append() # но затем... >>> append() # последовательные вызовы расширяют список по умолчанию >>> append() # и так продолжается...

Как можно изменить применение метода append в предыдущем вопросе, чтобы избежать нежелательного поведения, описанного там?

Есть альтернативная реализация метода append , которая решит проблему:

>>> def append(list=None): ... if list is None: list = # Увеличивает длину списка... list.append(len(list)) return list ... >>> append() >>> append()

Вопросы вне определённых категорий

Как можно поменять местами значения двух переменных внутри строки в Python?

Рассмотрим простой пример:

>>> x = "X" >>> y = "Y"

Во многих других языках программирования при замене значений X и Y требуется выполнить что-то вроде этого:

>>> tmp = x >>> x = y >>> y = tmp >>> x, y ("Y", "X")

Но в Python существует возможность сделать это с помощью одной строки кода следующим образом:

>>> x,y = y,x >>> x,y ("Y", "X")

Что будет выведено последним оператором ниже?

>>> flist = >>> for i in range(3): ... flist.append(lambda: i) ... >>> # что будет выведено?

В любом замыкании в Python переменные связываются по имени. Таким образом, в приведённой выше строке кода будет выведено следующее:

>>> flist = >>> for i in range(3): ... flist.append(lambda i = i: i) ... >>>

Для чего служит ключевое слово «self»?

Ключевое слово self - переменная, которая относится к экземпляру объекта. Когда создаётся класс, явная ссылка на объект того же типа класса отсутствует. Поэтому, чтобы ссылаться на текущий класс или объект, в Python используется ключевое слово self .

Class User: def __init__(self): self.name = "Ivan Ivanov" self.age = 16 user_obj = User() user_obj.name # self.name содержит "Ivan Ivanov" в качестве значения

Для чего служит ключевое слово «yield»?

Ключевое слово yield может обратить любую функцию в генератор. Оно работает подобно оператору return , с той разницей, что ключевое слово будет возвращать объект-генератор. Также функция может совершать несколько вызовов ключевого слова yield .

Def testgen(index): weekdays = ["sun","mon","tue","wed","thu","fri","sat"] yield weekdays yield weekdays day = testgen(0) print next(day), next(day) #output: sun mon

Что такое __init__.py? Как импортировать класс из другого каталога?

Init__.py в основном используется для инициализации пакетов Python.

Файл __init__.py в каталоге lstm_m указывает интерпретатору Python, что этот каталог должен обрабатываться как пакет Python.

Как импортировать класс из другого каталога?

Обычно __init__.py является пустым файлом. А если нам нужно использовать lstm.py в файле run.py , то его нужно импортировать следующим образом:

From lstm_m import lstm

Кроме того, внутри папки модуля должен быть файл __init__.py , предназначенный для импорта.

Какие встроенные типы существуют в Python?

Существуют изменяемые и неизменяемые встроенные типы Python.

Изменяемые:

  • списки;
  • множества;
  • словари.

Неизменяемые:

  • строки;
  • кортежи;
  • числа.

Следует помнить, что выше перечислены только основные типы. На самом деле их больше шести.

Что такое docstring в Python?

Строка документации в Python (docstring) - способ документирования функций, модулей и классов. Стандарты оформления - на официальном сайте .

Как можно конвертировать число в строку?

Для преобразования числа в строку, как правило, используют встроенную функцию str() , хотя есть и другие способы, такие как "{0:d}".format(число) и "%d"%число. Если вы хотите преобразовать десятичное число в восьмеричное (oct - octal) или шестнадцатеричное (hex - hexadecimal), используйте встроенную функцию oct() или hex() соответственно.

В чём разница между Xrange и range?

Функция xrange() возвращает объект xrange , в то время как range() возвращает список и использует то же количество памяти, независимо от размера функции.

Как увидеть методы или атрибуты объекта?

Команда dir(x) возвращает отсортированный список имен атрибутов для любого переданного в нее объекта. Если ни один объект не указан, dir() возвращает имена в текущей области видимости.

Дополнительно

Если вы владеете английским языком, то рекомендуем пройти онлайн-тесты и проверить свои знания перед собеседованием.

Подборки материалов для изучения Python от нас: , . Короткие , а также . Не забудьте порешать задачи: вот , где это можно сделать.

Заключение

Вопросы и советы, представленные в этой статье, могут быть очень ценными вспомогательными средствами для подготовки соискателей к собеседованиям. Мы надеемся, разработчики найдут их полезными для самостоятельного тестирования своих знаний перед встречей с работодателем. Но не следует забывать, что все представленные выше вопросы - один из нескольких инструментов отбора кандидатов на должность в составе определённой стратегии. Готовьтесь внимательно и тщательно. Удачи!

Круглосуточный просмотр трансляций не сделает человека успешным спортсменом, а знание наизусть лекционного материала не гарантирует достойную карьеру врача. Ведь не секрет, что успех любого дела кроется в постоянных тренировках. И не грех повторить прописную истину: даже исключительный талант чахнет без развития и постоянной работы над собой.

В обучении программированию действует тот же принцип. Конечно, на GeekBrains вы получите практические задания и помощь преподавателей. Однако и после завершения курсов вы наверняка захотите размять руки, а также повысить свой уровень путем решения всевозможных задач. Чтобы помочь вам в этом, мы отобрали несколько ресурсов с упражнениями.

В первую очередь отметим, что знание английского языка, как и во многих иных жизненных ситуациях, существенно облегчит жизнь в повышении навыков программирования. Ведь большинство порталов, на которых размещены практические задания, англоязычные. Как, к примеру, W3resource.

Целевая аудитория сайта – начинающие web-разработчики. Именно им предназначено солидное количество задач по HTML, PHP, Python, JavaScript, на решение которых можно потратить не один день и даже неделю. Ни регистрации, ни дополнительного инструментария портал не требует: удобство пользования обеспечивает встроенный редактор, а также ссылки на правильные ответы, если решение задачи все же поставило вас в тупик.

Coding Bat

Схожей стратегии придерживается и Coding Bat. Создатели ресурса также предпочли узкую направленность, сконцентрировавшись на упражнениях по Java и Python. Малое разнообразие упражнений с лихвой компенсирует количество и качество задач, а также удобство пользования. Разумеется, опять же, встроенный редактор и ответы. Кроме того, портал подойдет как для начинающих, так и опытных разработчиков.

Code Abbey

Успех любого обучения кроется в правильной мотивации, которая, без сомнения, присутствует в Code Abbey. Так, любой пользователь, решивший 125 задач, может получить соответствующий сертификат. Разумеется, бесплатно. Еще один плюс ресурса – возможность выполнения заданий на практически любом распространенном языке (от C до Julia).

Top Coder

Впрочем, даже такая мотивация не столь действенна, как денежное вознаграждение. Так на Top Coder вы сможете не только повысить свой уровень, но и подзаработать: по факту ресурс представляет из себя список соревнований, победитель которых получит пусть и не поражающую воображение, но приятную награду. Наиболее же успешные участники вдобавок имеют шансы "засветиться". Мастодонты индустрии вроде Microsoft, Facebook или IBM периодически мониторят портал в поисках новых талантов.

Programmr

На данном портале в свое время также можно было участвовать в соревнованиях. Однако к текущему моменту все они потеряли актуальность. Тем не менее, ресурс по-прежнему являет собой богатую площадку для развития навыков. В первую очередь – за счет многочисленных задач по Java, C++, PHP, C#, Ruby, Python и Objective-C. В каждой из них нужно дописать большую часть кода. Как правило, на выполнение задания отводится 30 минут.

Programming Skills

Тем же, кто устал от написания кодов и хочет привнести большего разнообразия в учебный процесс, подойдет портал Programming Skills. На нем можно найти серии тестов из 20 вопросов по C, HTML, C#, Java и другим языкам. На выполнение каждого дается 25 минут. Помимо них, на ресурсе содержится богатый перечень вопросов, с которыми вам, возможно, доведется столкнуться на собеседовании.

SQL-EX.RU

Наконец, для изучающих SQL идеально подойдет данный портал. Он предлагает огромное количество задач, охватывающих все типажи запросов. Для мотивации же пользователей введена рейтинговая система всех зарегистрировавшихся посетителей – за каждый верный ответ вы получите определенное число очков. Количество оных зависит от сложности задачи, в чем, к слову, кроется и еще один плюс ресурса. Ведь он подойдет как начинающим (или тем, кому достаточно базовых знаний), так и тем, чья служба невозможна без конструирования сложных запросов.

Единственный, но временами досаждающий минус – отсутствие альтернативных путей. Иными словами: правильность выполнения упражнения определяется не ответом, а методом решения. В результате порой возникают парадоксы, в которых фактически правильный ответ не засчитывается как верный.

Тем, кто только начинает свой путь в кодинге, рекомендуем бесплатный курс по .

  • Цель 1 - помочь ссылками, материалами, тем, кто соберется изучать программирование и первым языком возьмет Python. Показать, что это не так сложно, как кажется.
  • Цель 2 - собрать в комментариях ссылки на полезные и интересные материалы по этой теме.

0. А получится ли у меня?

С самого начала я сомневался в том, что у меня получится сделать что-то большее чем Hello World. Мне казалось, что программирование это сверх сложно и сверх магия. К тому же есть работа, хобби, семья, что будет отвлекаться от полноценного изучения.

Зря боялся и вам не советую. Программирование наверное никогда не станет моей основной профессией, но это отличный способ творческой реализации. Это шахматы и Civilization в одном флаконе.

Все проще чем кажется и гораздо интереснее.

1. Литература

Марк Лутц “Программирование на Python” - его советуют читать на многих форумах и курсах. Мне он показался излишне подробным и нагруженным для новичка. Читать много, программировать мало. Гораздо полезнее его читать после овладевания Python минимума.

Марк Саммерфилд “Программирование на Python 3” - динамично, с отличными примерами и заданиями. Без излишнего углубления, которое только все усложняет в начале. Я рекомендую начать именно с этой книги, она поможет быстро вникнуть, не пугая сложностями.

Все остальные книги оказались мене полезными и информативными. Вообще, хорошую литературу по этой теме трудно просто так взять и купить в магазине или в цифровой версии.

2. Что читать в интернете

http://pythonworld.ru/ - простым и понятным языком рассказывается об азах языка, часто использовал, как шпаргалку.

Еще через два месяца я смог создать свое первое приложение на Django. Но главное, что теперь у меня достаточно знания для самостоятельного развития и обучения. Самое трудное - это добраться до этой точки.

Еще через месяц я подключился к двум проектам на GitHub и принимаю в них участие. Задачи решаю конечно пока простые, но взамен получаю советы и обучение.

Теги: обучение python, обучение программированию