Архив метки: Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 6

Уровень 5: Практика интервьюирования в Python

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

Вам нужно только пройти это ужасное собеседование по кодированию.

На самом деле их серия.

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

Лучший способ пройти собеседование по кодированию — это дать себе достаточно времени для подготовки.

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

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

Это когда начинается уровень 6.

 

Уровень 6: Продвинутый Python

Если вы хотите осваивать свободное владение языком Python и поднять свои навыки на следующий уровень, тогда мы настоятельно рекомендуем книгу “Fluent Python”.

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

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

В дополнение к этому вы также узнаете несколько новых концепций.

Например, некоторые из новых понятий, которые вы изучите в этой книге,

  1. Функции высшего порядка: объясняет, как функции могут быть использованы в качестве первого класса
  2. Объекты в Python
  3. Управление потоками: охватывает тему генераторов, менеджеров контекста, сопрограмм и параллелизма
  4. Метапрограммирование: по сути это написание кода, который манипулирует кодом. Некоторые из обсуждаемых здесь тем — декораторы и мета-классы.

 

Необязательно 1: библиотеки и фреймворки Python

Теперь у вас есть все основы, вы профессионал в Python.

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

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

Итак, давайте поговорим о некоторых из самых популярных библиотек и сред Python.

 

1. Создание сервисов API с помощью Python (Flask)

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

Эта архитектура называется архитектурой микросервисов [оповещение модным словом], а каждое из этих небольших приложений называется услугой или микросервисом.

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

Другими словами, каждый из этих сервисов будет предоставлять HTTP API, с которым смогут общаться другие сервисы.

С учетом сказанного, это очень хорошая инвестиция, чтобы узнать, как создавать сервисы API в Python.

И одна из самых популярных библиотек Python, которая делает это очень простым — это Flask.

 

2. Создание веб-приложений с помощью Django

Django — это полноценный веб-фреймворк, который позволяет вам создавать в Python целое веб-приложение (как интерфейсное, так и фоновое).

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

MVC — это способ структурирования и организации вашего веб-приложения, тогда как ORM — это метод, который устраняет разрыв между объектно-ориентированным программированием и доступом к данным в базе данных.

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

Так что засучите рукава и создайте свое первое веб-приложение.

 

3. Библиотеки машинного обучения

Python стал де-факто языком для машинного обучения и науки о данных.

Это неудивительно, учитывая зрелость библиотек машинного обучения Python.

Если вы хотите стать специалистом по данным, мы настоятельно рекомендуем изучить математические и статистические основы машинного обучения, прежде чем изучать библиотеки ML на Python.

Введение в статистическое обучение  — отличное место для начала.

Как только вы освоите основы, начните играть с этими библиотеками Python.

  • scikit-learn. В этой библиотеке есть все под солнцем, когда дело доходит до алгоритмов ML.
  • Tensorflow. Еще одна очень популярная среда машинного обучения с открытым исходным кодом.
  • pandas. Популярная библиотека для анализа данных.

 

Необязательно 2: реализация Python (CPython)

Python — это интерпретируемый язык.

Это означает, что ваш код Python не компилируется непосредственно в машинный код, а сначала он компилируется в промежуточный язык, называемый байтовым кодом, который позже интерпретируется другим программным обеспечением, называемым интерпретатором.

Хотите посмотреть, как выглядит байт-код для простой программы Hello World ?

Давайте создадим исходный файл helloworld.py

# helloworld.py

print("привет мир")

 

Вот как просмотреть байт-код для приведенного выше исходного кода

$ python3 -m dis helloworld.py

2           0 LOAD_NAME                0 (print)

            2 LOAD_CONST               0 ('привет мир')

            4 CALL_FUNCTION            1

            6 POP_TOP

            8 LOAD_CONST               1 (None)

           10 RETURN_VALUE

 

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

Существуют различные реализации Python для компилятора и интерпретатора.

Тем не менее, CPython  является стандартным и наиболее широко используемым. Это полностью написано на C.

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

Так почему мы говорим о реализации Python?

Вам действительно нужно знать эти мелкие детали Python, чтобы стать мастером Python?

Честно говоря, ответ — нет.

Но если вам интересно узнать, как реализован список, кортежи, функции и т. д. в Python, и если вы хотите выучить новый язык (C) по ходу дела, то, возможно, вам следует рассмотреть возможность участия в CPython.

 

Начало:



2020-04-30T09:14:58
Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 5

Уровень 4. Структуры данных и алгоритмы в Python

Если вы достигли этого уровня, похлопайте себя по плечу.

Потому что к настоящему времени у вас есть навыки, которые позволяют вам решать самые разнообразные проблемы.

Однако чего-то не хватает.

Вы все еще недостаточно опытны в написании эффективного кода.

Что мы имеем в виду?

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

Это нормально.

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

