Библиотека Python разработчика | Книги по питону
19.5K subscribers
1.05K photos
392 videos
82 files
988 links
Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др.

По всем вопросам @evgenycarter

РКН clck.ru/3Ko7Hq
Download Telegram
Метод __init__

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

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

👉@BookPython
Некоторые способы упростить конструкцию if-else

Иногда можно выбросить else. В функции return в блоке if прерывает её выполнение, поэтому в том, чтобы писать блок else просто нет надобности.
Иногда можно всё написать в одну строку. Выглядит красиво, но следует помнить, что такая конструкция плохо расширяемая.
Вместо большого количества or в условии можно использовать последовательности. Например, можно создать кортеж и положить в него все важные для условия значения.

👉@BookPython
16-, 8- и 4-битные форматы чисел с плавающей запятой

Уже лет 50, со времён выхода первого издания «Языка программирования Си» Кернигана и Ритчи, известно, что «числа с плавающей запятой» одинарной точности имеют размер 32 бита, а числа двойной точности — 64 бита. Существуют ещё и 80-битные числа расширенной точности типа «long double». Эти типы данных покрывали почти все нужды обработки вещественных чисел. Но в последние несколько лет, с наступлением эпохи больших нейросетевых моделей, у разработчиков появилась потребность в типах данных, которые не «больше», а «меньше» существующих, потребность в том, чтобы как можно сильнее «сжать» типы данных, представляющие числа с плавающей запятой.

https://habr.com/ru/companies/wunderfund/articles/776496/

👉@BookPython
Одинарные и двойные подчёркивания в именах Python

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

Например, в Python приватные и защищённые методы классов реализованы лишь на уровне договорённостей между разработчиками. Так, перед приватными методами нужно писать двойное нижнее подчёркивание, а перед защищёнными — одно.

👉@BookPython
Модуль difflib для сравнения последовательностей

Особенно полезен для работы с текстами. Содержит функции для создания отчётов в нескольких распространённых форматах, в том числе в HTML.

▪️Класс Differ(), например, выводит различия в отдельных строках, сопровождая их префиксами.
▪️Класс SequenceMatcher() позволяет вычислить сходство между строками. Функция get_opcodes() возвращает список инструкций для приведения первой последовательности к виду второй.

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

👉@BookPython
Зачем нужен модуль enum

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

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

По сути, перечисления — это набор символических имён, связанных с уникальными значениями. По ним можно итерироваться. В целом, модуль enum позволяет создать более читаемый и самодокументирующийся код.

https://habr.com/ru/companies/timeweb/articles/564826/

👉@BookPython
Модуль pprint для красивого вывода сложных структур данных

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

Также в модуле есть функция pformat(), которая создаёт строковые представления вместо вывода. Это может пригодиться для логгирования.

Ещё для pprint() можно задать ширину экрана печати, отступ последующего уровня вложенности и даже автоматически отсортировать словарь перед выводом.

👉@BookPython
Минимальные примеры структур данных и алгоритмов на Python

Устанавливается просто через pip install algorithms

Затем можно импортировать различные алгоритмы:
▫️сортировки (быстрая, пузырьком и ещё +22 вида);
▫️графовые;
▫️поиска;
▫️на деревьях и так далее.

https://github.com/keon/algorithms/

👉@BookPython
Модуль fractions для работы с дробями

Создать рациональное число можно через Fraction() из пары целых чисел, другого рационального числа или строки. Numerator — это числитель, а denominator — знаменатель. По умолчанию numerator=0, denominator=1.

Целые и вещественные числа Python можно преобразовать в дробь, передав их Fraction().

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

👉@BookPython
Более эффективный метод объединения строк

Про объединение (конкатенацию) строк с помощью оператора + говорят в каждом туториале по Python для новичков. Однако иногда это не самый эффективный способ решить задачу.

Дело в том, что строки — неизменяемые объекты в Python. Это означает, что каждый раз при конкатенации вы создаёте новую строку с объединённым содержимым.

Более экономно по памяти и быстрее будет использовать метод join() для списков. При вызове он создаёт единственную строку.

👉@BookPython
Операции над множествами в Python

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

Примеры основных операций над множествами в Python:

Создание множества

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}


Объединение множеств (union)
Объединение возвращает множество, содержащее все элементы обоих множеств.

c = a.union(b)
# или можно использовать оператор |
c = a | b
print(c) # {1, 2, 3, 4, 5, 6}


Пересечение множеств (intersection)
Пересечение возвращает множество, содержащее только общие элементы двух множеств.

c = a.intersection(b)
# или можно использовать оператор &
c = a & b
print(c) # {3, 4}


Разность множеств (difference)
Разность возвращает множество, содержащее элементы, которые находятся только в одном множестве.

c = a.difference(b)
# или можно использовать оператор -
c = a - b
print(c) # {1, 2}


Симметрическая разность множеств (symmetric_difference)
Симметрическая разность возвращает множество, содержащее элементы, которые находятся в одном из множеств, но не в обоих сразу.

