Pythoner
رفتن به کانال در Telegram
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode
نمایش بیشتر6 621
مشترکین
-124 ساعت
-97 روز
-3530 روز
آرشیو پست ها
6 622
✈️Менеджер контекста позволяет выделять и освобождать ресурсы строго по необходимости. В Python за это отвечает блок с оператором with.
[async] with <функция> as <переменная>:
# до и после гарантированно срабатывают события входа в блок with и выхода из него.
__exit__ срабатывает в момент выхода из блока, в том числе по причине возникновения исключения. В этом случае в метод будут переданы exc_class, exc_instance и traceback.
➡️Пример:
with open('file.txt') as f:
data = f.read()
process_data(data)
Файл гарантированно закроется.
➡️Реализация своего контекстного менеджера на основе класса:
class Printable:
def __enter__(self):
print('enter')
def __exit__(self, type, value, traceback):
print('exit')
➡️Реализация своего контекстного менеджера с использованием встроенной библиотеки contextlib:
from contextlib import contextmanager
@contextmanager
def printable():
print('enter')
try:
yield
finally:
print('exit')
💡Контекстные менеджеры также можно использовать для временной замены параметров, переменных окружения, управления транзакциями в БД и других задач, где важен контроль за ресурсами.
🐍 Pythoner6 622
Хочешь учиться программировать?
🎓 Осваивай Python в Telegram-боте — всё обучение прямо в чате.
Не нужно переходить на сайты — начни программировать здесь и сейчас!
Попробовать
#реклама 16+
О рекламодателе
6 622
👀Включите логирование медленных запросов, задав параметр
log_min_duration_statement в конфигурации. Это позволит записывать все запросы, выполняющиеся дольше указанного времени.
👀Используйте команды EXPLAIN или EXPLAIN ANALYZE для просмотра плана выполнения запроса и оценки, где возникают задержки.
👀Проверьте, правильно ли настроены индексы для ускорения работы запросов, и при необходимости оптимизируйте сам запрос.
👀Анализируйте статистику запросов с помощью расширения pg_stat_statements, которое собирает информацию о времени выполнения и частоте запросов.
🐍 Pythoner6 622
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
6 622
🤔Разбор
str.isupper() -> bool
Возвращает флаг, указывающий не то, содержит ли строка символы только верхнего регистра.
Аналогично с islower, только для нижнего регистра.
Метод upper() возращает копию строки, в которой все буквы сконвертированы к большому регистру (заглавные буквы). Все остальные символы остаются неизмененными.
Аналогично с lower(), только к нижнему регистру.
В итоге получаем False == False, THIS IS NOW! == this is now! —> True, False
🐍 Pythoner
6 622
big tech night — «Ночь музеев» в мире IT
Экскурсии по офисам крупных IT-компаний, доклады экспертов, нетворкинг — это только часть того, что ждёт вас на big tech night.
12 сентября топовые компании впервые одновременно откроют двери ночью и покажут, где рождаются технологии. Приходите изнутри посмотреть на новейшие разработки и фичи — всё то, чего не видно при свете дня.
Ивент пройдёт в Москве на площадках Яндекса, Сбера, X5, Т-Банка и Lamoda. Каждая компания-организатор готовит свои сюрпризы: иммерсивные экскурсии, IT-стендап, поэтический AI-слэм, Robo-зона с роботами-официантами и пиццамейкерами, Лаборатория софт-скилов и многое другое.
Успевайте зарегистрироваться — количество мест ограничено!
Зарегистрироваться
#реклама 16+
bigtechnight.ru
О рекламодателе
6 622
✈️Зависимость (dependency) — это внешний объект, который нужен какому-то компоненту для работы. Внедрение зависимостей (Dependency Injection) — это способ передать нужные зависимости извне, а не создавать их внутри.
➡️Простой пример:
class Engine:
def start(self):
print("Engine started")
class Car:
def __init__(self, engine: Engine):
self.engine = engine
def run(self):
self.engine.start()
⬆️Здесь Car не создает Engine внутри себя. Внедрение происходит через конструктор.
engine = Engine()
car = Car(engine) # <-- внедрили зависимость
car.run()
➡️Как реализовать вручную в Python?
В Python DI часто реализуется через:
1. Конструктор (constructor injection):
class Service:
def __init__(self, db_client):
self.db = db_client
2. Setter-инъекция (через метод):
class Service:
def set_db(self, db_client):
self.db = db_client
3. Передача через параметры функции:
def handler(service: Service):
return service.do_stuff()
➡️Зачем это нужно?
- Легко тестировать (можно подменить зависимости моками)
- Повышает гибкость (меняем реализацию зависимости)
- Разделяет ответственность (класс делает только то, что должен)
🐍 Pythoner6 622
От сисадмина до DevOps'а
Рост карьеры и зарплаты уже сегодня вместе со Слёрмом! В канале полезные советы, бесплатные гайды и скидки на курсы.
Подписаться
#реклама 16+
О рекламодателе
6 622
✈️Основное различие между этими двумя методами состоит в том, что __new__ обрабатывает создание объекта, а __init__ обрабатывает его инициализацию.
__new__ вызывается автоматически при вызове имени класса (при создании экземпляра), тогда как init вызывается каждый раз, когда экземпляр класса возвращается __new__, передавая возвращаемый экземпляр в __init__ в качестве параметра self, поэтому даже если вы сохранили экземпляр где-нибудь глобально/статически и возвращали его каждый раз из __new__, для него все-равно будет каждый раз вызываться __init__.
Пример:
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
print("Создание объекта")
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
print("Инициализация объекта")
a = Singleton()
b = Singleton()
⬆️Вывод:
Создание объекта Инициализация объекта Инициализация объекта
__new__ сработал один раз — объект создан.
__init__ вызвался дважды — каждый раз при создании экземпляра.
🐍 Pythoner6 622
+3
Хотите в IT, но код видели только в «Матрице»?
В июле школа программирования «Хекслет» дарит комфортные условия на старт обучения в IT для новичков.
Python, Java, Frontend, PHP, Data Analytics со скидкой 15% от цены— выбирайте направление, а мы поддержим ваш первый шаг.
Учим с нуля, доводим до работы. Более 4500 наших выпускников уже в профессии. Вас ждет:
✅ есть бесплатные курсы по основам
✅ помощь наставников — практикующих разработчиков;
✅ участие в коммерческих проектах;
✅ гарантированная стажировка;
✅ беспроцентная рассрочка.
Все это по специальным ценам, чтобы «не ждать понедельника».
Перейти на сайт
#реклама 16+
ru.hexlet.io
О рекламодателе
6 622
✈️Основное различие между этими двумя методами состоит в том, что __new__ обрабатывает создание объекта, а __init__ обрабатывает его инициализацию.
__new__ вызывается автоматически при вызове имени класса (при создании экземпляра), тогда как init вызывается каждый раз, когда экземпляр класса возвращается __new__, передавая возвращаемый экземпляр в __init__ в качестве параметра self, поэтому даже если вы сохранили экземпляр где-нибудь глобально/статически и возвращали его каждый раз из __new__, для него все-равно будет каждый раз вызываться __init__.
Пример:
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
print("Создание объекта")
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
print("Инициализация объекта")
a = Singleton()
b = Singleton()
⬆️Вывод:
Создание объекта Инициализация объекта Инициализация объекта
6 622
✈️Модульные тесты (или unit-тесты) — это автоматические тесты, которые проверяют работу отдельных функций, методов или классов в изоляции от остальной программы.
➡️Цель модульного теста — убедиться, что маленький блок кода работает правильно при разных входных данных:
# Функция, которую будем тестировать
def add(a, b):
return a + b
Теперь напишем модульный тест с использованием стандартного модуля unittest:
import unittest
class TestAddFunction(unittest.TestCase):
def test_add_positive_numbers(self):
self.assertEqual(add(2, 3), 5)
def test_add_negative_numbers(self):
self.assertEqual(add(-1, -2), -3)
def test_add_zero(self):
self.assertEqual(add(0, 5), 5)
if __name__ == '__main__':
unittest.main()
➡️Зачем нужны модульные тесты:
- Находят ошибки в логике функции.
- Упрощают рефакторинг (можно смело менять код — тесты покажут, что сломалось).
- Помогают при разработке: можно быстро проверить, работает ли новый код.
- Улучшают структуру кода — приходится писать функции так, чтобы их легко тестировать.
🐍 Pythoner6 622
✈️Функция .strip() в Python по умолчанию удаляет пробелы в начале и конце строки. Это может быть особенно полезно при работе с данными, которые могут содержать случайные пробелы, которые могут помешать анализу данных или программированию. Например, строка ' Привет, мир! ' станет 'Привет, мир!' после использования .strip().
s = ' Привет, мир! '
print(s.strip()) # Выведет: 'Привет, мир!'
➡️.strip() с аргументами
В дополнение к удалению пробелов, .strip() также может быть использован для удаления определенных символов из строки, передав их в качестве аргумента. Например, если мы хотим удалить определенный символ, такой как '#', из строки, мы можем это сделать, вызвав .strip('#'). Это удалит все экземпляры '#' из начала и конца строки.
s = '###Привет, мир!###'
print(s.strip('#')) # Выведет: 'Привет, мир!'
➡️.lstrip() и .rstrip()
Python также предлагает две вариации функции .strip(), которые являются .lstrip() и .rstrip(). Эти функции работают так же, как .strip(), но .lstrip() удаляет символы только с левой стороны строки, а .rstrip() - только с правой стороны.
s = '###Привет, мир!###'
print(s.lstrip('#')) # Выведет: 'Привет, мир!###'
print(s.rstrip('#')) # Выведет: '###Привет, мир!'
🐍 Pythoner6 622
Авторский канал посвященый языку Python и игровому движку для 2D и 3D игр - Ursina Engine . Подробные гайды и примеры кода.👨💻. Заходи и узнаешь , как написать игру на Python без сложностей!!!😉
А также автор канала запустил обучающий курс по Ursina Engine.
Все необходимые ссылки Вы найдёте на канале!
Присоединяйся к нашему сообществу!!!