Не верите нам? Посмотрите на этот простой код, который вычисляет n-е число Фибоначчи.

def fib(n):

    if n < 2:

        return n

    return fib(n-2) + fib(n-1)



print(fib(100))

 

Код выглядит достаточно простым и очень простым, верно?

Попробуйте использовать этот код для вычисления  fib (100)

 

ПРЕДУПРЕЖДЕНИЕ
[Это займет очень много времени]

 

Теперь давайте сделаем простую модификацию кода.

def fib(n, d):

    if n < 2:

        return n

    if n not in d:

        d[n] = fib(n-2, d) + fib(n-1, d)

    return d[n]



print(fib(100, {}))

 

На этот раз все это заняло несколько миллисекунд, и вы получите ответ — 354224848179261915075 на тот случай, если вам интересно.

Мы использовали то, что называется динамическим программированием, чтобы решить эту проблему и заставить ее работать астрономически быстрее.

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

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

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

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

Мы действительно это имели в виду!

 

Начало:



2020-04-25T14:00:19
Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 4

Уровень 3: Программирование сокетов

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

Но что, если вы хотите написать код, который связывается с другими машинами по сети?

Если вы хотите сделать это, то вам нужно узнать о программировании сокетов.

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

Это как волшебство. Мы до сих пор помним волнение, которое испытывали, когда у нас было два ноутбука, которые общались друг с другом по сети Wi-Fi.

Выполните эти три шага, чтобы начать.

 

Шаг 1: Написать программу echo

На этом этапе вы будете использовать модуль сокетов Python для записи простого TCP-сервера на одном компьютере и TCP-клиента на другом.

Убедитесь, что это два разных компьютера и оба они подключены к вашей домашней сети.

Идея программы Echo проста. Клиентская сторона читает сообщение от пользователя и отправляет это сообщение на сервер по сети.

На стороне сервера, когда это сообщение получено, сервер передает то же сообщение обратно клиенту.

Думайте о программе Echo как о программе Hello World, но для программирования сокетов.

После этого вы можете перейти к более сложным программам.

 

Шаг 2: Поиграйся с HTTP

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

Это особенно полезно, потому что подавляющее большинство веб-служб в настоящее время предоставляют интерфейс HTTP API, с которым вы можете взаимодействовать программно. Например, карты Facebook , Twitter и Google имеют интерфейсы HTTP API, с которыми может взаимодействовать ваш код.

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

 

Шаг 3: Знай свои инструменты

Как и любая другая программа, иногда, когда вы пишете сетевую программу, ваша программа не будет работать с первой попытки.

Однако отладка сетевых программ немного отличается от отладки обычных программ.

Вот почему вам нужно оборудовать себя инструментами, необходимыми для устранения неполадок в том, что происходит.

Вот некоторые из самых популярных сетевых инструментов, которые вам понадобятся:

  • ping —  используется для проверки связи между вашей машиной и другой.
  • netstat  — это универсальный сетевой инструмент, который позволяет вам, помимо прочего, отслеживать сетевые соединения, как входящие, так и исходящие.
  • tcpdump — один из моих любимых инструментов для изучения сетей. Это инструменты позволяют вам слушать, захватывать и анализировать реальные пакеты, входящие и выходящие из вашего компьютера через любой сетевой интерфейс.
  • Wireshark — это приятный графический интерфейс, который делает практически все, что может сделать tcpdump. Мы рекомендуем начать с Wireshark, прежде чем переходить к tcpdump только потому, что он немного более удобен для пользователя.

И, как мы уже сказали, чтобы понять, что означают все эти Get, SYN , SYN ACK , FIN,вам нужно сначала изучить основы сети.

 

Начало:

 

Продолжение:



2020-04-23T18:29:52
Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 3

Уровень 2: совместное и параллельное программирование

Дни одноядерных процессоров давно прошли.

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

И иногда вашей программе нужно использовать преимущества этих нескольких ядер для параллельной работы.

Это может привести к увеличению пропускной способности, повышению производительности и повышению скорости отклика.

Но позвольте нам прояснить одну вещь.

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

В этой ситуации мы лично предпочли бы вместо его golang (или старый добрый C ).

Но так как это статья о Python, давайте сосредоточимся на Python.

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

Вот некоторые из этих концепций.

 

Взаимное исключение

Если у вас есть данные, которые совместно используются несколькими потоками или процессами, важно синхронизировать доступ к этим общим ресурсам.

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

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

 

Замки

Замки являются одной из различных реализаций взаимного исключения.

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

Если поток хочет получить доступ к общему ресурсу, этот поток должен захватить блокировку, прежде чем ему будет предоставлен доступ к этому ресурсу.

И после того, как это сделано с ресурсом, он снимает эту блокировку.

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

