
Получите клиентов в любой нише!
Делегируйте запуск рекламы нам — бесплатно
Подробнее
11.9

Библиотека Python разработчика
5.0
16
Поделиться
В избранное
Купить рекламу в этом канале
Формат:
keyboard_arrow_down
- 1/24
- 2/48
- 3/72
- 7 дней
- Репост
1 час в топе / 24 часа в ленте
Количество:
keyboard_arrow_down
- 1
- 2
- 3
- 4
- 5
- 8
- 10
- 15
Стоимость публикации:
local_activity
7 552.44₽7 552.44₽local_mall
0.0%
Осталось по этой цене:0
Последние посты канала
Многие системные вызовы могут быть прерваны входящим сигналом. Если программист хочет, чтобы вызов всё же был выполнен, ему нужно повторить его снова.
Яркий пример — функция
Однако, начиная с Python 3.5, благодаря PEP 475, Python автоматически обрабатывает все такие вызовы. Следующая программа завершится при первом полученном
👉@BookPython
Яркий пример — функция
sleep(x)
, которая должна "заморозить" программу на x
секунд, но на практике может завершиться раньше, если появится сигнал.Однако, начиная с Python 3.5, благодаря PEP 475, Python автоматически обрабатывает все такие вызовы. Следующая программа завершится при первом полученном
SIGINT
в любой версии Python до 3.5. Но в Python 3.5+ она будет спать ровно 5 секунд, независимо от сигналов.
import signal
import time
def signal_handler(signal, frame):
print('Caught')
signal.signal(signal.SIGINT, signal_handler)
time.sleep(5)
👉@BookPython
860
07:48
19.02.2025
Оптимизация SQL-запросов в Django ORM
Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш Django-проект начал тормозить, скорее всего, проблема в количестве и сложности запросов к базе данных.
1️⃣ Используйте
Django ORM лениво загружает связанные объекты, что может привести к множественным SQL-запросам (N+1). Вместо этого используйте:
Это значительно уменьшает количество запросов к базе.
2️⃣ Используйте
Если вам не нужны все поля модели, загружайте только необходимые:
А если хотите исключить несколько полей:
3️⃣ Агрегация вместо перебора в Python
Вместо:
Используйте
Это выполнится на стороне базы, а не в Python, что намного быстрее.
4️⃣ Используйте
Если вам нужно проверить, есть ли записи в базе, не используйте
❌ Плохо:
5️⃣ Кешируйте запросы
Django поддерживает кеширование, и если запросы повторяются, можно использовать:
Эти простые приемы помогут вам ускорить Django-приложение и уменьшить нагрузку на базу данных. А вы уже используете их в своих проектах? Делитесь в комментариях! 👇
👉@BookPython
Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш Django-проект начал тормозить, скорее всего, проблема в количестве и сложности запросов к базе данных.
1️⃣ Используйте
select_related
и prefetch_related
Django ORM лениво загружает связанные объекты, что может привести к множественным SQL-запросам (N+1). Вместо этого используйте:
# select_related — жадная загрузка (для ForeignKey, OneToOne)
posts = Post.objects.select_related("author").all()
# prefetch_related — для ManyToMany и Reverse ForeignKey
posts = Post.objects.prefetch_related("comments").all()
Это значительно уменьшает количество запросов к базе.
2️⃣ Используйте
only
и defer
Если вам не нужны все поля модели, загружайте только необходимые:
users = User.objects.only("id", "username") # Загружаем только ID и имя
А если хотите исключить несколько полей:
users = User.objects.defer("bio", "last_login") # Исключаем ненужные поля
3️⃣ Агрегация вместо перебора в Python
Вместо:
total_likes = sum(post.likes.count() for post in posts)
Используйте
annotate
:
from django.db.models import Count
posts = Post.objects.annotate(total_likes=Count("likes"))
Это выполнится на стороне базы, а не в Python, что намного быстрее.
4️⃣ Используйте
exists()
вместо count()
Если вам нужно проверить, есть ли записи в базе, не используйте
count()
, это дорогостоящий запрос:
if User.objects.filter(email="[email protected]").exists(): # Быстро
❌ Плохо:
if User.objects.filter(email="[email protected]").count() > 0: # Долго
5️⃣ Кешируйте запросы
Django поддерживает кеширование, и если запросы повторяются, можно использовать:
from django.core.cache import cache
users = cache.get("users")
if not users:
users = list(User.objects.all()) # Загружаем пользователей
cache.set("users", users, timeout=60 * 15) # Кешируем на 15 минут
Эти простые приемы помогут вам ускорить Django-приложение и уменьшить нагрузку на базу данных. А вы уже используете их в своих проектах? Делитесь в комментариях! 👇
👉@BookPython
1000
08:22
18.02.2025
Оптимизация кода с помощью генераторов в Python
Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, экономнее по памяти и элегантнее.
Что такое генераторы?
Генераторы — это функции, которые используют
Пример: экономия памяти
Допустим, нам нужно обработать миллион чисел и взять из них только четные. Обычный способ:
Такой код загружает в память весь список, что может быть проблемой при больших данных.
А теперь переделаем на генератор:
Здесь список не создается, а элементы выдаются по одному. Это экономит память и ускоряет обработку!
Где применять?
✔️ Чтение больших файлов построчно (
✔️ Работа с потоками данных
✔️ Генерация последовательностей без создания списков
👉@BookPython
Сегодня хочу показать вам, как использование генераторов может сделать ваш код быстрее, экономнее по памяти и элегантнее.
Что такое генераторы?
Генераторы — это функции, которые используют
yield
вместо return
. Они не возвращают сразу все значения, а запоминают своё состояние и отдают результат по мере необходимости. Это особенно полезно при обработке больших объемов данных, так как позволяет не загружать всю информацию в память сразу. Пример: экономия памяти
Допустим, нам нужно обработать миллион чисел и взять из них только четные. Обычный способ:
def get_even_numbers(n):
result = []
for i in range(n):
if i % 2 == 0:
result.append(i)
return result
numbers = get_even_numbers(10**6)
print(len(numbers)) # 500000
Такой код загружает в память весь список, что может быть проблемой при больших данных.
А теперь переделаем на генератор:
def get_even_numbers_gen(n):
for i in range(n):
if i % 2 == 0:
yield i
numbers = get_even_numbers_gen(10**6)
print(sum(1 for _ in numbers)) # 500000
Здесь список не создается, а элементы выдаются по одному. Это экономит память и ускоряет обработку!
Где применять?
✔️ Чтение больших файлов построчно (
yield line
) ✔️ Работа с потоками данных
✔️ Генерация последовательностей без создания списков
👉@BookPython
1300
06:23
17.02.2025
Python поддерживает несколько способов запуска скрипта. Обычный вариант — это
Однако, можно также использовать
Можно также запустить Python с каталогом:
Пример:
👉@BookPython
python foo.py
; в этом случае foo.py
просто выполняется.Однако, можно также использовать
python -m foo
. Если foo
— это не пакет, то foo.py
ищется в sys.path
и выполняется. Если это пакет, то Python сначала выполняет foo/__init__.py
, а затем foo/__main__.py
. Обратите внимание, что во время выполнения __init__.py
значение __name__
равно foo
, но во время выполнения __main__.py
оно равно __main__
.Можно также запустить Python с каталогом:
python dir/
или даже python dir.zip
. В этом случае Python ищет dir/__main__.py
и выполняет его, если находит.Пример:
$ ls foo
__init__.py __main__.py
$ cat foo/__init__.py
print(__name__)
$ cat foo/__main__.py
print(__name__)
$ python -m foo
foo
__main__
$ python foo/
__main__
$ python foo/__init__.py
__main__
👉@BookPython
1400
07:58
16.02.2025
Модуль
Эти два типа —
👉@BookPython
io
предоставляет два типа файловых объектов в памяти. Такие объекты могут быть полезны для работы с интерфейсами, которые поддерживают только файлы, без необходимости создавать их на диске. Очевидный пример — модульное тестирование.Эти два типа —
BytesIO
и StringIO
, которые работают соответственно с байтами и строками.
from io import StringIO
f = StringIO()
f.write('first\n') # Вывод: 6
f.write('second\n') # Вывод: 7
f.seek(0) # Вывод: 0
print(f.readline()) # Вывод: 'first\n'
print(f.readline()) # Вывод: 'second\n'
👉@BookPython
1700
06:26
14.02.2025
Если вам нужно итерироваться по нескольким итерируемым объектам одновременно, функция
Обратите внимание, что
Для распаковки значений можно использовать оператор
👉@BookPython
zip
может быть хорошим выбором. Она возвращает генератор, который выдаёт кортежи, содержащие по одному элементу из каждого исходного итерируемого объекта:
In : eng = ['one', 'two', 'three']
In : ger = ['eins', 'zwei', 'drei']
In : for e, g in zip(eng, ger):
...: print('{e} = {g}'.format(e=e, g=g))
...:
one = eins
two = zwei
three = drei
Обратите внимание, что
zip
принимает итерируемые объекты как отдельные аргументы, а не список аргументов. Для распаковки значений можно использовать оператор
*
:
In : list(zip(*zip(eng, ger)))
Out: [('one', 'two', 'three'), ('eins', 'zwei', 'drei')]
👉@BookPython
2100
08:13
12.02.2025
list
позволяет хранить массив из любых объектов. Это довольно удобно, но может быть неэффективно. Для компактного представления массивов базовых значений можно использовать модуль array
. Поддерживаемые значения включают различные типы C, такие как char
, int
, long
, double
и другие. Фактическое представление определяется реализацией C.
import array
a = array.array('B') # Создаем массив байтов
a.append(240)
a.append(159)
a.append(144)
a.append(180)
print(a.tobytes().decode('utf8')) # Выводит: '🐴'
👉@BookPython
2200
06:18
10.02.2025
Когда в Python используется переменная, сначала она ищется в текущей области видимости. Если такая переменная не найдена, поиск продолжается во вложенной области. Это повторяется до тех пор, пока не будет достигнуто глобальное пространство имен.
Однако присваивание переменной работает иначе. Новая переменная всегда создается в текущей области видимости, если не указано
👉@BookPython
x = 1
def scope():
x = 2
def inner_scope():
print(x) # выводит 2
inner_scope()
scope()
Однако присваивание переменной работает иначе. Новая переменная всегда создается в текущей области видимости, если не указано
global
или nonlocal
:
x = 1
def scope():
x = 2
def inner_scope():
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 2
scope()
print(x) # выводит 1
global
позволяет использовать переменные из глобального пространства имен, а nonlocal
ищет переменную в ближайшей окружающей области видимости. Сравните:
x = 1
def scope():
x = 2
def inner_scope():
global x
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 2
scope()
print(x) # выводит 3
x = 1
def scope():
x = 2
def inner_scope():
nonlocal x
x = 3
print(x) # выводит 3
inner_scope()
print(x) # выводит 3
scope()
print(x) # выводит 1
👉@BookPython
2000
17:26
09.02.2025
imageИзображение не доступно для предпросмотра
Погрузиться в сферу Data Science и освоить профессию инженера данных поможет одногодичная онлайн-программа магистратуры специализированного высшего образования «Инженерия данных» НИТУ МИСИС.
Преимущества программы:
✔️ полное погружение в Data Science с помощью онлайн-занятий
✔️практическое обучение от экспертов индустрии и ведущих преподавателей МИСИС
✔️освоите разработку архитектурных IT-решений по подготовке и трансформации данных для решения задач любого бизнеса
✔️ на старте обучения сможете выбрать свой трек специализации: «Python-разработчик», «Инженерия данных» или «Машинное обучение»
✔️ диплом одного из ведущих технических вузов России
Готов изменить будущее? Начни готовиться к сдаче вступительного испытания уже сейчас с помощью подготовительного онлайн-курса. Переходи по ссылке и пройди простую регистрацию. Подробная информация о программе на нашем сайте. Подписывайся на Телеграм-канал "Онлайн-обучение | МИСИС", чтобы быть в курсе новостей.
Преимущества программы:
✔️ полное погружение в Data Science с помощью онлайн-занятий
✔️практическое обучение от экспертов индустрии и ведущих преподавателей МИСИС
✔️освоите разработку архитектурных IT-решений по подготовке и трансформации данных для решения задач любого бизнеса
✔️ на старте обучения сможете выбрать свой трек специализации: «Python-разработчик», «Инженерия данных» или «Машинное обучение»
✔️ диплом одного из ведущих технических вузов России
Готов изменить будущее? Начни готовиться к сдаче вступительного испытания уже сейчас с помощью подготовительного онлайн-курса. Переходи по ссылке и пройди простую регистрацию. Подробная информация о программе на нашем сайте. Подписывайся на Телеграм-канал "Онлайн-обучение | МИСИС", чтобы быть в курсе новостей.
1900
11:34
07.02.2025
Создание новой переменной в Python фактически означает создание нового имени для уже существующего объекта. Именно поэтому этот процесс называется связыванием имени (name binding).
Существует множество способов связать имя с объектом. Вот примеры того, как можно связать
Также можно привязать имя к объекту, манипулируя глобальным пространством имен:
Однако нельзя сделать то же самое с
👉@BookPython
Существует множество способов связать имя с объектом. Вот примеры того, как можно связать
x
:
x = y # Присваивание
import x # Импорт модуля
class x: pass # Определение класса
def x(): pass # Определение функции
def y(x): pass # Определение аргумента функции
for x in y: pass # Перебор элементов в цикле
with y as x: pass # Использование в конструкции with
except y as x: pass # Обработка исключения
Также можно привязать имя к объекту, манипулируя глобальным пространством имен:
In : x
NameError: name 'x' is not defined # Ошибка: переменная x не определена
In : globals()['x'] = 42 # Присваивание через globals()
In : x
Out: 42 # Теперь x привязан к 42
Однако нельзя сделать то же самое с
locals()
, так как изменения словаря locals()
игнорируются.👉@BookPython
1700
10:50
07.02.2025
close
С этим каналом часто покупают
Отзывы канала
keyboard_arrow_down
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
5.0
0 отзыва за 6 мес.
a
**vert@****.ru
на сервисе с апреля 2022
25.05.202307:13
5
Спасибо, всё хорошо.
Показать еще
Лучшие в тематике
Новинки в тематике
Статистика канала
Рейтинг
11.9
Оценка отзывов
5.0
Выполнено заявок
28
Подписчики:
19.7K
Просмотры на пост:
lock_outline
ER:
5.2%
Публикаций в день:
1.0
CPV
lock_outlineВыбрано
0
каналов на сумму:0.00₽
Подписчики:
0
Просмотры:
lock_outline
Перейти в корзинуКупить за:0.00₽
Комментарий