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

Сортировка списка в Python

Сортировка данных — одна из самых распространенных задач при работе с Python. Например, вы можете отсортировать список членов команды по имени или список проектов в порядке приоритета.

В этой статье описывается, как сортировать списки в Python.

 

Sort() и sorted() в Python

В Python вы можете отсортировать список, используя встроенный метод list.sort() или встроенную функцию sorted().

Функция sorted() создает новый отсортированный список, в то время как метод list.sort() сортирует список на месте. Если вы хотите сохранить, несортированный список использовать функцию sorted(). Другое отличие состоит в том, что функция sorted() работает с любым повторяемым объектом.

Синтаксис sort()и sorted()следующий:

list.sort(key=function, reverse=Boolean)


 

sorted(iterable, key=function, reverse=Boolean)


 

Необязательные ключевые аргументы key и reverse имеют следующее значение:

  • key — Функция, которая принимает один аргумент и преобразует его перед сравнением. Функция должна возвращать одно значение, которое используется для сравнения сортировки.
  • reverse — Значение реверса может быть либо либо, True либо False. Значением по умолчанию является True. Когда для этого аргумента установлено значение false, список сортируется в обратном порядке.

Элементы списка сравниваются с помощью оператора < (меньше чем) и сортируются по возрастанию. Оператор < не поддерживает сравнения строки в целое число, так что если у вас есть список , содержащие строки и целые числа, то операция сортировки не удастся.

В следующем примере показано, как отсортировать список строк в алфавитном порядке:

directions = ["north", "east", "south", "west"] 



directions.sort()



print('Sorted list:', directions)


 

Sorted list: ['east', 'north', 'south', 'west']


 

Если вы хотите сохранить исходный список без изменений, используйте функцию sorted():

directions = ["north", "east", "south", "west"] 



sorted_directions = sorted(directions)



print('Sorted list:', sorted_directions)


 

Sorted list: ['east', 'north', 'south', 'west']


 

Чтобы отсортировать список в обратном (нисходящем) порядке, установите аргумент reverse в True:

directions = ["north", "east", "south", "west"] 



directions.sort(reverse=True)



print('Sorted list:', directions)


 

Sorted list: ['west', 'south', 'north', 'east']


 

Сортировка с функцией

Аргумент key принимает функцию и позволяет выполнять более сложные операции сортировки.

Самый простой пример — сортировка элементов по длине:

directions = ["Destroyer", "Alex", "AndreyEx", "Max"] 



directions.sort(key=len)



print('Sorted list:', directions)


 

Мы используем функцию len(), чтобы вернуть количество символов в строке, которая используется в качестве компаратора:

Sorted list: ['AndreyEx', 'Destroyer', 'Max', 'Alex']


 

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

def sum_digits(num): 

    digits = [int(x) for x in str(num)] 

    return sum(digits) 

      

numbers = [23, 77, 19, 310, 219] 



numbers.sort(reverse=True, key=sum_digits)



print('Sorted list:', numbers)


Sorted list: [77, 219, 19, 23, 310]


 

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

numbers = [(3, 14), (1, 61), (2, 71)]



numbers.sort(key=lambda k: k[0])



print('Sorted list:', numbers)


 

Мы используем анонимную (лямбда) функцию, которая возвращает первый элемент кортежа. Список отсортирован по значению, возвращенному функцией:

Sorted list: [(1, 61), (2, 71), (3, 14)]


 

Тот же подход можно использовать для сортировки списка словарей:

elements = [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]



elements.sort(key=lambda k: k['name'])



print('Sorted list:', elements)


 

Лямбда-функция возвращает значение nameключа, которое используется для сравнения:

Sorted list: [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, 

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, 

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'}

]


 

Лучший и более быстрый способ сортировки сложной функции — использовать функции модуля «Оператор». Вот пример:

from operator import itemgetter



elements = [

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]



elements.sort(key=itemgetter('symbol')) 



print('Sorted list:', elements)


 

Функция itemgetter считывает значение ключа symbol:

Sorted list: [

    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}

]


 

