5 шаблонов для написания более чистого кода на Python — часть 1

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

Возможно, вы готовитесь к задачам по программированию для таких компаний, как Google, Facebook. Чтобы успешно пройти такие испытания по кодированию, вам нужно решить множество задач по кодированию в Leetcode. В задачах кодирования вам нужно решить несколько вопросов. Как Facebook попросит вас решить 2 вопроса в течение 40 минут. Язык программирования не ограничен в задаче кодирования. Вы можете выбрать любой язык программирования для решения задачи. Какой бы язык программирования вы ни выбрали, вам понадобятся некоторые хитрости и хитрости, чтобы решить проблемы за ограниченное время. Эта статья также поможет вам в решении сложных задач на Leetcode.

Содержание

  1. Цикл с индексом
  2. Нарезка Iterable
  3. Мемоизация
  4. Варарги и распаковка аргументов
  5. Отображение итератора

1. Цикл с индексом

При работе над такими задачами, как Две суммы, вам необходимо перебрать список и получить индекс элементов. Вы можете получить индекс либо с помощью счетчика, либо с помощью итератора range для перебора длины списка. Вы также можете использовать enumerate для итерации итерируемого объекта с индексом.
Использование оператора диапазона

Использование перечислить

2. Нарезка Iterable

Итерируемый объект можно повторять с помощью цикла. Функция срез возвращает объект среза, который может извлечь подсписок из итерируемого объекта. Поскольку строка также является итерируемым объектом. Нарезку также можно использовать для строк. Синтаксис фрагмента: slice(start, stop[, step]).

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

Здесь запуск, остановка и шаги являются необязательными. По умолчанию значения start, stop и steps равны 0, длине объекта и 1 соответственно.
Вы также можете использовать отрицательные значения для изменения потока. Чтобы понять отрицательные значения, давайте возьмем пример задачи палиндром-число. Есть несколько способов решить эту проблему. Быстрый способ решить эту проблему: преобразовать целое число в строку, перевернуть строку и сравнить.

В приведенном выше примере обратная строка num1 назначается num2.

3. Мемоизация

Бывают случаи, когда вам нужно написать рекурсивный код. Мемоизация действительно может улучшить производительность кода. Мемоизация также полезна для решения проблем кодирования динамического программирования. Memoize может быть сложным в реализации. Однако с помощью функции декоратора слишком просто реализовать код запоминания. Если вы хотите узнать больше о декораторах, вы можете прочитать мою статью Валидация в Python с использованием декоратора.
Чтобы объяснить эту тему, мы решим задачу powx-n из Leetcode. В этой задаче мы должны реализовать функцию, которая вычисляет x в степени n.

Код декоратора Memoize

Теперь фактическое решение можно записать, как показано ниже.

4. Варарги и распаковка аргументов

Чтобы понять Varargs, давайте рассмотрим пример функции sum. Сумма — это функция, которая возвращает сумму переменных числовых параметров, переданных в функцию.

Здесь функция sum может принимать переменные аргументы args. Поскольку args — этокортеж — это итерируемый объект (кортеж), мы также можем использовать reduce из functools. Чтобы узнать больше о функциональном программировании, прочтите Функциональное программирование на Python.

Примечание. В приведенных выше примерах varargs — это кортеж. Так что мы можем распаковать его.

def divide(*args):
    num, den = args
    return num/den
print(divide(10, 2))

Вы также можете использовать именованные переменные. named varargs — это словарь, принимающий несколько именованных аргументов. Named varargs очень полезно использовать словарь опций.

5. Отображение итератора

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

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

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

Примечание. Существует лучший способ сопоставления итерируемого объекта. Это называется Списковые включения. Понимание списков — это краткий и элегантный способ отображения итерируемого объекта.

Celsius = [39.2, 36.5, 37.3, 37.8]
Fahrenheit = [((float(9)/5)*x + 32) for x in Celsius]
print(Fahrenheit) # [102.56, 97.7, 99.14, 100.03999999999999]

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

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

Заключение

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

Использованная литература: