uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq

Ko'proq ko'rsatish

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

Библиотека Python разработчика | Книги по питону (@bookpython) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 17 967 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 7 269-o'rinni va Rossiya mintaqasida 36 632-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 17 967 obunachiga ega bo‘ldi.

29 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -98 ga, so‘nggi 24 soatda esa -6 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 5.47% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 2.71% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 983 marta ko‘riladi; birinchi sutkada odatda 487 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent numbers, yield, модуль, none, декоратор kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍 По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 30 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

17 967
Obunachilar
-624 soatlar
-297 kun
-9830 kun
Postlar arxiv
Существует две встроенные функции, которые позволяют анализировать итерируемые объекты без необходимости писать тривиальные и избыточные циклы for. Это all и any. any возвращает True, если хотя бы одно значение истинно; all возвращает True, только если все значения истинны. Для пустого итерируемого объекта all возвращает True, а any — False. Обе функции особенно полезны в сочетании со списковыми включениями (list comprehensions):

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

Регистрируйтесь на вебинар UserGate WAF 💻Расскажет как новая версия UserGate WAF поможет защитить ваши веб-приложения и какие обновления ждут вас в 2025 году ✅На вебинаре будет: - Преимущества и особенности UserGate WAF - Принципы работы и сценарии использования - Демонстрация возможностей WAF - Планы развития продукта в 2025 году - Ответы на вопросы 👌Расскажем, как защитить вашу компанию. Регистрируйтесь — будет интересно! Зарегистрироваться #реклама 16+ webinar.usergate.com О рекламодателе

Иногда нужно создать функцию на основе более универсальной. Например, у функции int() есть параметр base, который мы хотим зафиксировать, чтобы получить новую функцию base2:

>>> int("10")
10
>>> int("10", 2)
2
>>> def base2(x):
...     return int(x, 2)
...
>>> base2("10")
2
functools.partial позволяет сделать то же самое, но точнее и семантически понятнее:

base2 = partial(int, base=2)
Это полезно, когда нужно передать функцию как аргумент другой, более общей функции, но при этом некоторые аргументы должны быть зафиксированы:

>>> map(partial(int, base=2), ["1", "10", "100"])
[1, 2, 4]
Без partial пришлось бы делать так:

>>> map(lambda x: int(x, base=2), ["1", "10", "100"])
[1, 2, 4]
👉@BookPython

В Python нет поддержки асинхронных операций с файлами. Чтобы сделать их неблокирующими, нужно использовать отдельные потоки. Для асинхронного выполнения кода в потоке следует использовать метод loop.run_in_executor. Сторонний модуль aiofiles делает всё это за тебя, предоставляя простой и удобный интерфейс:

async with aiofiles.open('filename', mode='r') as f:
    contents = await f.read()
👉@BookPython

А кто-то ещё пользуется поисковиками? Привет, я Аня, 5 лет работаю на удалёнке, сейчас маркетолог в банке. Недавно задумалась
А кто-то ещё пользуется поисковиками? Привет, я Аня, 5 лет работаю на удалёнке, сейчас маркетолог в банке. Недавно задумалась, раньше, чтобы найти ответ, я открывала Google. Сейчас — задаю вопрос ChatGPT, или Perplexity. И вокруг меня как-будто все резко стали говорить, что поисковиками больше никто не пользуется. На работе, что трафик из нейросетей растет, в каналах – что меняется паттерн поведения. Понаблюдала и тоже заметила, что формулирую запрос не как «рецепт без перца», а как «подскажи, что приготовить, если не ем болгарский перец, капусту и хочу что-то белковое». Что это меняет? Нейросети формируют выдачу иначе: не по SEO, а по сути, контексту и, надеюсь, пользе. Хотя доверять на 100% всё равно им нельзя. ✨ Какие ещё нас ждут изменения и что вообще значит для людей, брендов и общества, читай в канале! Подписаться #реклама 16+ О рекламодателе

>>> bool(datetime(2018, 1, 1).time())
False
>>> bool(datetime(2018, 1, 1, 13, 12, 11).time())
True
До Python 3.5 объекты datetime.time() считались ложными, если они представляли полночь по UTC. Это могло приводить к трудноуловимым ошибкам. В следующих примерах if not может выполниться не потому, что created_time равен None, а потому, что время — полночь.

def create(created_time=None) -> None:
    if not created_time:
        created_time = datetime.now().time()
Можно исправить это, явно проверяя на None:

def create(created_time=None) -> None:
    if created_time is None:
        created_time = datetime.now().time()
👉@BookPython

Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Кни
Дарим подписку на Яндекс Музыку Ответьте на 1 вопрос и Яндекс Музыка ваша для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в подписке. Попробуйте бесплатно❤️ Попробовать #реклама 18+ music.yandex.ru О рекламодателе Реклама на Яндексе

In:

int('୧৬𝟙༣')
Out:

1613
Цифры 0 1 2 3 4 5 6 7 8 9 — это не единственные символы, которые считаются цифрами. Python следует правилам Unicode и считает «цифрами» сотни различных символов. Вот полный список таких символов. Это влияет на такие функции, как int, unicode.isdecimal и даже re.match:

# Пример 1
int('෯')
# Вывод:
9

# Пример 2
'٢'.isdecimal()
# Вывод:
True

# Пример 3
import re
bool(re.match(r'\d', '౫'))
# Вывод:
True
👉@BookPython

Начиная с Python 3.0, при возникновении нового исключения внутри блока except перехваченное исключение автоматически сохраняется в атрибуте __context__ создаваемого исключения. В результате при выводе будут показаны оба исключения:

try:
    1 / 0
except ZeroDivisionError:
    raise ValueError('Zero!')
(most recent call last):
  File "test.py", line 2, in <module>
    1 / 0
ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    raise ValueError('Zero!')
ValueError: Zero!
Кроме того, вы можете явно указать причинное исключение, использовав конструкцию raise … from. Тогда в атрибут __cause__ нового исключения будет помещено исходное:

division_error = None

try:
    1 / 0
except ZeroDivisionError as e:
    division_error = e

raise ValueError('Zero!') from division_error
(most recent call last):
  File "test.py", line 4, in <module>
    1 / 0
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    raise ValueError('Zero!') from division_error
ValueError: Zero!
👉@BookPython

Подарки от семечек Джинн! Хочешь набор любимых семечек "Джинн" или "Белочка"и крутой зонт? Учавствуй в розыгрыше! Подписаться
Подарки от семечек Джинн! Хочешь набор любимых семечек "Джинн" или "Белочка"и крутой зонт? Учавствуй в розыгрыше! Подписаться #реклама О рекламодателе

Все объекты, которые в настоящий момент существуют в памяти интерпретатора, можно получить с помощью gc.get_objects():

In [1]: class A:
   ...:     def __init__(self, x):
   ...:         self._x = x
   ...:
   ...:     def __repr__(self):
   ...:         class_name = type(self).__name__
   ...:         x = self._x
   ...:         return f'{class_name}({x!r})'
   ...:

In [2]: A(1)
Out[2]: A(1)

In [3]: A(2)
Out[3]: A(2)

In [4]: A(3)
Out[4]: A(3)

In [5]: [x for x in gc.get_objects() if isinstance(x, A)]
Out[5]: [A(1), A(2), A(3)]
👉@BookPython

20 000 баллов на сервисы Яндекс Go для бизнеса Подключайтесь к сервису и оптимизируйте бизнес-процессы без бумажной волокиты.
20 000 баллов на сервисы Яндекс Go для бизнеса Подключайтесь к сервису и оптимизируйте бизнес-процессы без бумажной волокиты. Яндекс Go для бизнеса как личный помощник: - организует командировку; - отвезет до работы; - накормит сотрудников. Пока вы экономите время и силы. Узнать больше #реклама 16+ business.go.yandex О рекламодателе Реклама на Яндексе

Иногда нужно выполнить блок кода с несколькими менеджерами контекста:

with open('f') as f:
    with open('g') as g:
        with open('h') as h:
            pass
Начиная с Python 2.7 и 3.1, это можно записать в одной конструкции with:

o = open
with o('f') as f, o('g') as g, o('h') as h:
    pass
Раньше для этого использовали функцию contextlib.nested:

with nested(o('f'), o('g'), o('h')) as (f, g, h):
    pass
Если же число менеджеров контекста заранее неизвестно, лучше подойдёт более продвинутый инструмент. contextlib.ExitStack позволяет открывать любое число контекстов в произвольный момент, но гарантирует корректный выход из них в конце:

with ExitStack() as stack:
    f = stack.enter_context(o('f'))
    g = stack.enter_context(o('g'))
    other = [
        stack.enter_context(o(filename))
        for filename in filenames
    ]
👉@BookPython

Регистрируйтесь на вебинар UserGate WAF 💻Расскажет как новая версия UserGate WAF поможет защитить ваши веб-приложения и какие обновления ждут вас в 2025 году ✅На вебинаре будет: - Преимущества и особенности UserGate WAF - Принципы работы и сценарии использования - Демонстрация возможностей WAF - Планы развития продукта в 2025 году - Ответы на вопросы 👌Расскажем, как защитить вашу компанию. Регистрируйтесь — будет интересно! Зарегистрироваться #реклама 16+ webinar.usergate.com О рекламодателе

В Python блок else может располагаться не только после if, но и после for и while. Код внутри else выполняется, если цикл не был прерван оператором break. Обычный способ использования этого — найти что-то в цикле и выйти из него через break, когда нужный элемент найден:

>>> first_odd = None
>>> for x in [2, 3, 4, 5]:
...     if x % 2 == 1:
...         first_odd = x
...         break
... else:
...     raise ValueError('В списке нет нечетных элементов')
...
>>> first_odd
3

>>> for x in [2, 4, 6]:
...     if x % 2 == 1:
...         first_odd = x
...         break
... else:
...     raise ValueError('В списке нет нечетных элементов')
...
...
ValueError: В списке нет нечетных элементов
👉@BookPython

Яндекс Музыка ваша за ответ на 1 вопрос Яндекс Музыка, Книги и Кинопоиск в одной подписке для вас и 3-х ваших близких. Попроб
Яндекс Музыка ваша за ответ на 1 вопрос Яндекс Музыка, Книги и Кинопоиск в одной подписке для вас и 3-х ваших близких. Попробуйте бесплатно👍 Попробовать #реклама 18+ mrqz.me О рекламодателе Реклама на Яндексе

В Python операторы += и + являются разными. За их поведение отвечают методы __iadd__ и __add__ соответственно.

class A:
    def __init__(self, x):
        self.x = x

    def __iadd__(self, another):
        self.x += another.x
        return self

    def __add__(self, another):
        return type(self)(self.x + another.x)
Если __iadd__ не определён, выражение a += b сводится к простому a = a + b. Обычно разница между += и + в том, что первый изменяет объект, а второй создаёт новый:

>>> a = [1, 2, 3]
>>> b = a
>>> a += [4]
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> a = a + [5]
>>> a
[1, 2, 3, 4, 5]
>>> b
[1, 2, 3, 4]
👉@BookPython

Как за 2 года стать продакт-менеджером с реальными кейсами в портфолио? 🤔 Чтобы создавать классные цифровые продукты не обяз
Как за 2 года стать продакт-менеджером с реальными кейсами в портфолио? 🤔 Чтобы создавать классные цифровые продукты не обязательно иметь  техническое образование. Продакт-менеджер анализирует рынок и аудиторию,  создаёт MVP и проводит тесты, разбирается в юнит-экономике и умеет доносить ценность продукта. Освоить необходимые компетенции, чтобы управлять продуктовой командой,  можно в магистратуре Нетологии и РАНХиГС «Управление ИТ-продуктом». 3 июня пройдёт день открытых дверей,  на котором вы познакомитесь с программой обучения и узнаете:  ◾ где работают менеджеры цифровых продуктов и какие задачи решают; ◾ какие навыки ценят работодатели и какие карьерные треки есть в профессии; ◾ как магистратура помогает в развитии карьеры. А ещё сможете задать вопросы академическому руководителю программы. Встреча будет полезна всем, кто задумывается о получении диплома магистра  и хочет развиваться в одной из самых востребованных профессий в IT. 🔗 Присоединяйтесь:  https://tglink.io/93ce51d95631?erid=2W5zFHgNoX6 

Оператор in можно использовать с генераторами: x in g. Python будет итерировать g, пока x не найдётся или генератор не исчерпается.

>>> def g():
...     print(1)
...     yield 1
...     print(2)
...     yield 2
...     print(3)
...     yield 3
...
>>> 2 in g()
1
2
True
Однако range() делает для вас больше. В нём переопределён магический метод __contains__, который позволяет оператору in работать с сложностью O(1):

In [1]: %timeit 10**20 in range(10**30)
375 ns ± 10.7 ns per loop
Учтите, что это не работает для функции xrange() в Python 2. 👉@BookPython

Класс объекта доступен через атрибут __class__:

>>> [1, 2].__class__
<class 'list'>
Однако более привычный способ получить класс — использовать функцию type. Это также единственный способ, который работает для классов старого стиля.

>>> type([1, 2])
<class 'list'>
Кроме того, если вы хотите проверить, является ли некоторый объект экземпляром данного класса, следует использовать isinstance вместо прямого сравнения:

>>> class A:
...     pass
...
>>> class B(A):
...     pass
...
>>> type(B())
<class '__main__.B'>
>>> isinstance(B(), A)
True
👉@BookPython