c = a.symmetric_difference(b)
# или можно использовать оператор ^
c = a ^ b
print(c) # {1, 2, 5, 6}


Проверка подмножества (issubset)
Возвращает True, если все элементы одного множества содержатся в другом множестве.

c = {1, 2}
print(c.issubset(a)) # True


Проверка надмножества (issuperset)
Возвращает True, если множество содержит все элементы другого множества.

print(a.issuperset(c)) # True


Проверка пересечения множеств (isdisjoint)
Возвращает True, если два множества не содержат общих элементов.

print(a.isdisjoint(b)) # False


Добавление элемента в множество

a.add(5)
print(a) # {1, 2, 3, 4, 5}


Удаление элемента из множества

a.remove(5)
print(a) # {1, 2, 3, 4}


👉@BookPython
Что делает класс ChainMap() модуля collections

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

Лучше всего посмотреть на примере:

d1 = dict(a=1, b=3)
d2 = dict(a=2, b=4, c=6)

from collections import ChainMap

chain = ChainMap(d1, d2)
print(chain['a']) # -> 1
print(chain['c']) # -> 6



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

Обновление или вставка в ChainMap затрагивают только первый входной словарь. Снова посмотрим на примере:

chain['c'] = -1
print(d1) # -> {'a': 1, 'b': 3, 'c': -1}
print(d2) # -> {'a': 2, 'b': 4, 'c': 6}


👉@BookPython
Media is too big
VIEW IN TELEGRAM
Как я устроился Python разработчиком без опыта. Реальное собеседование

00:00 Новогоднее вступление
00:42 Асинхронное программирование
01:16 Мультитрединг, мультипроцессинг
02:40 Микросервисы
04:30 Вопросы по питону
06:21 Лайфкодинг
08:17 Сложность алгоритма

источник

👉@BookPython
Тонкая настройка приложений Python WSGI и ASGI для Flask, Django и FastAPI

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

https://tonybaloney.github.io/posts/fine-tuning-wsgi-and-asgi-applications.html

👉@BookPython
Локализуем игру в слова с искусственным интеллектом

Все началось с коллеги, который закинул в локальный чат сообщение, что он сыграл в игру #59 и угадал слово с 33 попыток и одной подсказки. Игра оказалась простая и сложная одновременно: сайт загадал слово и нужно его отгадать. В поле ввода отправляешь слово, а искусственный интеллект на сайте определяет, насколько отправленное слово близко по смыслу к загаданному.

Интересная игра, тренирующая ассоциативное мышление и умение строить связи. Новое слово появляется каждый день, что в некотором смысле выглядит ограничителем. Также игра доступна только на португальском и английском языках. С одной стороны, это дополнительная практика, а с другой — сомнения «а знаю ли я это слово?» смазывают впечатления от игры.

https://habr.com/ru/companies/selectel/articles/705410/

👉@BookPython
Media is too big
VIEW IN TELEGRAM
Создайте мессенджер с помощью Django (за 6 минут) 🌮

0:00 Showing the final product
0:22 Setup Django and Daphne
1:08 Add async and sync views
2:09 Add templates with EventSource
2:52 Explaining how the chat works
3:35 Explaining how sending a message works
4:19 Create models to store data
4:25 Run our server
4:42 Visit our real-time chat app
5:28 Add styling to improve UI
6:00 Benefits and mailing list for more free content

источник

👉@BookPython
Ускоряем работу python с numba

Numba — это Just-In-Time компилятор, который превращает ваш код на питоне в машинный код на лету. Это не просто мелкая оптимизация, а серьёзно ускорение.

Если вы знакомы с интерпретируемыми языками, вы знаете, что они обычно медленнее компилируемых из-за необходимости анализировать и исполнять код на лету. Но что, если бы вы могли получить лучшее из обоих миров? JIT-компиляция позволяет интерпретируемому языку, каким является питон, динамически компилировать части кода в машинный код, значительно ускоряя исполнение.

Numba использует этот подход, чтобы помочь вашему коду на питоне быть быстрей. Она анализирует вашу функцию, определяет типы данных и затем компилирует её в оптимизированный машинный код. И всё это происходит во время выполнения вашего кода.

https://habr.com/ru/companies/otus/articles/784068/

👉@BookPython
Что делает функция seed() модуля random

Функция seed() в модуле random в Python используется для инициализации генератора случайных чисел. По умолчанию генератор случайных чисел использует текущее системное время, чтобы генерировать случайные числа, но если задать определённое значение с помощью функции seed(), последовательность случайных чисел станет предсказуемой.

Пример использования:

import random

random.seed(10)
print(random.random()) # Всегда будет генерировать одно и то же число


Основные моменты:
- Если вызвать random.seed() с одним и тем же значением несколько раз, генератор будет создавать одну и ту же последовательность случайных чисел.
- Если seed() не вызывается или вызывается без аргументов, генерация случайных чисел будет происходить на основе текущего времени или другого системного источника.

Таким образом, использование seed() полезно, когда требуется воспроизвести результаты, например, в тестах или для отладки.

👉@BookPython