__enter__ и __exit__ — контекстные менеджеры в Python
Эти два метода — основа для создания контекстных менеджеров, которые помогают управлять ресурсами, например, файлами или соединениями с базой данных. Они гарантируют, что ресурсы будут освобождены после использования, даже если в процессе работы возникнет ошибка.
Метод
Результат:
Таким образом, контекстные менеджеры делают код более чистым и безопасным, заботясь о ресурсоемких операциях автоматически.
Эти два метода — основа для создания контекстных менеджеров, которые помогают управлять ресурсами, например, файлами или соединениями с базой данных. Они гарантируют, что ресурсы будут освобождены после использования, даже если в процессе работы возникнет ошибка.
Метод
__enter__ выполняется при входе в блок with, а __exit__ — при выходе из него. Это позволяет не только управлять ресурсами, но и логировать или выполнять дополнительные действия. Например, можно вывести сообщения при входе и выходе из блока:class MyContextManager:
def __enter__(self):
print("Входим в блок with")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("Выходим из блока with")
with MyContextManager():
print("Внутри блока with")
Результат:
Входим в блок with
Внутри блока with
Выходим из блока with
Таким образом, контекстные менеджеры делают код более чистым и безопасным, заботясь о ресурсоемких операциях автоматически.
Python онлайн компилятор
Менеджеры контекста в Python с оператором with: примеры создание
Оператор Python with обрабатывает открытие и закрытие любых ресурсов автоматически. Создание собственных менеджеров контекста.
👍1
Улучшенный трейсинг ошибок
Одна из частых проблем новичков при отладке программы — это трудности с интерпретацией трейсбека (описания ошибки), что затрудняет выявление причины проблемы.
Теперь для указания на конкретный объект, который вызвал ошибку, используется строка с несколькими символами ^ (циркумфлекс). В приведённом сниппете мы пытаемся разделить на ноль, что, естественно, приводит к ошибке.
Одна из частых проблем новичков при отладке программы — это трудности с интерпретацией трейсбека (описания ошибки), что затрудняет выявление причины проблемы.
Теперь для указания на конкретный объект, который вызвал ошибку, используется строка с несколькими символами ^ (циркумфлекс). В приведённом сниппете мы пытаемся разделить на ноль, что, естественно, приводит к ошибке.
👍2
Телеграмм бот-админ
При использовании команды
Итак с помощью некоторой команды, в данном примере /post можно публиковать новости в боте, например:
* важные объявления
* новости
* технические работы/неполадки
* может быть когда то в далеком будующем рекламу)
Когда новый пользователь начинает чат с ботом, его ID добавляется в список
При использовании команды
/post, бот отправляет сообщение, указанное после команды, всем пользователям, чьи ID хранятся в списке joinedUsers.Итак с помощью некоторой команды, в данном примере /post можно публиковать новости в боте, например:
* важные объявления
* новости
* технические работы/неполадки
* может быть когда то в далеком будующем рекламу)
Когда новый пользователь начинает чат с ботом, его ID добавляется в список
joinedUsers, позволяя боту отправлять ему сообщения в будущем.😭1
Автоматизация отправки электронной почты
Автоматическая отправка email-сообщений может быть полезной в самых разных задачах, от уведомлений до отчетности. Вот пример, как отправить письмо с помощью библиотеки
Теперь вы можете автоматизировать процессы отправки уведомлений или отчетов
Автоматическая отправка email-сообщений может быть полезной в самых разных задачах, от уведомлений до отчетности. Вот пример, как отправить письмо с помощью библиотеки
smtplib в Python:import smtplib
from email.mime.text import MIMEText
# Настройки
sender_email = 'youremail@example.com'
receiver_email = 'receiver@example.com'
password = 'yourpassword'
# Создание письма
msg = MIMEText('Текст вашего сообщения')
msg['Subject'] = 'Тема письма'
msg['From'] = sender_email
msg['To'] = receiver_email
# Отправка письма
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, msg.as_string())
print("Письмо отправлено!")
Теперь вы можете автоматизировать процессы отправки уведомлений или отчетов
👍5
Экономия памяти с помощью __slots__
Когда вы работаете с классами, создающими множество экземпляров, возможно, замечали, что программа может внезапно начать использовать много памяти. Это связано с тем, что Python хранит атрибуты объектов в словарях. Такая структура данных удобна для быстрого доступа, но она не самая эффективная с точки зрения использования памяти. Для большинства задач это не критично, однако если ваша программа начинает "жадно" потреблять память, стоит попробовать использовать механизм slots.
Вместо того чтобы хранить атрибуты объектов в словаре, slots позволяет создать фиксированный набор атрибутов, что значительно снижает потребление памяти. Особенно полезно в ситуациях, когда вам нужно создать большое количество однотипных объектов.
Маленький лайфхак: использование slots может значительно улучшить производительность при обработке миллионов объектов, так что стоит учитывать эту возможность для оптимизации.
Когда вы работаете с классами, создающими множество экземпляров, возможно, замечали, что программа может внезапно начать использовать много памяти. Это связано с тем, что Python хранит атрибуты объектов в словарях. Такая структура данных удобна для быстрого доступа, но она не самая эффективная с точки зрения использования памяти. Для большинства задач это не критично, однако если ваша программа начинает "жадно" потреблять память, стоит попробовать использовать механизм slots.
Вместо того чтобы хранить атрибуты объектов в словаре, slots позволяет создать фиксированный набор атрибутов, что значительно снижает потребление памяти. Особенно полезно в ситуациях, когда вам нужно создать большое количество однотипных объектов.
Маленький лайфхак: использование slots может значительно улучшить производительность при обработке миллионов объектов, так что стоит учитывать эту возможность для оптимизации.
👍1
Простое создание графиков с Matplotlib
Модуль
С помощью
Модуль
matplotlib позволяет легко строить графики на Python. Вот пример того, как можно построить график зависимости синуса от угла:import matplotlib.pyplot as plt
import numpy as np
# Данные
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
# Построение графика
plt.plot(x, y)
plt.title('График синуса')
plt.xlabel('Угол (радианы)')
plt.ylabel('Значение синуса')
# Отображение графика
plt.show()
С помощью
matplotlib можно создавать не только простые графики, но и сложные визуализации для анализа данных.👍6
Сохранение данных в формате CSV
Если вам нужно работать с табличными данными, сохранение и чтение CSV-файлов с помощью Python — отличный способ. Пример записи данных в CSV:
Это простой способ сохранить структурированные данные и затем работать с ними.
Если вам нужно работать с табличными данными, сохранение и чтение CSV-файлов с помощью Python — отличный способ. Пример записи данных в CSV:
import csv
# Данные для записи
data = [['Имя', 'Возраст', 'Город'],
['Иван', 25, 'Москва'],
['Мария', 30, 'Санкт-Петербург']]
# Запись в файл
with open('data.csv', mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)
print("Данные сохранены в data.csv!")
Это простой способ сохранить структурированные данные и затем работать с ними.
👍5
Преобразование текста в речь с использованием gTTS
Библиотека
Теперь ваш текст может быть озвучен и сохранен в аудиофайл. Можно использовать это для создания голосовых уведомлений или обучающих материалов
Библиотека
gTTS позволяет легко преобразовывать текст в речь. Вот как можно создать аудиофайл с голосом, читающим текст:from gtts import gTTS
# Текст, который хотим озвучить
text = "Привет! Это тест преобразования текста в речь."
# Создание аудио
tts = gTTS(text=text, lang='ru')
tts.save("speech.mp3")
print("Аудиофайл сохранен как speech.mp3!")
Теперь ваш текст может быть озвучен и сохранен в аудиофайл. Можно использовать это для создания голосовых уведомлений или обучающих материалов
👍6
Упрощение создания операторов сравнения с помощью `functools.total_ordering`
Когда вам нужно реализовать операторы сравнения для объектов класса, можно значительно упростить задачу с помощью декоратора
Декоратор
Когда вам нужно реализовать операторы сравнения для объектов класса, можно значительно упростить задачу с помощью декоратора
functools.total_ordering. Вместо того чтобы вручную реализовывать все операторы (такие как <=, >, >=, и т.д.), достаточно определить только два — __lt__ (меньше) и __eq__ (равно).Декоратор
total_ordering возьмёт эти два оператора и автоматически сгенерирует остальные, что сэкономит вам время и избавит от повторяющегося кода. Это особенно полезно, когда сравнение объектов важно, но вы не хотите вручную прописывать каждый оператор сравнения.IceCream
В этом примере кода вывод
IceCream — это библиотека, которая предоставляет простой и эффективный способ отладки кода. Вместо того чтобы использовать функцию print() для отладки, вы можете использовать функцию ic() из библиотеки IceCream, которая позволяет вам инспектировать переменные, выражения и выполнение программы с помощью одного простого вызова функции.В этом примере кода вывод
ic| указывает на то, что это вывод от IceCream, а result: 6 — имя переменной и ее значение.IceCream может быть использован в любом месте, где требуется отладка кода: веб-разработка, научные вычисления, анализ данных и т.д.👍6
This media is not supported in your browser
VIEW IN TELEGRAM
😮 92% подписчиков этих каналов не просто мечтатели, а реальные python-программисты, которые каждый день пишут код для реальных проектов!
Вот эти каналы, где реально полезная инфа на каждый день:
👩💻 Python — каждый день новые знания для кодера любого уровня
👩💻 Backend — мастхев канал для бекендера
👩💻 Code Tests — идеальные тесты для проверки знаний
🔒Сделали бесплатный вход только на 48 часов, успей залететь!
Вот эти каналы, где реально полезная инфа на каждый день:
👩💻 Python — каждый день новые знания для кодера любого уровня
👩💻 Backend — мастхев канал для бекендера
👩💻 Code Tests — идеальные тесты для проверки знаний
🔒Сделали бесплатный вход только на 48 часов, успей залететь!
❤1
Метод `__missing__` для работы с отсутствующими ключами в словарях
Если вы создаёте собственный тип данных, основанный на словарях, полезно использовать метод
При переопределении этого метода, вы получаете полный контроль над тем, что происходит в случае отсутствия ключа, вместо того чтобы полагаться на стандартное поведение, например, выброс исключения
Если вы создаёте собственный тип данных, основанный на словарях, полезно использовать метод
__missing__. Этот метод позволяет задать поведение, которое будет выполняться, когда запрашиваемый ключ отсутствует в словаре. Например, можно вернуть значение по умолчанию или вызвать ошибку, если ключ не найден.При переопределении этого метода, вы получаете полный контроль над тем, что происходит в случае отсутствия ключа, вместо того чтобы полагаться на стандартное поведение, например, выброс исключения
KeyError.👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Vibe Draw — простой и удобный инструмент для 3D-моделирования
Vibe Draw — это интуитивно понятная программа для создания 3D-моделей, которая превращает ваши 2D-эскизы в полноценные 3D-объекты всего за один клик, используя возможности ИИ.
🔸 Рисуйте 2D-эскизы и мгновенно превращайте их в 3D-модели.
🔸 ИИ помогает оптимизировать и улучшать детали моделей.
🔸 Используйте текстовые подсказки для тонкой настройки и улучшения 3D-моделей.
🔸 Легко комбинируйте несколько моделей в 3D-пространстве для создания сцены.
🔸 Экспортируйте готовые модели в формат .glTF для дальнейшей работы в других приложениях.
Благодаря поддержке Docker и экспорту в .glTF, Vibe Draw идеально подходит для интеграции в ваши рабочие процессы. Удобно, быстро и эффективно
GitHub
Vibe Draw — это интуитивно понятная программа для создания 3D-моделей, которая превращает ваши 2D-эскизы в полноценные 3D-объекты всего за один клик, используя возможности ИИ.
🔸 Рисуйте 2D-эскизы и мгновенно превращайте их в 3D-модели.
🔸 ИИ помогает оптимизировать и улучшать детали моделей.
🔸 Используйте текстовые подсказки для тонкой настройки и улучшения 3D-моделей.
🔸 Легко комбинируйте несколько моделей в 3D-пространстве для создания сцены.
🔸 Экспортируйте готовые модели в формат .glTF для дальнейшей работы в других приложениях.
Благодаря поддержке Docker и экспорту в .glTF, Vibe Draw идеально подходит для интеграции в ваши рабочие процессы. Удобно, быстро и эффективно
GitHub
🤔 Что такое стоимость владения (и почему это важно)?
Простыми словами, стоимость владения проектом (или TCO — total cost of ownership) — это сколько денег и ресурсов нужно, чтобы твой продукт не только жил, но и был полезен бизнесу.
И тут есть подвох: когда стоимость владения высокая, бизнес страдает, потому что деньги улетают в поддержку, баги, переписывание и разгребание хаоса вместо развития и новых фич. А если страдает бизнес, то страдаешь и ты, потому что вместо крутых задач приходится чинить старое легаси.
🔍 Что повышает стоимость проекта и почему это плохо для всех?
👉 Нечитаемый и грязный код
Это классика. Когда никто не понимает, что происходит в коде, каждая фича делается в разы дольше, а баги становятся кошмаром. В итоге бизнес получает фичи поздно, теряет клиентов и деньги.
👉 Слишком сложная архитектура (привет, переусложнённые микросервисы!)
Слишком много сервисов, сложные связи, запутанные процессы. Команда тратит время на выяснение отношений вместо написания кода. Менеджмент ждёт, бизнес теряет деньги.
👉 Отсутствие автоматизации
Если тесты, деплой и мониторинг делаются вручную, разработчики заняты рутинной работой, а не реальными задачами. Падает производительность, вырастает число ошибок — бизнес снова теряет.
👉 Большие технические долги и отказ от рефакторинга
Кажется, быстрее «залатать и забыть». На практике эти костыли превращаются в мины замедленного действия, которые потом больно взрываются на проде.
🛠️ Что разработчик может делать прямо сейчас, чтобы снизить стоимость владения?
✅ Регулярно рефакторить код
Держи код чистым. Рефакторинг — не роскошь, а необходимость. Чем чище код, тем быстрее идут задачи.
✅ Автоматизируй всё, что можно автоматизировать (без перебора)
Юнит-тесты, CI/CD, мониторинг, алерты — автоматизация высвобождает время для важных задач и снижает шанс ошибок на проде. Забудь о ручном деплое и тестировании. CI/CD pipeline, автоматизированные тесты и алерты экономят кучу времени и нервов.
✅ Выбирай осознанно архитектуру
Не прыгай сразу в микросервисы, если этого не требует задача. Выбирай решения, исходя из потребностей бизнеса и простоты поддержки, а не только из-за трендов.
✅ Документируй осознанно
Пиши кратко, чётко и по делу. Документация должна помогать команде быстро включиться в проект, а не создавать дополнительный хаос.
💡 Вывод:
Высокая стоимость владения проектом ударяет не только по карману бизнеса, но и по твоим собственным задачам. Чем выше TCO, тем меньше у команды времени на что-то новое и интересное. Уменьшая технический долг и автоматизируя процессы, ты не только помогаешь компании зарабатывать, но и делаешь жизнь проще лично себе и своей команде.
🔥 А вот как это донести до бизнеса и менеджеров - тема отдельного поста. Поделитесь идеями, потому что это, обычно, одна из самых сложных проблем.
Реклама. Лукьянов П.А. ИНН 780159889217. erid: 2W5zFGXczQG
Простыми словами, стоимость владения проектом (или TCO — total cost of ownership) — это сколько денег и ресурсов нужно, чтобы твой продукт не только жил, но и был полезен бизнесу.
И тут есть подвох: когда стоимость владения высокая, бизнес страдает, потому что деньги улетают в поддержку, баги, переписывание и разгребание хаоса вместо развития и новых фич. А если страдает бизнес, то страдаешь и ты, потому что вместо крутых задач приходится чинить старое легаси.
🔍 Что повышает стоимость проекта и почему это плохо для всех?
👉 Нечитаемый и грязный код
Это классика. Когда никто не понимает, что происходит в коде, каждая фича делается в разы дольше, а баги становятся кошмаром. В итоге бизнес получает фичи поздно, теряет клиентов и деньги.
👉 Слишком сложная архитектура (привет, переусложнённые микросервисы!)
Слишком много сервисов, сложные связи, запутанные процессы. Команда тратит время на выяснение отношений вместо написания кода. Менеджмент ждёт, бизнес теряет деньги.
👉 Отсутствие автоматизации
Если тесты, деплой и мониторинг делаются вручную, разработчики заняты рутинной работой, а не реальными задачами. Падает производительность, вырастает число ошибок — бизнес снова теряет.
👉 Большие технические долги и отказ от рефакторинга
Кажется, быстрее «залатать и забыть». На практике эти костыли превращаются в мины замедленного действия, которые потом больно взрываются на проде.
🛠️ Что разработчик может делать прямо сейчас, чтобы снизить стоимость владения?
✅ Регулярно рефакторить код
Держи код чистым. Рефакторинг — не роскошь, а необходимость. Чем чище код, тем быстрее идут задачи.
✅ Автоматизируй всё, что можно автоматизировать (без перебора)
Юнит-тесты, CI/CD, мониторинг, алерты — автоматизация высвобождает время для важных задач и снижает шанс ошибок на проде. Забудь о ручном деплое и тестировании. CI/CD pipeline, автоматизированные тесты и алерты экономят кучу времени и нервов.
✅ Выбирай осознанно архитектуру
Не прыгай сразу в микросервисы, если этого не требует задача. Выбирай решения, исходя из потребностей бизнеса и простоты поддержки, а не только из-за трендов.
✅ Документируй осознанно
Пиши кратко, чётко и по делу. Документация должна помогать команде быстро включиться в проект, а не создавать дополнительный хаос.
💡 Вывод:
Высокая стоимость владения проектом ударяет не только по карману бизнеса, но и по твоим собственным задачам. Чем выше TCO, тем меньше у команды времени на что-то новое и интересное. Уменьшая технический долг и автоматизируя процессы, ты не только помогаешь компании зарабатывать, но и делаешь жизнь проще лично себе и своей команде.
🔥 А вот как это донести до бизнеса и менеджеров - тема отдельного поста. Поделитесь идеями, потому что это, обычно, одна из самых сложных проблем.
Реклама. Лукьянов П.А. ИНН 780159889217. erid: 2W5zFGXczQG
Использование `dataclasses` для автоматизации создания классов
Python 3.7 и выше предлагает удобный способ для создания классов с помощью модуля
Пример:
🔥 Бонус:
Python 3.7 и выше предлагает удобный способ для создания классов с помощью модуля
dataclasses. Этот инструмент позволяет вам быстро создавать классы, автоматически генерируя методы __init__, __repr__, __eq__, и другие. Сэкономьте время и код!Пример:
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float
quantity: int
product = Product('Apple', 1.5, 10)
print(product) # Product(name='Apple', price=1.5, quantity=10)
🔥 Бонус:
dataclasses упрощают работу с неизменяемыми объектами и позволяют использовать frozen=True, чтобы сделать объект неизменяемым после создания:@dataclass(frozen=True)
class ImmutableProduct:
name: str
price: float
# product.name = 'Orange' # Это вызовет ошибку!
Как использовать `contextlib` для работы с контекстными менеджерами
Работа с файлами или базами данных часто требует корректного управления ресурсами. В Python это удобно делать с помощью контекстных менеджеров. Модуль
Пример:
💡 Совет: Вместо использования
Работа с файлами или базами данных часто требует корректного управления ресурсами. В Python это удобно делать с помощью контекстных менеджеров. Модуль
contextlib упрощает создание таких менеджеров без необходимости писать громоздкий код.Пример:
from contextlib import contextmanager
@contextmanager
def my_open_file(filename, mode):
try:
file = open(filename, mode)
yield file
finally:
file.close()
with my_open_file('test.txt', 'w') as f:
f.write('Hello, world!')
💡 Совет: Вместо использования
try/finally, contextlib позволяет красиво и без лишних усилий управлять ресурсами.Оператор
Важно помнить, что
is в Python используется для проверки, ссылаются ли два операнда на один и тот же объект в памяти, то есть, являются ли они фактически одним и тем же объектом.Важно помнить, что
is проверяет не равенство значений, а именно идентичность объектов в памяти. Для проверки значений обычно используется оператор ==Использование генераторов для обработки больших данных
Если вам нужно обработать большой объём данных, но не хотите загружать всё в память, используйте генераторы. Они позволяют работать с данными по одному элементу за раз, экономя память.
Пример:
💡 Почему это полезно: генераторы могут работать с огромными данными, не загружая их полностью в память, что особенно важно для обработки больших файлов или потоков данных.
Если вам нужно обработать большой объём данных, но не хотите загружать всё в память, используйте генераторы. Они позволяют работать с данными по одному элементу за раз, экономя память.
Пример:
def my_generator():
for i in range(1000000):
yield i
gen = my_generator()
# Выводим первые 5 чисел
for _ in range(5):
print(next(gen))
💡 Почему это полезно: генераторы могут работать с огромными данными, не загружая их полностью в память, что особенно важно для обработки больших файлов или потоков данных.
В чём разница между типами list и tuple?
В Python, список (list) и кортеж (tuple) являются двумя различными типами данных, которые предоставляют набор элементов в определенном порядке. Основная разница между ними заключается в том, что список может быть изменен (мутабельный тип), а кортеж является неизменяемым (иммутабельным типом).
То есть, после создания кортежа, вы не можете изменять его содержимое, добавлять или удалять элементы. Это делает кортежи более эффективными по памяти и дает гарантию того, что их содержимое не будет изменено случайно в коде. В то время как список может быть изменен, что было бы очень полезно, если вам нужна коллекция элементов, которые вы можете изменять по ходу выполнения кода.
В Python, список (list) и кортеж (tuple) являются двумя различными типами данных, которые предоставляют набор элементов в определенном порядке. Основная разница между ними заключается в том, что список может быть изменен (мутабельный тип), а кортеж является неизменяемым (иммутабельным типом).
То есть, после создания кортежа, вы не можете изменять его содержимое, добавлять или удалять элементы. Это делает кортежи более эффективными по памяти и дает гарантию того, что их содержимое не будет изменено случайно в коде. В то время как список может быть изменен, что было бы очень полезно, если вам нужна коллекция элементов, которые вы можете изменять по ходу выполнения кода.
👍1