Эта простая концепция гарантирует, что не более одного потока может иметь доступ к общему ресурсу одновременно.

 

Тупики

Взаимная блокировка — это когда ваша программа полностью останавливается, потому что некоторые потоки не могут развиваться дальше, потому что они не могут получить блокировку.

Например, представьте, что поток A ожидает в потоке B снятие блокировки. В то же время поток B ожидает в потоке A освобождение еще одной блокировки, которую в данный момент удерживает поток A.

В этой тяжелой ситуации ни поток A, ни поток B не могут развиваться дальше, поэтому ваша программа закрыта!

Вот что такое тупик.

И это случается чаще, чем вы думаете.

Что еще хуже, это также одна из самых сложных проблем для отладки.

 

Состязание

Как мы упоминали ранее, состояние гонки — это ситуация, которая возникает, когда доступ к общему ресурсу не защищен (например, блокировками).

Это может привести к катастрофическим неожиданным результатам.

Посмотрите на этот пример.

import threading

# x это общее значение

x = 0

COUNT = 1000000



def inc():

    global x

    for _ in range(COUNT):

        x += 1



def dec():

    global x

    for _ in range(COUNT):

        x -= 1



t1 = threading.Thread(target=inc)

t2 = threading.Thread(target=dec)

t1.start()

t2.start()

t1.join()

t2.join()



print(x)

 

Вот что делает код выше:

Существует общая глобальная переменная x, которая инициализируется в 0.

Две функции inc и dec работают параллельно. inc () увеличивает значение x 1 миллион раз, тогда как dec () уменьшает значение x 1 миллион раз.

Быстро пройдясь по коду, можно сделать вывод, что конечное значение x должно быть 0 … но так ли это?

Вот что мы получаем, когда запускаем приведенный выше код.

 $ python3 race.py

158120

 $ python3 race.py

137791

 $ python3 race.py

-150265

 $ python3 race.py

715644

 

Причина, по которой это происходит, заключается в том, что общий ресурс x не защищен (например, блокировками).

 

Параллельное программирование в Python

Только после того, как вы освоитесь с концепциями, рассмотренными выше, вы готовы научиться писать параллельные программы на Python.

Во-первых, вы должны узнать, как определение многопроцессорности в Python отличается от многопоточности. (Кстати, это совершенно не связано с потоками и процессами с точки зрения ОС ).

Чтобы понять это различие между многопроцессорностью и многопоточностью с точки зрения Python, вам необходимо изучить и понять глобальную блокировку интерпретатора (GIL).

Вам также необходимо узнать о потоках, очереди и многопроцессорных  модулях Python.

Все эти модули предоставляют вам примитивы, необходимые для написания параллельных программ.

 

Начало:

 

Продолжение

 

Продолжение следует…



2020-04-20T17:45:24
Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 2

Уровень 1: объектно-ориентированное программирование

Все в Python является объектом.

Вы либо слышали это, либо вам суждено услышать об этом 🙂

Но подождите минуту, что именно является объектом?

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

Одна из самых популярных парадигм программирования называется объектно-ориентированным программированием (ООП).

В объектно-ориентированном программировании  объект  относится к конкретному экземпляру  класса.

Класс — это как план состояния и действий, которые может выполнять объект.

Например, в Python класс Person может выглядеть примерно так.

class Person:

  def __init__(self, name, age):

    self.name = name

    self.age = age

  

  def get_name(self):

    return self.name

 

Объявленный выше класс описывает состояние и действия любого объекта Person.

Например, любой объект Person будет иметь имя и возраст. Эти два поля определяют состояние объекта.

В терминологии ООП имя и возраст называются атрибутами объекта.

Вы также можете вызвать get_name () для любого объекта Person, чтобы вернуть имя человека.

Мы называем get_name как метод.

Этот метод, в дополнении к любым другим методам , которые мы определяем, что определяет объект действия.

Другими слова, объект Python имеет атрибуты и методы, которые определены в объекте класса.

Вот как создать объект Person

>>> p = Person('Alice', 22)

>>> p.get_name()

'Alice'

 

Объектно-ориентированное программирование по сути является одним из способов структурирования и проектирования вашего кода.

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

Чтобы изучить ООП в Python, вам нужно пройти несколько шагов.

 

Шаг 1: Изучите концепции ООП

Как мы упоминали ранее, ООП — это парадигма программирования, способ структурирования и проектирования вашего кода.

Концепции ООП не являются эксклюзивными для Python, поэтому концепции, которые вы изучите, легко перейдут на любой другой язык программирования.

Некоторыми примерами этих концепций являются наследование, инкапсуляция и полиморфизм.

Поэтому убедитесь, что вы понимаете эти концепции на абстрактном уровне, прежде чем переходить к ООП на Python.

 

Шаг 2: Узнайте о классах и объектах Python

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

Осваивайте классы и создавайте объекты.

