Python академия
7.73K subscribers
2.32K photos
5 videos
269 links
Python академия. Учи Python быстро и легко. По всем вопросам @evgenycarter
Download Telegram
Параметры *args и **kwargs

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

В примере функция принимает обязательный аргумент value, а остальных аргументов она как бы не ожидает. В таком случае *args упаковывает все не именованные аргументы в кортеж, а **kwargs – все именованные в словарь.

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

Подписывайтесь на канал 👉@pythonofff
👍2
Список всех переменных

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

Если мы используем %who, она перечислит все 3 переменные, которые мы задали.

Подписывайтесь на канал 👉@pythonofff
👍3
Что такое lambda-функции

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

Структура очень простая — lambda <arguments>: <expression> . Сначала пишете ключевое слово lambda, далее аргументы через запятую, двоеточие и какое-то выражение, результат которого автоматически вернется.

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

Подписывайтесь на канал 👉@pythonofff
👍3
Просмотр содержимого внешнего файла

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

Подписывайтесь на канал 👉@pythonofff
👍2
Словари вместо switch-case

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

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

В этом примере я использовал lambda-функции для упрощения кода.

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

Подписывайтесь на канал 👉@pythonofff
👍7👎2
Копирование содержимого во внешний файл

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

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

Подписывайтесь на канал 👉@pythonofff
👍4
Отлавливаем баги с assert

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

Но если попробовать выполнить инструкцию assert с логическим выражением, которое равно False, то будет сгенерировано исключение AssertionError.

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

Также не нужно, к примеру, обрабатывать пользовательский ввод и пытаться обработать исключение AssertionError блоком try-except.

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

Подписывайтесь на канал 👉@pythonofff
👍6
emoji

$ pip install emoji

Подписывайтесь на канал 👉@pythonofff
👍4
Сортировка списков по ключу

У списков есть метод sort(), который сортирует элементы. Также есть аргумент reverse, с помощью которого можно отсортировать в обратном порядке при значении True.

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

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

Подписывайтесь на канал 👉@pythonofff
👍3
Перечисления enum

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

Подписывайтесь на канал 👉@pythonofff
👍1
Слоты в классах

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

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

Подписывайтесь на канал 👉@pythonofff
👍7
F-строки

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

Подписывайтесь на канал 👉@pythonofff
3
Сохранение документации функции при декорировании

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

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

Подписывайтесь на канал 👉@pythonofff
👍1
Итерируемые объекты

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

Подписывайтесь на канал 👉@pythonofff
👍2
3 трюка с itertools

Начнем с функции combinations: она позволяет составлять комбинации элементов из итерируемых объектов без повторений. Первый аргумент это сам объект, а второй — длина комбинации.

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

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

Подписывайтесь на канал 👉@pythonofff
👍2👏2😐1
Получение срезов итераторов

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

Подписывайтесь на канал 👉@pythonofff
👍1
Определение литеральных типов

Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval() из модуля ast.

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

Подписывайтесь на канал 👉@pythonofff
👍1
Использование метода float()

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

Для реализации следующих скриптов на Python установите сам Python, а также подходящую IDE (Pycharm, Jupiter, Spyder и т.д.). Создайте новый файл, вставьте туда код и запустите его.

Подписывайтесь на канал 👉@pythonofff
👍1
Генераторы

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

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

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

Подписывайтесь на канал 👉@pythonofff
👍2
Как перевернуть список в Python с помощью функции reversed()

Функция reversed() принимает список в качестве аргумента и возвращает нам исходные элементы, только в обратном порядке.

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

Подписывайтесь на канал 👉@pythonofff
👍4