Latest Posts from Библиотека Python разработчика | Книги по питону (@bookpython) on Telegram

Библиотека Python разработчика | Книги по питону Telegram Posts

Библиотека Python разработчика | Книги по питону
Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др.

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

№ 4869337666
19,746 Subscribers
1,126 Photos
392 Videos
Last Updated 11.03.2025 07:51

The latest content shared by Библиотека Python разработчика | Книги по питону on Telegram

Библиотека Python разработчика | Книги по питону

10 Mar, 05:46

940

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

По сути, чтобы создать кортеж, вы просто пишете значения, разделенные запятыми: 1, 2, 3. Пока что все понятно. А как насчет кортежа, содержащего только один элемент? Вы просто добавляете завершающую запятую к единственному значению: 1,. Это выглядит несколько некрасиво и может быть подвержено ошибкам, но логика понятна.

А как насчет пустого кортежа? Это просто запятая? Нет, это (). Значит ли это, что круглые скобки создают кортеж так же, как и запятые? Нет, это не так. (4) — это не кортеж, это просто 4.

Пример:

a = [
(1, 2, 3),
(1, 2),
(1),
(),
]

[type(x) for x in a]
# Результат: [tuple, tuple, int, tuple]


Чтобы все стало еще более запутанным, литералы кортежей часто требуют дополнительных круглых скобок. Если вы хотите, чтобы кортеж был единственным аргументом функции, то f(1, 2, 3) не сработает по очевидной причине — вместо этого нужно написать f((1, 2, 3)).

👉 @BookPython
Библиотека Python разработчика | Книги по питону

08 Mar, 08:10

1,113

Как ускорить код на Python? Используем map, filter, reduce

Привет, друзья! Сегодня расскажу о том, как можно ускорить выполнение кода, заменяя обычные циклы на встроенные функции map(), filter() и reduce(). Эти инструменты позволяют писать более компактный, читаемый и быстрый код.

map()
Функция map() применяется к каждому элементу последовательности и возвращает новый итератор.

Обычный способ:

numbers = [1, 2, 3, 4, 5]
squared = []
for num in numbers:
squared.append(num ** 2)


Быстрее с map():

numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))

За счёт того, что map() использует C-оптимизированную логику, код выполняется быстрее.

filter()
Фильтрует элементы последовательности по заданному условию.

Медленный вариант:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = []
for num in numbers:
if num % 2 == 0:
evens.append(num)


Быстрее с filter():

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))

Такой код читается легче и работает быстрее.

reduce()
Позволяет выполнять кумулятивные операции (например, суммирование, умножение).

Классический способ:

numbers = [1, 2, 3, 4, 5]
product = 1
for num in numbers:
product *= num


Быстрее с reduce():

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)

Этот метод полезен, если нужно свести список к одному значению.

💡 Важно: reduce() чаще заменяют sum() или math.prod(), но для сложных операций он остаётся полезным.


Такие функции помогают писать код, который не только быстрее работает, но и легче читается.

👉 @BookPython
Библиотека Python разработчика | Книги по питону

07 Mar, 08:02

1,324

🔥Podlodka Python Crew — это онлайн-конференции по самым актуальным темам для питонистов.

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

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

🎯Что в программе?

Оптимизации, которые вы могли упустить — Александр Кучин (Литрес) расскажет, какие скрытые проблемы могут замедлять код и как их исправить 🚀

Как работает CPython — от запуска скрипта до управления памятью — Василий Рябов разберет, как Python читает и выполняет код, управляет памятью и garbage collection 📌

Своя Игра: уровни глубины знаний Python-разработчика — Нина Лукина и Евгений Афонасьев в формате викторины объяснят, как Python работает под капотом. Это будет эпично 🎮

Профилирование на Python — Василий Исаев (Точка) объяснит, как находить узкие места в коде и повышать его производительность с помощью профилирования 💡

Подходы, которые можно внедрить сразу после конференции!

🔗 Подробности и билеты: https://podlodka.io/pythoncrew
Библиотека Python разработчика | Книги по питону

07 Mar, 06:00

1,375

В Python каждое значение имеет логическое (булево) представление. Оно неявно приводится к bool, когда используется в if, bool, not и других логических операциях.

Ложными (False) считаются следующие объекты: None, False, 0 любого типа, а также пустые коллекции ("", [], {} и т. д.), включая пользовательские коллекции с методом __len__, если __len__ возвращает 0.

Можно также определить пользовательскую проверку логического значения для своих объектов, используя магический метод __bool__:


class Rectangle:
def __init__(self, width, height):
self._w = width
self._h = height

def __bool__(self):
return bool(self._w and self._h)

print(bool(Rectangle(2, 3))) # True
print(bool(Rectangle(2, 0))) # False
print(bool(Rectangle(0, 2))) # False


Обратите внимание, что в Python 2 аналогом __bool__ является метод __nonzero__.

👉@BookPython
Библиотека Python разработчика | Книги по питону

05 Mar, 05:50

1,543

🐍 Как ускорить работу с pandas?

Сегодня я покажу вам несколько способов ускорить работу с pandas, если у вас большие объемы данных.

1️⃣ Используйте categorical тип данных
Если у вас есть столбцы с повторяющимися строковыми значениями (например, категории товаров), лучше преобразовать их в category:


df["category"] = df["category"].astype("category")

Это снизит использование памяти и ускорит фильтрацию.

2️⃣ Читайте файлы быстрее
Стандартный pandas.read_csv() не всегда работает быстро. Можно попробовать:

- Указать dtype столбцов
- Использовать usecols для загрузки только нужных колонок
- Применить pyarrow или fastparquet при работе с Parquet-файлами


df = pd.read_csv("data.csv", dtype={"id": "int32", "name": "category"}, usecols=["id", "name"])


3️⃣ Используйте numba и vectorize()
Если у вас есть сложные вычисления, попробуйте numba:


from numba import jit

@jit(nopython=True)
def expensive_function(x):
return x**2 + 10*x + 5

df["new_col"] = df["value"].apply(expensive_function)

Это ускорит обработку в разы!

4️⃣ modin вместо pandas
Если у вас мощный многопоточный процессор, попробуйте modin:


import modin.pandas as pd
df = pd.read_csv("data.csv")

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

Какие еще трюки используете вы? Делитесь в комментариях!

👉@BookPython
Библиотека Python разработчика | Книги по питону

03 Mar, 06:07

1,686

Обычно вам не нужно заботиться об объектах-итераторах; они создаются и используются автоматически конструкциями for, list или другими механизмами, которые выполняют итерацию за вас. Однако в некоторых редких случаях вам может понадобиться получить итератор из итерируемого объекта явно. Правильный способ сделать это — использовать встроенную функцию iter (которая использует методы __iter__ или __getitem__ объекта для получения итератора):


part_sizes = [3, 2, 5]
iterator = iter(range(100))

result = []
for size in part_sizes:
part = []
for _ in range(size):
part.append(next(iterator))
result.append(part)

assert result == [
[0, 1, 2],
[3, 4],
[5, 6, 7, 8, 9],
]


Забавный факт: iter можно использовать совершенно другим способом. Вместо создания итератора из объекта, он также может создавать итератор из функции (или любого вызываемого объекта). Если вызвать iter с двумя аргументами, первый должен быть вызываемым объектом, а второй — контрольным значением (sentinel). При каждом вызове __next__ созданный итератор будет вызывать переданную функцию без аргументов. Если возвращённое значение равно sentinel, возбуждается исключение StopIteration; в противном случае возвращается полученное значение.

Обычно это удобно для чтения строк до появления определённого маркера:


In : list(iter(input, 'END'))
a
b

END
Out: ['a', 'b', '']


👉@BookPython
Библиотека Python разработчика | Книги по питону

28 Feb, 07:03

1,924

В Python можно спутать две вещи: итерируемые объекты (iterables) и итераторы (iterators).

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

Есть два способа сделать объект итерируемым. Первый — реализовать метод __getitem__:


class Iterable:
def __getitem__(self, i):
if i > 10:
raise IndexError
return i

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Второй способ — определить метод __iter__, который возвращает итератор. Итератор — это объект, имеющий метод __next__, который при каждом вызове возвращает следующее значение из исходного итерируемого объекта:


class Iterator:
def __init__(self):
self._i = 0

def __next__(self):
i = self._i
if i > 10:
raise StopIteration
self._i += 1
return i

class Iterable:
def __iter__(self):
return Iterator()

print(list(Iterable()))


Вывод:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


Обычно итератор также имеет метод __iter__, который просто возвращает self. Это позволяет самому итератору быть итерируемым, то есть большинство итераторов также являются итерируемыми объектами.

👉@BookPython
Библиотека Python разработчика | Книги по питону

27 Feb, 14:09

1,972

Python-разработчики уже который год остаются одними из самых востребованных на рынке. По данным Хабр Карьера, сейчас для них открыто около десяти тысяч вакансий со средней зарплатой 196 000 рублей.

Попробуйте себя в этой профессии на бесплатном курсе Нетологии «Основы Python: создаём телеграм-бота». За 5 занятий вы не просто познакомитесь с логикой работы языка и научитесь применять базовые конструкции, но и напишете телеграм-бота и планировщик задач.

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

Реклама. ООО "Нетология". ИНН 7726464125 Erid 2VSb5wszgjz
Библиотека Python разработчика | Книги по питону

27 Feb, 07:02

1,763

🔥 5 полезных инструментов для Python-разработчика

Сегодня покажу вам 5 инструментов, которые могут серьезно упростить жизнь Python-разработчика. Они не на слуху, но реально полезны! 🚀

1️⃣ Rich – Красивый вывод в консоли
Больше не нужно мучиться с print(), когда надо отобразить таблицу, JSON или логи с цветами. Rich делает консольные приложения красивыми!


from rich import print
print({"name": "Alice", "age": 25})


📌 Установка: pip install rich

2️⃣ IceCream – Удобный отладочный принт
Если вы устали писать print(f"var={var}"), попробуйте icecream (ic). Он показывает и имя переменной, и её значение, и даже место вызова!


from icecream import ic
x = 42
ic(x) # x: 42


📌 Установка: pip install icecream

3️⃣ Pydantic – Валидация данных без боли
Больше не нужно вручную проверять типы и структуру входных данных. Pydantic делает это автоматически.


from pydantic import BaseModel

class User(BaseModel):
name: str
age: int

user = User(name="Alice", age="25") # Ошибка, age должен быть int


📌 Установка: pip install pydantic

4️⃣ Typer – Быстрое создание CLI
Хотите создать CLI-приложение, но не любите argparse? Typer использует аннотации типов и делает это проще.


import typer

def main(name: str):
print(f"Hello {name}!")

if __name__ == "__main__":
typer.run(main)


📌 Установка: pip install typer

5️⃣ loguru – Логирование без боли
Более мощная альтернатива стандартному logging, с удобным API и красивым выводом.


from loguru import logger
logger.info("Это информационное сообщение!")


📌 Установка: pip install loguru

Какими инструментами пользуетесь вы? Делитесь в комментариях!

👉 @BookPython
Библиотека Python разработчика | Книги по питону

25 Feb, 10:08

1,612

Есть две встроенные функции, которые позволяют анализировать итерируемые объекты без написания тривиальных и избыточных условий if. Это all и any.

- any возвращает True, если хотя бы одно из значений истинно.
- all возвращает True, если все значения истинны.
- all возвращает True для пустого итерируемого объекта, тогда как any в этом случае вернёт False.

Обе функции особенно полезны при использовании вместе с генераторами и списковыми включениями:


package_broken = any(
part.is_broken() for part in package.get_parts()
)
package_ok = all(
part.ok() for part in package.get_parts()
)


Функции any и all зачастую взаимозаменяемы благодаря законам де Моргана. Выбирайте ту, которая делает код более понятным.

👉@BookPython