Вывод

Мы показали вам, как сортировать списки в Python, используя метод sort() и функцию sorted().

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



2020-06-04T12:54:49
Python

Частные методы в Python

Понимание объектно-ориентированного программирования (ООП) имеет решающее значение, если вы хотите изучать Python.

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

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

Внимание: это будет длинные углубленная статья о частных методах, но если вы только хотите знать, как определять собственные методы в Python, вот tl;dr.

tl;dr — Префикс имени вашего атрибута или метода с одним подчеркиванием. Однако следует помнить, что Python не поддерживает инкапсуляцию, поэтому на самом деле ничего не является приватным.

 

Что такое частные методы?

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

Это означает, что вы не можете (и не должны) получать доступ или вызывать эти методы извне класса.

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

Давайте рассмотрим простой пример частного метода на языке программирования, отличном от Python, скажем, Java. (Вы поймете, почему, позже)

class Hello {

  private void printHello() {

    System.out.println("Привет мир");

  }

}

 

В Java ключевое слово private используется для объявления частного метода. Итак, в этом примере мы определяем закрытый метод с именем printHello () в классе Hello.

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

class Hello { 

  private void printHello() { 

    System.out.println("Привет мир");

  } 

}



public class HelloWorld{

  public static void main(String []args){

    Hello h = new Hello();

    h.printHello();

  }

}

 

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

$javac HelloWorld.java

error: printHello() has private access in Hello

  h.printHello();

   ^

1 error

 

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

class Hello {

  public void print() {

    printHello();

  }

  private void printHello() { 

    System.out.println("Привет мир");

  } 

}



public class HelloWorld{

  public static void main(String []args){

    Hello h = new Hello();

    h.print();

  }

}

 

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

Обратите внимание, что частный метод printHello() лишь вызывается из внутрикласса и основной программы только называется публичным методом print().

Ну, это круто и все. Вы, наверное, уже знали это. Главный вопрос: зачем нам частные методы? и когда мы должны их использовать?

 

Когда вы должны использовать частные методы?

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

Но что такое инкапсуляция на самом деле?

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

Это означает, что единственный способ взаимодействия с объектом — через четко определенный интерфейс объекта.

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

Например, представьте объект, представляющий автомобиль, простой автомобиль, который позволяет вам только управлять им drive(), нажимая на педаль газа, или останавливать stop(), нажимая на тормоза.

В этом случае мы говорим, что drive() и stop() — это интерфейсы между вами (пользователем автомобиля) и экземпляром автомобиля.

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

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

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

Первое: мы упомянули, что инкапсуляция скрывает реализацию объекта от внешнего мира. Что такое внешний мир?

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

Это НЕ конечный пользователь, который будет использовать ваш двоичный файл (у них будет либо пользовательский интерфейс, либо интерфейс командной строки), но инкапсуляция (по крайней мере, в мире ООП) касается потребителей разработчиков.

Второе: почему инкапсуляция полезна? Почему это имеет значение?

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

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

Нужно ли вам (пользователю автомобиля) узнавать что-то новое, чтобы иметь возможность управлять автомобилем после замены двигателя?

Точно нет. Тем не менее, все, что вам нужно сделать, это нажать на педаль газа, и машина будет двигаться.

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

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

Это потому, что, пока интерфейс не меняется, все хорошо. Ничего не ломается.

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

В объектно-ориентированном программировании вы определяете этот интерфейс, объявляя открытые атрибуты и методы (public).

И вы достигнете инкапсуляции, объявив закрытые атрибуты и методы (private).

С этим введением, теперь мы можем начать статью.

 

Атрибуты и методы в Python: обновление

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

Давайте построим базовый класс.

class MyClass:

  def __init__(self):

    self.var = 1



  def get_var(self):

    return self.var

 

В этом примере мы определили класс с именем MyClass.

Внутри этого класса в методе __init__ мы определили один атрибут var, который инициализируется значением 1, и метод get_var, который возвращает значение var.

Теперь давайте прочитаем, а затем изменим значение var.

