✈️Конструкция raise используется для генерации исключений. Когда в коде происходит что-то непредвиденное или некорректное — можно сгенерировать исключение командой raise.
➡️Основные моменты конструкции raise:
—Возбуждение существующих исключений: Вы можете использовать raise
без каких-либо параметров в блоке except
, чтобы повторно вызвать текущее исключение.
—Создание собственных исключений: Вы можете создать или вызвать собственное исключение, создав объект исключения и передав его в raise
.
➡️Пример использования raise:
def divide(a, b):
if b == 0:
raise ValueError("Деление на ноль невозможно.")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(f"Ошибка: {e}")
divide
вызывает исключение ValueError
, если второй аргумент равен нулю. В блоке try
мы пытаемся выполнить деление, и если возникает ошибка, мы перехватываем её и выводим сообщение об ошибке.
Читать полностью…
✈️Django ORM (Object-Relational Mapping) — это мощный инструмент, который позволяет разработчикам взаимодействовать с базой данных, используя объекты Python.
➡️Создание моделей
Одним из основных аспектов работы с Django ORM является создание моделей. Модель — это класс Python, который описывает структуру таблицы в базе данных. Django ORM автоматически создает таблицу в соответствии с заданной моделью. Модели могут включать поля, которые соответствуют столбцам таблицы, а также методы и связи с другими моделями. Определение модели в Django ORM интуитивно понятно и упрощает процесс разработки.
Вот пример создания модели в Django ORM:
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=5, decimal_places=2)
description = models.TextField()
# Выборка всех объектов модели
products = Product.objects.all()
# Фильтрация объектов по условию
cheap_products = Product.objects.filter(price__lt=10)
# Сортировка объектов
sorted_products = Product.objects.order_by('-price')
# Агрегирование данных
total_price = Product.objects.aggregate(Sum('price'))
Почему Python востребован среди DevOps-инженеров?
Мир активно движется к максимальной автоматизации всего, что только можно. И чтобы развивать себя как инженера, уметь программировать необходимо. Python — это мастхев.
👉 У Python понятный синтаксис, разрабатывать на нём быстро.
👉 В нём есть куча библиотек.
👉 Python отлично справляется с автоматизацией задач, работой с API, управлением инфраструктурой (например, через Ansible), а также с написанием скриптов для CI/CD пайплайнов и мониторинга.
Всё это делает его удобным для использования в сложных DevOps-проектах.
Узнать, насколько хорошо вы владеете Python, можно в нашем тесте. Переходите в бота и отвечайте на 5 вопросов🔗
#реклама
О рекламодателе
erid: LjN8KAkrn
Есть такой один интересный пакет JMESpath, который позволяет декларативно указать, как извлекать элементы из документа JSON.
➡️Основные примеры использования:
import jmespath
jmespath.search('foo.bar', {'foo': {'bar': 'baz'}})
# output: 'baz'
jmespath.search('foo.*.name', {'foo': {'bar': {'name': 'one'}, 'baz':
{'name': 'two'}}})
# output: ['one', 'two']
➡️NamedTuple
NamedTuple - это подтип кортежа, который позволяет объявлять собственные именованные типы, которые могут использоваться в качестве структуры данных. Он предоставляет возможность определить тип данных с помощью именованных полей. Каждое поле имеет свой собственный тип данных. Это может быть полезно в случаях, когда вам нужно создать объекты с определенными свойствами.
К примеру, если вы создаете объекты, представляющие собой записи в базе данных, вы можете использовать NamedTuple, чтобы создать тип данных, содержащий поля, соответствующие полям в таблице.
from collections import namedtupleЧитать полностью…
Person = namedtuple('Person', ['name', 'age'])
person1 = Person(name='John', age=30)
person2 = Person(name='Jane', age=25)
print(person1.name) # John
print(person2.age) # 25
➡️"Чистая" функция - это функция, которая при выполнении одного и того же входного значения всегда возвращает одинаковый результат и не имеет побочных эффектов.
➡️Пример чистой функции
Давайте рассмотрим пример простой чистой функции на языке Python. Предположим, у нас есть функция double
, которая удваивает переданное число:
def double(number):
return number * 2
my_list = []
def add_to_list(value):
my_list.append(value)
✈️Модуль timeit в Python используется для измерения времени выполнения вашего кода. У него есть как интерфейс командной строки, так и вызываемый интерфейс. Модуль выполнит оператор определенное количество раз (по умолчанию - один миллион) и затем вернет время, затраченное на выполнение. Вот простой пример:
import timeit
print(timeit.timeit('"-".join(str(n) for n in range(100))', number=10000))
"-".join(str(n) for n in range(100))
10 000 раз и выведет затраченное на это время.import timeit
def my_function():
return "-".join(str(n) for n in range(100))
print(timeit.timeit(my_function, number=10000))
🎮Pyxel — это библиотека для создания ретро-игр на языке программирования Python. Она идеально подходит для разработчиков, которые хотят погрузиться в мир 8-битных игр, создавая собственные проекты с минимальными усилиями.
Почему Pyxel❔
➡️Простота использования
Одним из главных преимуществ Pyxel является её простота использования. Она предоставляет интуитивно понятный интерфейс и минимальный набор функций, необходимых для создания игр. Это позволяет сосредоточиться на творческом процессе, не отвлекаясь на сложные технические детали.
➡️Встроенные инструменты
Pyxel поставляется с набором встроенных инструментов, которые облегчают разработку игр. Среди них: редактор спрайтов, редактор звуков и редактор карт.
➡️Кроссплатформенность
Ещё одно важное преимущество Pyxel — это её кроссплатформенность. Библиотека поддерживает Windows, macOS и Linux, что позволяет разрабатывать игры на любой из этих платформ.
✈️itertools — Это удивительный инструмент, который помогает работать с итерациями (повторениями) в Python более эффективно.
➡️Основные функции itertools:
1. count(start, step)
: Генерирует бесконечную арифметическую прогрессию, начиная с start, с шагом step.
2. cycle(iterable)
: Бесконечно повторяет элементы из iterable.
3. chain(*iterables)
: Объединяет несколько итерируемых объектов в один последовательный поток.
4. zip_longest(*iterables, fillvalue=None)
:
Объединяет элементы из разных итерируемых объектов, даже если их длины различаются, то недостающее количество елментом заполнится заполнителем fillvalue.
➡️Пример использования:
import itertoolsЧитать полностью…
# Создаем бесконечную последовательность с шагом 2
counter = itertools.count(start=10, step=2)
for _ in range(5):
print(next(counter)) # Выведет числа: 10, 12, 14, 16, 18
# Объединяем несколько списков в один последовательный поток
letters = ['a', 'b', 'c']
numbers = [1, 2, 3]
combined = itertools.chain(letters, numbers)
print(list(combined)) # Выведет: ['a', 'b', 'c', 1, 2, 3]
❓Что такое Meta в классах Django?
Django использует метаклассы. А метаклассы — это классы, которые конструируют другие классы. Соответственно, когда Django конструирует наш класс, он делает это с помощью своего метакласса. Внутренний класс с названием Meta позволяет задать этому конструктору необходимые нам параметры.
🪅Например, мы можем перезаписать имя таблицы, используя db_table в классе Meta. А ещё изменить порядок полей нашей модели.
from django.db import modelsЧитать полностью…
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'product_table'
ordering = ['-created_at']
✈️В современном мире разработки программного обеспечения все больше и больше акцент делается на создании API (Application Programming Interface) для обмена данными между различными приложениями. Когда дело доходит до тестирования и отладки этих API, инструменты, такие как POSTMAN, становятся незаменимыми.
➡️Основные возможности POSTMAN
POSTMAN - это инструмент для тестирования и отладки API, который предоставляет разработчикам простой и удобный способ отправки HTTP-запросов и получения ответов. Он имеет интуитивно понятный пользовательский интерфейс, который позволяет легко создавать и отправлять запросы различных типов, таких как GET, POST, PUT и DELETE.
➡️POSTMAN также обладает возможностью автоматизации тестирования API. С помощью коллекций запросов и сценариев, вы можете создавать наборы тестовых сценариев и запускать их в автоматическом режиме. Это особенно полезно при разработке и поддержке сложных API, где необходимо проверить множество различных запросов и ответов.
➡️Описание функции help
Функция help в Python используется для получения справочной информации о встроенных функциях, методах, модулях, классах и объектах Python. Эта функция является очень полезным инструментом для изучения новых методов и библиотек, а также для получения помощи в решении проблем.
Чтобы использовать функцию help, просто вызовите ее и передайте объект, для которого вы хотите получить справочную информацию. Например, если вы хотите получить справочную информацию о функции print, вы можете вызвать функцию help следующим образом:
help(print)Читать полностью…
Это приведет к выводу документации о функции print в вашем интерпретаторе Python.
💩 Какова разница между методами getattr и getattribute?
Оба этих метода являются магическими.
🔘getattr
class Missing:
attr = 42
def getattr(self, name):
print(f"In getattr, asked for {name}")
return 73
m = Missing()
print(m.attr) # 42
print(m.xyz) # In getattr, asked for xyz; 73
getattribute
class Always:
attr = 42
def getattribute(self, name):
print(f"In getattribute, asked for {name}")
return 73
a = Always()
print(a.attr) # In getattribute, asked for attr; 73
print(a.xyz) # In getattribute, asked for xyz; 73
getattribute
— это метод, который управляет всеми запросами атрибутов, тогда как getattr
вызывается, когда getattribute
не находит атрибут.
Читать полностью…
🔎Объекты - это экземпляры классов, и классы являются шаблонами для создания объектов. Каждый объект имеет свои собственные атрибуты (переменные, данные) и методы (функции, действия), которые определяют его поведение и взаимодействие с другими объектами.
Например, если у нас есть класс "Автомобиль", мы можем создать несколько объектов этого класса, таких как "Машина1" и "Машина2". У каждого объекта будет свой набор атрибутов, таких как "марка", "модель" и методов, таких как "завести двигатель" или "передвинуться вперед".
➡️Преимущества использования объектов в Python
Во-первых, объектно-ориентированное программирование облегчает структурирование кода и делает его более логичным и понятным. Каждый объект отвечает за свои собственные данные и методы.
Во-вторых, объекты позволяют создавать сложные структуры данных и абстракции. Мы можем создавать классы, которые представляют реальные или воображаемые объекты, и определять, их взаимодействие друг с другом.
➡️Основы Unstructured
Библиотека предоставляет удобные методы для работы с различными типами данных. Например, для чтения текста из файла можно использовать следующий код:
from unstructured import Text
text_data = Text.from_file('example.txt')
print(text_data.content)
from unstructured import Text
text_data = Text('Это пример текста для токенизации.')
tokens = text_data.tokenize()
print(tokens)
💩 Какова разница между методами getattr и getattribute?
Оба этих метода являются магическими.
🔘getattr
class Missing:
attr = 42
def getattr(self, name):
print(f"In getattr, asked for {name}")
return 73
m = Missing()
print(m.attr) # 42
print(m.xyz) # In getattr, asked for xyz; 73
getattribute
class Always:
attr = 42
def getattribute(self, name):
print(f"In getattribute, asked for {name}")
return 73
a = Always()
print(a.attr) # In getattribute, asked for attr; 73
print(a.xyz) # In getattribute, asked for xyz; 73
getattribute
— это метод, который управляет всеми запросами атрибутов, тогда как getattr
вызывается, когда getattribute
не находит атрибут.
Читать полностью…
✈️Функция range() в Python - это важный инструмент для создания последовательности чисел. Хотя она часто используется в связке с циклом for, есть и другие способы, как можно использовать эту функцию.
➡️Использование range() в списковых включениях
Списковые включения - это мощный инструмент Python, который позволяет создавать списки в одну строку кода. Функция range() может быть использована в списковых включениях для создания списков, которые следуют определенной числовой последовательности. Например, [x for x in range(10)]
создаст список чисел от 0 до 9.
➡️Использование range() в генераторах
Генераторы в Python - это специальный тип итераторов, который позволяет генерировать элементы "на лету", экономя память. Функцию range() можно использовать в генераторах для создания последовательностей чисел. Например, (x for x in range(10))
создаст генератор, который производит числа от 0 до 9.
🐍Pythoner
➡️Что такое importlib?
Это встроенная библиотека Python, которая предоставляет интерфейс для механизма импорта. С ее помощью вы можете программно импортировать модули, перезагружать их и даже создавать свои собственные импортеры!
➡️Вот простой пример использования importlib:
import importlib
# Динамический импорт модуля
math = importlib.import_module('math')
# Использование импортированного модуля
print(math.pi) # Выводит 3.141592653589793
# Перезагрузка модуля
importlib.reload(math)
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы.
Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически.
➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения.
➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate
, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях.
➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty
, чтобы определить свои собственные изменения в базе данных.
Хотите стать востребованным Python-разработчиком? Пройдите курс от Hexlet!
Начните с основ и за 10 месяцев освоите один из самых популярных языков для бэкенда, научитесь создавать полноценные сайты и веб-приложения и реализовать внутреннюю логику работы программ на фреймворке Django.
🎁 🎃 Бонусы к Черной пятнице! Вас ждет специальное предложение - скидка до 81 000 ₽. на обучение и второй курс в подарок!
Вас ждут сотни упражнений, 4 проекта для портфолио на GitHub, а во время обучения вы также поучаствуете в Карьерном треке чтобы найти свою первую работу в IT.
Пройдите 5 бесплатных уроков и откройте для себя увлекательный процесс обучения. Поймите, насколько интересен и перспективен этот путь, и получите уникальную возможность продолжить обучение на полном курсе со скидкой!
Message_effect_id - это идентификатор, используемый в Telegram Bot API для определения конкретного визуального эффекта, который можно применить к сообщению.
➡️Основные характеристики message_effect_id:
Уникальность: Каждый эффект имеет свой уникальный числовой идентификатор.Формат: Идентификаторы представлены в виде строк, содержащих длинные числовые значения.Связь с эмодзи: Каждый message_effect_id соответствует определенному эмодзи, которое визуально представляет эффект.
➡️Примеры message_effect_id:
{
'🔥': "5104841245755180586",
'👍': "5107584321108051014",
'👎': "5104858069142078462",
'❤️': "5044134455711629726",
'🎉': "5046509860389126442",
'💩': "5046589136895476101"
}
✈️Метод subclasshook используется для определения, является ли один класс подклассом другого. Он вызывается при проверке isinstance()
и issubclass()
для определения отношения наследования между классами.
⬆️Этот метод позволяет настроить поведение этих функций для пользовательских классов.
➡️Пример:
class A:
def init(self, value):
self.value = value
class B:
def init(self, value):
self.value = value
def subclasshook(cls, subclass):
return (hasattr(subclass, 'value') and
callable(subclass.value) and
subclacc.value.name == 'print_value')
class C:
def init(self, value):
self.value = value
def print_value(self):
print(self.value)
a = A(5)
b = B(10)
c = C(15)
# Проверка
print(issubclass(C, B)) # True
print(issubclass(A, B)) # False
subclasshook
класса B
проверяет, есть ли у подкласса метод print_value
. Если да, то возвращает True
, что позволяет считать его подклассом B
.
Читать полностью…
🖥 В чем разница между итератором и генератором?
В Python и итераторы, и генераторы позволяют перебирать элементы коллекций, но работают немного по-разному.
🔘Итераторы — это объекты, которые реализуют методы iter()
и next()
. Метод iter()
возвращает сам итератор, а next()
— следующий элемент коллекции. Если элементы заканчиваются, next()
должен вызвать исключение StopIteration
. Итераторы позволяют явно перебирать элементы коллекции, не требуя, чтобы все элементы были доступны в памяти одновременно.
🔘Генераторы — это специальный способ реализации итераторов. Они создаются при помощи функций с ключевым словом yield
. Главное отличие генератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield
, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям.
➡️GeoPy — это популярная библиотека в языке программирования Python, которая используется для выполнения различных геокодинговых операций. Она позволяет разработчикам легко преобразовывать адреса в географические координаты (широта и долгота) и обратно
➡️Геокодирование и обратное геокодирование
Одна из основных функций библиотеки GeoPy — это геокодирование. Геокодирование позволяет преобразовывать текстовые адреса в географические координаты. Это может быть полезно для создания карт, отслеживания местоположения или анализа данных, связанных с конкретными локациями.
➡️Расчет расстояний и маршрутов
Еще одна полезная функция GeoPy — это возможность расчета расстояний между двумя точками на карте. Это может быть полезно для множества приложений, включая логистику, планирование маршрутов и анализ местоположения.
Погрузитесь в мир Python с нашим бесплатным курсом!
🎓 Включено 45 уроков, 56 упражнений в тренажере и 163 проверочных теста. Узнаете, как создавать программы, работать с условиями и функциями.
Что вы освоите:
— Составление программ из нескольких модулей.
— Анализ ошибок в коде с использованием отладочной печати.
📚 Курс охватывает основы Python: синтаксис, условия, циклы, типы данных и библиотеки. Практика на каждом шаге поможет вам уверенно использовать язык.
Начните свое обучение с бесплатного базового курса Python и вы сможете создавать несложные программы, а так же анализировать ошибки в коде!
🖥 В чем разница между итератором и генератором?
В Python и итераторы, и генераторы позволяют перебирать элементы коллекций, но работают немного по-разному.
🔘Итераторы — это объекты, которые реализуют методы iter()
и next()
. Метод iter()
возвращает сам итератор, а next()
— следующий элемент коллекции. Если элементы заканчиваются, next()
должен вызвать исключение StopIteration
. Итераторы позволяют явно перебирать элементы коллекции, не требуя, чтобы все элементы были доступны в памяти одновременно.
🔘Генераторы — это специальный способ реализации итераторов. Они создаются при помощи функций с ключевым словом yield
. Главное отличие генератора заключается в том, что значения генерируются по требованию. Каждый раз, когда генератор достигает yield
, он возвращает значение и «замирает», сохраняя своё состояние до следующего вызова. Это позволяет использовать меньше памяти при итерации по длинным последовательностям.
🔎LoginManager - это класс во Flask, который обрабатывает аутентификацию пользователей. Он предоставляет возможность работы с аутентификацией: проверка правильности введенных учетных данных, установка и удаление сеансов пользователя, проверка доступа к защищенным страницам.
➡️Использование LoginManager
Сначала необходимо создать экземпляр LoginManager и привязать его к приложению Flask. Затем можно определить функцию загрузки пользователя с помощью декоратора @login_manager.user_loader
. Эта функция должна принимать идентификатор пользователя в качестве параметра и возвращать объект пользователя.
После настройки LoginManager можно использовать его для защиты определенных страниц и контролировать доступ к ним только для аутентифицированных пользователей. Для этого можно использовать декоратор @login_required
, который применяется к функции представления и автоматически проверяет статус аутентификации пользователя перед выполнением функции.
🕔Один из самых простых способов измерения времени выполнения кода в Python – использование модуля time. Этот модуль предоставляет функцию time(), которая возвращает текущее время в секундах с момента начала эпохи. Вы можете использовать эту функцию до и после куска кода, скорость выполнения которого вы хотите измерить, а затем вычесть одно значение из другого, чтобы получить общее время выполнения.
➡️Пример использования модуля time:
import timeЧитать полностью…
start_time = time.time()
# Код, скорость выполнения которого вы хотите измерить
for i in range(0, 10000):
pass
end_time = time.time()
execution_time = end_time - start_time
print(f"Время выполнения: {execution_time} секунд")
Библиотека PIL (Python Imaging Library) является одной из самых популярных библиотек для обработки изображений.
➡️Создание и редактирование изображений
Одной из главных возможностей библиотеки PIL является возможность создания и редактирования изображений. С ее помощью можно создавать новые изображения с определенными размерами и цветовыми схемами, а также редактировать существующие изображения. Например, можно добавлять текст, рисовать графические примитивы, наносить различные эффекты и многое другое.
➡️Обработка изображений в пакетном режиме
Библиотека PIL также предоставляет возможность обработки изображений в пакетном режиме. Это означает, что можно применять определенные операции к нескольким изображениям одновременно. Например, можно изменить размер и применить фильтр ко множеству изображений, что сэкономит время и упростит процесс обработки большого количества изображений.
Что такое логирование?
Логирование – это процесс записи событий в системе. Эти события могут включать в себя всё: от информации о том, что программа успешно завершила свою работу, до деталей о возникших ошибках. Логи могут быть сохранены в различных форматах и на различных носителях, включая файлы, базы данных или даже удаленные серверы.
➡️Преимущества логирования
Оно помогает разработчикам отслеживать и исправлять ошибки, анализировать поведение системы и даже предотвращать возможные проблемы в будущем. Кроме того, логи могут быть использованы для аудита, что особенно важно для обеспечения безопасности системы.
➡️Как использовать логирование?
- Можно использовать встроенные средства ОС или специализированные инструменты для логирования.
- внедрять функции логирования непосредственно в свои приложения.
В любом случае, важно помнить о необходимости разделять логи по уровням важности и обеспечивать их надлежащее хранение и архивацию.