Полезные советы по Python, о которых стоит узнать
Python и 1000 программ
Очистка входных строковых данных
Очистка данных, вводимых пользователям, частая задача программистов, которые нужно решить. Вы можете сказать что проще очистить данные при помощи регулярных выражений. Но если задачу усложняется, вам приходиться подбирать более удачные решения. К примеру:

Здесь происходит процесс, когда экранированные символы "\n" и "\t" заменяются обычным пробелом, а символ \r удаляется из строки полностью. Довольно простой пример, но мы можем расширить функционал при помощи unicodedata и его функции combining(). Данный подход позволяет все ненужные строки.
Получение срезов итераторов
В случае, когда вам нужно получить срез итераторов, вы получите ошибку TypeError, указывающая на то, что на объект-генератора нельзя оформить подписку. Данная ошибка поддается решению:

Воспользовавшись методом itertools.islice, у нас появляется возможность создать объект islice, который является итератором, выдающий нужные элементы. Важно предупредить, что будут использованы все элементы генератора заканчивая началом среза и всеми объектами islice
Пропуск начала итерируемого объекта
Также у нас есть возможность использовать itertools в случае, когда мы будем работать с файлом, в коде которого имеется некоторое количество ненужных строк. К примеру кода с комментарием. Пример пропуска комментариев в коде:

В данном случае мы пропустили верхнюю часть кода и сразу перешли на последнюю. Такой подход подойдет когда в коде неизвестное количество комментариев, а нам они в целом то и не нужны.
Функции, поддерживающие только именованные аргументы (kwargs)
Для того, чтобы в функции передавать некоторые именованные аргументы в функции, мы можем воспользоваться следующим:

Данный метод позволяет нам улучшить читаемость кода, Как вы могли заметить в аргументах функции мы прописываем символ "*". Почти точно также мы можем пользоваться позиционными аргументами, нам нужно лишь прописать "*" не в начале аргументов, а в конце.
Создание объектов, поддерживающих выражение with
Каждый умеет открывать файл, а некоторые и могут при помощи оператора with установить блокировку. Но есть ли у нас возможно реализовать механизм управление блокировкой? Ответ да, при помощи методов "__enter__" и "__exit__" это вполне реализуемо.

Это самый распространенный метод, есть вариант по проще:

В данном случае протокол управление контекста реализован при помощи декоратора "contextmanager". Первая часть функций tag будет выполняться при входе в блок with, далее работает сам блок, далее второй блок tag выполняется.
Экономия памяти с помощью __slots__
Иногда работая с кодом, мы можем заметить что создается некоторое количество классов, из-за чего происходит нехватка памяти. Это хорошо сказывается на производительности, поскольку словари используются для представления атрибутов экземляра класса. Но сам факт нехватки памяти является неприятным, в этом случае существует "__slots__":

При помощи __slots__ наш код будет использовать не словарь, а небольшой массив с фиксированным размером. Хоть это и сокращает объем памяти, но существуют недостатки. Например невозможности объявление новых атрибутов класса, мы можем работать лишь с атрибутами прописанными в __slots__, а также невозможность множественного наследования.
Ограничение использования процессора и памяти
Вместо оптимизации программы или улучшения взаимосвязи с процессором, вы можете установить ограничение на потребляемые ресурсы, для этого есть библиотеки:

Для ограничения программного процессора, мы используем значения нежесткого (soft) и жесткого (hard) лимитов для определенного ресурса. Далее используем лимит при помощи некоторого числа секунд, благодаря аргументу seconds и ранее полученному аргументу из жесткого лимита. Далее регистрируем обработчик signal, которое будет выполнять функцию выхода, в случае если будет превышена выделенное программе процессорное время. С памятью чуть проще, мы просто получает значения от жесткого и нежесткого, после чего при помощи setrlimit устанавливаем ограничение, который получает размер ограничение от size, и ранее полученные значения от жесткого лимита.
Управление тем, что может быть импортировано из модуля, а что — нет
В Python механизм экспорта из модулей переменных экспортирует все. Но до тех пор, пока не будет использован атрибут "__all__":

В данном случае будет экспортирована только функция bar. В случае если оставить атрибут "__all__" пустым, то мы получим пустой результат. Если попытаться импортировать что-либо из данного модуля, выйдет ошибка "AttributeError"
Упрощение создания операторов сравнения
Есть множество операторов сравнения, которые вы вряд ли знаете, пример: __lt__, __le__, __gt__, __ge__. На вряд ли вы захотите реализовывать их в своем классе. У нас есть возможность упростить задачу при помощи декоратора functools.total_ordering:

Декоратор functools.total_ordering нам нужен лишь для упрощения реализации упорядочения экземпляров класса. Для работы декоратору понадобиться __lt__ и __eq__. Это минимум который нужен декоратору для конструирования.
Итоги:
Много из каких советов вы может и не будете использовать на практике, но в любом случае, не будет лишним знать эту информацию.
Благодарим Martin Heinz за предоставленный материал!