>> my_object = MyClass() # Создайте экземпляр MyClass

>> my_object.var   # Вызвать атрибут “var”

1                  # Результат - “1”, как и ожидалось

>> my_object.get_var()

1

>> my_object.var = 2

>> my_object.var

2

>> my_object.get_var()

2

 

Как видите, мы легко изменили значение var с 1 на 2.

Мы смогли это сделать, потому что у нас есть ДОСТУП к атрибуту var  извне.

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

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

 

Определение личных атрибутов и методов (private) в Python

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

Просто добавьте к имени префикс с единственным подчеркиванием.

Это так просто.

Теперь давайте перепишем приведенный выше пример, чтобы сделать var и get_var приватными.

class MyClass:

  def __init__(self):

    self._var = 1

  def _get_var(self):

    return self._var

 

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

>> my_object = MyClass()  # Создание экземпляра MyClass

>> my_object._var  # Чтение _var

1

>> my_object._get_var()

1

 

Хм, подожди! Как?

Мы думали, что мы не можем получить доступ к приватным атрибутам или приватным методам! Как это возможно?

В Python закрытый доступ к закрытым атрибутам (и методам) не применяется.

Поэтому, когда мы говорим, что атрибуты, начинающиеся с одного подчеркивания, являются «частными», это просто соглашение. Но это не соблюдается.

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

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

Не делайте этого, потому что это не обязательно.

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

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

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

Что делают эти двойные ведущие подчеркивания?

 

Префикс с двойным подчеркиванием (искажение имени)

Давайте вернемся к нашему классу и определим наши var и get_var (), но на этот раз используя двойные подчеркивания вместо одного.

class MyClass:

  def __init__(self):

    self.__var = 1



  def __get_var(self):

    return self.__var

 

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

>> my_object = MyClass()

>> my_object.__var



AttributeError: 'MyClass' object has no attribute '__var'

 

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

Точно так же, если вы попытаетесь получить доступ к __get_var (), вы получите ту же ошибку.

>> my_object.__get_var()



AttributeError: 'MyClass' object has no attribute '__get_var'

 

В чем дело?

Одна вещь, которую мы могли бы сделать, чтобы исследовать происходящее, это напечатать содержимое dir (my_object)

dir() перечисляет все атрибуты (и методы), которые имеет объект

>> dir(my_object)

['_MyClass__get_var', '_MyClass__var',...]

 

Интересно! Похоже, что Python переименовал переменные __var и __get_var в _MyClass__var и _MyClass__get_var соответственно.

Такое поведение при изменении имен атрибутов или методов называется искажением имен.

Манглинг имен затрудняет доступ к переменным извне класса, но он все еще доступен через _MyClass__var.

>> my_object._MyClass__var = 3

>> my_object._MyClass__var

3

 

Точно так же вы можете получить доступ к __get_var с его искаженным именем _MyClass__get_var.

Другими словами, вне класса вам нужно будет использовать искаженное имя атрибута, но внутри класса вы все равно можете получить доступ к атрибуту обычным способом. (посмотрите, как мы получили доступ к __var изнутри __get_var () )

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

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

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

Что вы должны сделать, это то, что вы должны следовать соглашению и использовать единственное подчеркивание, чтобы обозначить что-то как личное.

 

Вывод

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



2020-05-29T20:56:14
Python

Для чего используется Python?

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

Мы полностью понимаем это.

Когда вы новичок в мире программирования, вас легко может ошеломить огромное количество языков программирования.

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

Но вы все еще не уверены.

Что вы действительно можете сделать с Python?

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

Итак, начнем!

 

Python — это язык программирования общего назначения

Давайте уберем это с дороги.

Прежде всего, Python — это язык программирования общего назначения.

Как и любой другой язык программирования, Python — это инструмент, который вы можете использовать для создания программного обеспечения. ЛЮБОЕ ПО.

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

Если вы решите изучать C++, Java или Python … у вас все будет хорошо. Все они очень популярные языки, которые очень популярны в нашей отрасли.

Вот список самых популярных языков программирования по индексу TIOBE.

Для чего используется Python?

 

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

Как видите, Python действительно высоко в списке!

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

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

Вот подробное руководство, о процессе изучения Python шаг за шагом.

Python также очень хорошо подходит для определенных типов приложений.

Об этом мы и поговорим в следующих разделах.

 

1- Веб-приложения

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

Многие люди заинтересованы в создании собственных веб-приложений. Может быть, вы хотите создать свой личный сайт, или вы хотите иметь бизнес в Интернете.

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

В качестве примера, скажем, вы набираете yahoo.com в своем браузере.

Ваш браузер отправляет запрос на веб-сервер Yahoo, используя протокол связи HTTP.

Веб-сервер Yahoo получает этот запрос и связывается с многочисленными внутренними службами, также используя HTTP (или RPC ).

Эти серверные службы в конечном итоге отвечают обратно на веб-сервер, который собирает несколько файлов (HTML/CSS/JavaScript) и возвращает их обратно в ваш браузер.

Наконец, ваш браузер читает эти файлы и отображает домашнюю страницу Yahoo на вашем экране.

Так как же Python вписывается в эту картину?

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

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

Тем не менее, есть некоторые библиотеки и платформы Python, которые немного облегчают эту работу.

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

Flask — это микро-фреймворк. Это простой веб-фреймворк, способный отправлять и получать сетевые запросы HTTP.

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

У Flask и Django сильные сообщества и отличная документация.

 

2- Численный анализ, наука о данных и визуализация

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

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

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

Python определенно находится на вершине этого списка.

В этом домене есть множество библиотек Python, наиболее часто используемыми являются NumPy , SciPy и Matplotlib.

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

NumPy (сокращение от Numeric Python) — это библиотека Python, специально созданная для эффективной и быстрой обработки операций над многомерными массивами. Эти операции включают в себя практически любую операцию, которую вы можете выполнить на матрице.

Но разве мы не можем просто выполнять матричные операции, используя обычные списки в Python?

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

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

Хорошо, а как насчет SciPy ?

Scipy (сокращение от Scientific Python) — это библиотека Python для решения математических, научных и инженерных задач. Вы можете думать об этом как об абстракции поверх NumPy (он на самом деле использует NumPy под капотом).

Некоторыми примерами операций, которые вы можете выполнять с помощью Scipy, являются преобразования Фурье, числовые интегрирования, градиенты, производные и многое другое…

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

Это где используется Matplotlib.

Matplotlib — это библиотека для создания визуализаций, таких как графики, гистограммы, линейные диаграммы, круговые диаграммы и т. д.

Он может строить 2D-графики, а также 3D-графики.

Вот пример того, как выглядят графы Matplotlib. Эти примеры взяты с сайта Matplotlib.

Для чего используется Python?

 

3- Машинное обучение

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

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

Хотя концепции машинного обучения существовали в теории с 1960-х годов, лишь недавно он начал набирать обороты, главным образом, из-за огромной доступности вычислительных ресурсов, а также из-за множества языков, которые делали написание приложений машинного обучения «проще».

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

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

Итак, скажи мне, какие библиотеки Python я должен изучать, чтобы писать приложения для машинного обучения?

Их много, но самыми популярными являются scikit-learn, Tensorflow и PyTorch.

Для разработки типового приложения для машинного обучения эти библиотеки облегчают работу!

С этими библиотеками вам нужно будет понять, почему вы используете алгоритм ML, как он работает и каковы его недостатки, но вам не нужно беспокоиться о том, «как он реализован».

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

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

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

 

4- Raspberry Pi

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

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

Например, очень популярной компьютерной системой является Raspberry Pi.

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

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

Хорошо, это круто и все, но как это связано с Python?

Угадайте, что? На самом деле вы можете запрограммировать свой Raspberry Pi, используя Python.

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

Мы считаем, что игра с Raspberry Pi — это идеальный способ узнать, как программное и аппаратное обеспечение взаимодействуют друг с другом.



2020-05-21T14:15:04
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