Напишите классы, которые наследуются от других классов, и исследуйте атрибуты и методы созданных объектов.

 

Шаг 3: Решить проблемы Python, используя ООП

Это важный шаг.

На этом этапе вы хотите узнать, как использовать ООП для разработки и структурирования вашего кода.

И на самом деле этот шаг — скорее искусство, чем наука. Это означает, что единственный способ поправиться — это практика, практика и больше практики.

Снова продолжайте решать больше проблем, используя Python, но попробуйте структурировать ваши решения объектно-ориентированным способом.

Чем больше вы практикуетесь, тем больше вы будете чувствовать себя комфортно с ООП.

 

Начало: Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 1

Продолжение:



2020-04-18T11:17:56
Python

Лучший способ изучить Python (пошаговое руководство 2020 года). Часть 1

Python — очень популярный язык.

Это также один из языков, который мы рекомендуем для начинающих.

Но как вы изучаете этот язык?

Лучший способ выучить Python — это понять общую картину всего, что вам нужно выучить, прежде чем погрузиться и начать учиться.

В этой серии статей мы делим путь изучения Python на 6 уровней. Более подробный онлайн-курс по программированию на Python 3  можно пройти в Shultais Education. С 2019 года курс «читается» студентам Московского университета экономики и права им. Витте на специальностях «Прикладная информатика» и «Бизнес-информатика».

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

Наши статьи посвящены тому, чтобы вы были компетентным и всесторонним программистом, чтобы вы могли легко устроиться на работу в любую техническую компанию, которую вы выберете.

Но не волнуйтесь, вам не нужно пройти весь путь до уровня 6, чтобы получить свою первую работу.

Давайте начнем.

 

Уровень 0: Начало

Это уровень, с которого вы начинаете, если вы абсолютный новичок.

И под абсолютным новичком мы имеем в виду кого-то, кто никогда ранее не программировал на Python или любом другом языке программирования в этом отношении.

Если вы переходите с другого языка программирования, вам следует перейти к уровню 1.

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

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

Видите ли, многие языки программирования очень похожи, и знание того, что общего (а что нет) между языками программирования, поможет вам в будущем перейти на другой.

Итак, каковы некоторые из этих общих концепций программирования, о которых мы говорим?

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

Если вы понимаете, что это за понятия, переходите к уровню 1.

В противном случае позвольте мне дать вам очень краткое введение о том, что означают эти понятия.

 

Переменные

Переменные по сути являются хранилищем данных в вашей программе.

Точнее, это способ дать имя для данных для последующего использования.

Давайте посмотрим на пример.

# переменные

msg = "Hello World!"

print(msg)

# здесь код выведет на экран Hello World!

 

В приведенном выше фрагменте Python мы определяем переменную msg, в которой хранится значение Hello World!

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

 

Типы данных

Мы говорили о переменных как хранилище данных, теперь давайте поговорим о данных.

В Python данные имеют типы.

Например, в приведенном выше фрагменте кода данные Hello World! имеет определенный тип, который Python (и другие языки программирования) называют строкой.

Строка это просто последовательность символов.

Но строки не единственный тип данных в Python, также есть целые числа, числа с плавающей запятой, логические значения, списки, кортежи и словари.

К концу уровня 0 вы должны освоить эти типы данных и понять, когда (и как) использовать их в своей программе.

 

Операции

Операции — это то, как вы манипулируете и изменяете данные в вашей программе.

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

Это просто жизненный цикл любой программы.

В Python и во всех языках программирования существуют как минимум арифметические , сравнительные и логические операции.

# пример арифметической операции

x = 5 + 2



# пример операции сравнения

y = 3 > 4



# пример логической операции

z = True or False

 

Условия

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

Условные операторы, использующие if , if else или elsif else, дают вам эту возможность.

Вот пример оператора if-else в Python.

>>> if 3 > 5:

...   print('3 больше 5')

... else:

...   print('3 меньше 5')

...

3 меньше 5

 

Функции

Функция по сути является блоком кода Python, который запускается только при вызове.

Вы можете передавать параметры в функцию в качестве входных данных, а функция может возвращать данные в качестве выходных данных.

В Python вы определяете функцию, используя ключевое слово def.

Вот пример программы hello world, использующей функцию say_hello

def say_hello(msg):

  # это и есть функция

  # msg это входной параметр

  print(f'hello {msg}')



# вызов функции say_hello

say_hello('world')



# вывод:

# hello world

 

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

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

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

Мы не можем не подчеркнуть важность овладения уровнем 0.

Причина в том, что этот уровень закладывает основы и фундаментальные концепции не только для освоения Python, но и для освоения любого другого языка программирования.

Так что, хотя это уровень 0, не принимайте это всерьез.

 

Продолжение:



2020-04-17T14:13:46
Python