Программы для программирования
20 subscribers
849 photos
1 video
26 files
41 links
Download Telegram
Forwarded from Python Education
Принципы программирования. Часть 3

Продолжаем разбор принципов программирования

SRP
Single Responsibility Principle - принцип единого уровня ответственности. Похож на SLAP, но больше касается ООП. Каждый объект должен выполнять свою функцию. Нужен новый функционал? Значит надо создать новый объект. Очень просто об этом говорить в небольших проектах, но чем сложнее проект, тем труднее его разбить на отдельные и независимые блоки кода.

OCP
Open-Closed Principle - принцип открытости к расширению. Говорит о том, что код должен расширяться без переписывания и изменения старого. На первый взгляд кажется, что конфликтует с YAGNI, но это не так. YAGNI говорит, что нельзя писать код, который не используется сейчас. OCP затрагивает более глубокие архитектурные вещи.
Forwarded from Python Education
uuid

Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier, глобально уникальный идентификатор).

Так мы создаём случайное 128-битное число, которое почти наверняка будет уникальным.

Существует более 2¹²² возможных UUID. Это более 5 ундециллионов или 5,000,000,000,000,000,000,000,000,000,000,000,000.

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

Вполне недурно для двух строк кода.
Forwarded from Python Education
Принципы программирования. Часть 4

Продолжаем разбор принципов программирования.

LSP
Liskov Substitution Principle - принцип подстановки. Назван в честь своего автора Барбары Лискова. Касается объектно-ориентированного подхода, наследуемый объект должен не заменять базовый, а дополнять его. Звучит логично, ведь если мы сделаем, чтобы машина летала, то это уже больше самолет. И соответственно проще взять базовый объект самолета, но новички часто не знают как правильно применить данное правило

ISP
Interface Segregation Principle - принцип разделения интерфейса. Как следует из перевода касается интерфейсов. Python это затрагивает не так сильно из-за его утиной типизации и простого написания аннотаций. Тем не менее, знание этого принципа в любом случае способствует улучшению кода. Правильная организация кода способствует большему расширению и оптимизации, правило больше об оформлении, чем об работе с самим интерфейсом
Forwarded from Python Education
Explicit Conversion Flag

Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r – преобразует значение в строку, используя функцию repr()
!s
– преобразует значение в строку, используя функцию str()

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде).
Forwarded from Python Education
xkcd

Юмор — ключевая особенность Python. В конце концов, язык был назван в честь британского комедийного шоу «Летающий цирк Монти Пайтона». Во многих местах официальной документации можно найти отсылки к самым известным эпизодам шоу.

Конечно, чувство юмора не заканчивается на документации. Попробуйте ввести следующую строку:

$ import antigravity

Оставайся собой, Python. Оставайся собой.
Forwarded from Python Education
Что такое PEP8?

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

Оформлять код на Python можно множеством разных способов. Имя переменной может быть и Variable и VARIABLE и variable. А как правильно? Есть ли для этого стандарт?

Да есть и не один. Вы можете ввести свои стандарты оформления кода для ваших проектов на свое усмотрение.

PEP8 - стандарт оформления кода от команды Python. Содержит полное описание форматирования конструкций, имен переменных и общей компоновки кода.

Подробнее
Forwarded from Python Education
YAML

YAML означает «YAML — не язык разметки» («YAML Ain’t Markup Language»). Это язык форматирования данных, являющийся надмножеством JSON.

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

Модуль PyYAML позволяет использовать YAML в Python. Установить можно так:

$ pip install pyyaml

А затем импортировать:

import yaml

PyYAML позволяет хранить любые Python-объекты и экземпляры любых пользовательских классов.
Forwarded from Python Education
zip

Когда-нибудь возникала необходимость создать словарь из двух списков?

Встроенная функция zip() принимает несколько итерируемых объектов и возвращает последовательность кортежей. Каждый кортеж группирует элементы объектов по их индексу.

Можно провести операцию, обратную zip(), с помощью zip(*).
Forwarded from Python Education
Многоточие в Python

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

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

В примере валидный код Python, и выглядит он теперь не так уж плохо.
Forwarded from Python Education
Colorama

Colorama помогает добавить цвета в терминал

Этот пакет отлично украшает Python-скрипты. Документация проста и понятна, почитать ее можно на странице Colorama в PyPI.

Если хотите, чтобы Colorama работала под Windows, то вначале вызовите colorama.init().
Forwarded from Python Education
Requests

Requests основан на самой часто скачиваемой Python-библиотеке — urllib3. Requests максимально упрощает веб-запросы, оставаясь при этом чрезвычайно мощным и разноплановым инструментом. Скорее всего, вы уже знакомы с этим пакетом, но без него мой список был бы неполным.

Страница PyPI
Документация
Forwarded from Python Education
Анонимные функции

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

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

Это становится более интересным, когда необходимо использовать функцию в качестве аргумента. В таких случаях она часто используется только один раз. Как известно, map применяет функцию ко всем элементам итерируемого объекта. Мы можем использовать лямбду при вызове map. В данной ситуации использование map() в сочетании с лямбда-функцией является кратким и эффективным.
Forwarded from Python Education
Chardet

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

После установки Chardet у вас появится дополнительный инструмент командной строки под названием chardetect.

Конечно же, никто не запрещает работать с библиотекой классическим (программным) способом. Подробнее см. документацию.
Forwarded from Python Education
Форматирование именованных строк

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

Вы даже можете использовать функцию locals(), но в последних версиях Python придется обращаться к f-строкам следующим образом (см. 2 код).
Forwarded from Python Education
Использование подчеркивания в REPL

Вы можете получить результат последнего выражения в Python REPL с помощью оператора подчеркивания, например, в Python REPL это выглядит следующим образом
Forwarded from Python Education
Хеширование

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

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

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

Часто говорят, что изменяемые объекты Python в принципе нельзя хешировать, а неизменяемые – всегда можно. На самом деле, возможность хешировать объект и его неизменяемость – понятия разные.
Forwarded from Python Education
Виды строк

Оперировать строками в Python – одно удовольствие, так как язык предоставляет для них множество удобных методов. Также имеется поддержка "сырых" строк и строковых литералов.

Чтобы строка стала "сырой", перед ней необходимо поставить символ r в любом регистре

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

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

Второй код выведет все, что находится между тройными апострофами. При этом кавычки в значении атрибута и переносы строк сохранятся.
Forwarded from Python Education
Нарезка списка

Синтаксис нарезания таков:

a[start:stop:step]

Start, stop и step необязательны. У них есть дефолтные значения, которые активируются, если не заполнить параметры:

• 0 для start;
• конец списка для stop;
• 1 для step.
Forwarded from Python Education
Итераторы и генераторы

Итератор – это интерфейс, который позволяет перебирать элементы последовательности. Он используется, например, в цикле for ... in ..., но этот механизм скрыт от глаз разработчика. При желании итератор можно получить "в сыром виде", воспользовавшись функцией iter().

Чтобы получить следующий элемент коллекции или строки, нужно передать итератор функции next().

Под капотом функциональность реализуется в методах __iter__ и __next__.

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

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

Очевидно, что генераторы могут выполнять работу функций map и filter. Более того, они справляются с этой задачей эффективнее.
Forwarded from Python Education
*args и **kwargs

Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции args и kwargs.

На самом деле, названия переменных – args, kwargs – это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.

Можно заменить
args на vars, а kwargs на options или другое слово. Программа будет работать так, как ожидается. Однако, другие разработчики могут вас не понять.

Конструкции
args и kwargs можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg обрабатывается отдельно, а все остальные собираются в коллекцию.
Forwarded from Python Education
Асинхронность

Асинхронность – еще один способ выполнения нескольких задач сразу. Она предлагает решать проблему с помощью функций обратного вызова (callback).

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

В Python есть несколько асинхронных библиотек. Самые популярные из них – стандартная AsyncIO и Tornado.

В последних версиях языка появились новые синтаксические конструкции async и await.