Pythoner
Kanalga Telegram’da o‘tish
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode
Ko'proq ko'rsatish6 622
Obunachilar
+124 soatlar
-87 kunlar
-4030 kunlar
Postlar arxiv
6 621
✈️attrs — библиотека для создания классов с автоматической реализацией методов __init__ и других. Главная функция -
автоматически генерирует стандартные методы Python-классов через декларативный синтаксис, сохраняя контроль над типами и валидацией.
➡️Пример использования:
import attr
@attr.s
class Cat:
name: str = attr.ib() # обязательное поле
age: int = attr.ib(default=1) # с значением по умолчанию
is_fluffy: bool = attr.ib(default=True) # и ещё одно
murzik = Cat(name="Мурзик", age=3)
print(murzik) # Выведет: Cat(name='Мурзик', age=3, is_fluffy=True)
💡Заключение:
attrs — даёт скорость разработки + безопасность типов. Совместимость с mypy и IDE (подсказки типов работают из коробки).
🐍Pythoner6 621
✈️Метод dict.get() в Python используется для получения значения по ключу из словаря. Он принимает ключ в качестве аргумента и возвращает соответствующее значение. В случае, если ключ отсутствует в словаре, метод возвращает значение по умолчанию, которое можно указать вторым аргументом.
➡️Пример получения значения по ключу:
data = {"name": "Иван", "age": 30}
name = data.get("name") — «Иван»
age = data.get("age", 25) — 30 (ключ есть, берём его значение)
print(name, age) — вывод: «Иван» 30.
➡️Использование значения по умолчанию:
data = {"name": "Анна"}
Ключа "city" нет, поэтому вернётся значение по умолчанию
city = data.get("city", "Не указан") — «Не указан»
print(city) — вывод: «Не указан».
➡️Работа с вложенными словарями:
data = { "user": { "name": "Павел", "email": "example.com" } }
email = data.get("user", {}).get("email", "Email отсутствует") — «example.com»
phone = data.get("user", {}).get("phone", "Телефон не указан") — «Телефон не указан».
💡Метод dict.get() удобен в тех случаях, когда нужно получить значение из словаря и быть уверенным, что при отсутствии ключа программа не будет выдавать ошибку. Он также позволяет удобно установить значение по умолчанию, если ключ не найден.
🐍Pythoner6 621
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
6 621
✈️Sparrow — это open-source инструмент для автоматического извлечения данных из документов (PDF, изображений и т.д.). Он использует ML-модели, чтобы превращать неструктурированные файлы в готовые к анализу данные.
➡️Пример использования sparrow через API:
import requests
response = requests.post(
'http://localhost:8000/extract',
files={'file': open('ваш_документ.pdf', 'rb')}
)
print(response.json()) # Ваши данные в структурированном виде!
💡Ключевое преимущество:
Sparrow извлекает текст, таблицы и рукописные данные из документов, преобразуя их в структурированный формат с полной локальной обработкой для вашей безопасности.
🐍Pythoner6 621
➡️Функция .upper()
Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных.
Пример использования:
text = 'Hello, World!'
print(text.upper()) # Вывод: 'HELLO, WORLD!'
➡️Функция .lower()
С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода.
Пример использования:
text = 'Hello, World!'
print(text.lower()) # Вывод: 'hello, world!'
➡️Применение .upper() и .lower()
Функции .upper() и .lower() часто используются вместе для обеспечения единообразия ввода и процесса обработки данных. Например, вы можете преобразовать ввод пользователя в нижний регистр перед проверкой его в словаре, где все ключи хранятся в нижнем регистре. Таким образом, вы можете быть уверены, что ваш код будет работать независимо от того, как пользователь ввел данные.
🐍Pythoner6 621
✈️В Python все является объектом, даже сами классы. Это открывает перед нами удивительные возможности для создания динамических структур кода. Давайте погрузимся в мир создания классов и функций "на лету" с помощью type() и метаклассов.
➡️Магия функции type()
Функция type() в Python - это не просто инструмент для определения типа объекта. Она также может быть использована для создания новых классов динамически. Вот простой пример:
MyClass = type('MyClass', (), {'x': 42, 'my_method': lambda self: print("Hello!")})
obj = MyClass()
print(obj.x) # Выведет: 42
obj.my_method() # Выведет: Hello!
⬆️Здесь мы создали класс MyClass с атрибутом x и методом my_method. Удивительно, правда?
➡️Шаг вперед: метаклассы
Метаклассы - это классы классов. Они позволяют нам контролировать процесс создания классов. Рассмотрим пример:
class MyMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['additional_method'] = lambda self: print("I'm additional!")
return super().__new__(cls, name, bases, attrs)
class MyClass(metaclass=MyMetaclass):
pass
obj = MyClass()
obj.additional_method() # Выведет: I'm additional!
⬆️В этом примере мы создали метакласс, который добавляет новый метод ко всем классам, использующим его.
➡️Практическое применение
Динамическое создание классов и функций может быть полезно в различных сценариях:
- Фабрики классов: создание классов на основе внешних данных или конфигурации.
- Декораторы классов: модификация классов без изменения их исходного кода.
- ORM (Object-Relational Mapping): динамическое создание классов на основе структуры базы данных.
🐍Pythoner6 621
+8
Цифровое тридевятое царство появилось в Облаке Mail
✨ Очень сказочные дела творятся в Облаке Mail ✨
Отгадайте загадку про сказочных героев и волшебные силы подписки Mail Space.
Кто правильно отгадает, получит дивные подарки. ❤️
Перейти на сайт
#реклама 16+
cloud.mail.ru
О рекламодателе
6 621
✈️В Python для работы с SQLite мы будем использовать модуль sqlite3, который входит в стандартную библиотеку Python. Начнем с импорта модуля и создания соединения с базой данных:
import sqlite3
# Создание соединения с базой данных
conn = sqlite3.connect('mydatabase.db')
➡️После создания соединения мы можем создать таблицы в нашей базе данных. Вот пример создания таблицы "users":
# Создание таблицы "users"
conn.execute('''CREATE TABLE users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER NOT NULL);''')
➡️Вставка данных в базу данных
После создания таблицы мы можем добавить данные в базу данных. Для этого мы можем использовать метод execute() и executemany() для вставки одной или нескольких строк данных соответственно. Вот пример вставки данных в таблицу "users":
# Вставка данных в таблицу "users"
conn.execute("INSERT INTO users (name, age) VALUES ('John Doe', 25)")
conn.execute("INSERT INTO users (name, age) VALUES ('Jane Smith', 30)")
conn.executemany("INSERT INTO users (name, age) VALUES (?, ?)", [('Alice Johnson', 35), ('Bob Brown', 40)])
🐍Pythoner6 621
✈️Bulkhead (перегородка на корабле) — это архитектурный паттерн, который защищает сервис от «цепных» отказов.
Идея простая: если один компонент падает или начинает работать медленно, остальные продолжают функционировать.
➡️Как это работает:
- разделение ресурсов (пулы потоков, подключения к БД, очереди) для разных компонентов
- ограничение «захвата» всех ресурсов одним зависимым сервисом
- предотвращение лавинообразных отказов
➡️Пример:
Если сервис обращается к 3 внешним API, у каждого свой пул потоков. Тогда сбой в одном API не «забьёт» все подключения и не остановит остальные запросы.
💡Плюсы:
— устойчивость к локальным сбоям
— предсказуемая деградация системы (отваливается часть, а не всё)
💡Минусы:
— усложнение конфигурации и мониторинга
— необходимость балансировки ресурсов между пулами
🐍Pythoner
6 621
✈️В Django ORM можно использовать механизм миграций для изменения структуры базы данных без необходимости вручную вносить изменения через SQL запросы. Миграции позволяют вам определять изменения в моделях и применять их к базе данных автоматически.
➡️Для начала работы с миграциями в Django необходимо создать начальное состояние базы данных, которое будет соответствовать текущим моделям вашего приложения. Для этого можно воспользоваться командой
python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения.
➡️Затем, чтобы применить миграции к базе данных, можно воспользоваться командой python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях.
➡️Миграции в Django ORM могут включать различные операции, такие как создание новых таблиц, добавление и удаление полей, изменение типа данных и многое другое. Кроме того, можно создавать собственные миграции с помощью команды python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных.
👀Использование миграций в Django ORM делает процесс изменения структуры базы данных более удобным и безопасным, позволяя сохранить целостность данных и избежать ошибок при ручном внесении изменений.
🐍Pythoner6 621
🔥 БЕСПЛАТНЫЙ КУРС ПО СОЗДАНИЮ НЕЙРО-СОТРУДНИКОВ НА GPT И ДРУГИХ LLM 🔥
Ищете практический и углубленный курс, чтобы освоить создание нейро-сотрудников? Мы создали курс из 5 объемных занятий. Это именно то, что нужно, чтобы прокачать свои навыки абсолютно бесплатно!
📌 Темы занятий:
1. Введение в мир нейро-сотрудников
2. Как работают LLM и их аналоги
3. Создание базы знаний для нейро-сотрудника (RAG)
4. Тестирование и отладка нейро-сотрудников
5. Интеграция нейро-сотрудников в Production
Вот 5 тем курса - он максимально простой и доступный, общеобразовательный, без какого-либо сложного программирования 📚Прохождение этого курса, скорее всего, займет у вас от 1 до 3 часов
🤖 Присоединяйтесь к нашему бесплатному курсу и разберитесь в этой увлекательной теме с нами!
6 621
✈️"Чистая" функция - это функция, которая при выполнении одного и того же входного значения всегда возвращает одинаковый результат и не имеет побочных эффектов. То есть, она не влияет на состояние программы или внешние переменные. Результат работы "чистой" функции зависит только от переданных ей аргументов.
➡️Пример чистой функции
Давайте рассмотрим пример простой чистой функции на языке Python. Предположим, у нас есть функция
double, которая удваивает переданное число:
def double(number):
return number * 2
⬆️Эта функция является "чистой", потому что она всегда возвращает удвоенное значение переданного числа и не имеет побочных эффектов. Независимо от контекста выполнения и внешних переменных, результат работы этой функции будет одинаковым при одинаковом входном значении.
➡️Пример нечистой функции
Рассмотрим теперь пример нечистой функции на языке Python. Предположим, у нас есть функция add_to_list, которая добавляет переданное значение в глобальный список:
my_list = []
def add_to_list(value):
my_list.append(value)
⬆️Эта функция не является "чистой", потому что она изменяет состояние программы путем добавления значения в глобальный список my_list. Результат работы этой функции зависит не только от переданного аргумента, но и от текущего состояния списка my_list.
🐍Pythoner6 621
✈️Функция zip_longest() из модуля itertools объединяет несколько последовательностей, заполняя недостающие значения указанным значением.
➡️Пример:
from itertools import zip_longest
names = ["Анна", "Борис"]
scores = [90]
for name, score in zip_longest(names, scores, fillvalue="—"):
print(name, score)
Анна 90
Борис —
💡Полезно при работе с данными разной длины, чтобы не потерять элементы.
🐍 Pythoner6 621
✈️В больших проектах важно точно понимать, что пошло не так. Вместо того чтобы ловить все подряд через Exception, создавайте собственные исключения:
class MyError(Exception):
pass
➡️Теперь можно выбросить исключение, связанное с вашей логикой:
raise MyError("Что-то пошло не так")
➡️Зачем это нужно?
— Код становится читаемее
— Ошибки легче отлавливать
— Проще отлаживать и тестировать
— Можно группировать ошибки по типу
➡️Вы даже можете создать иерархию ошибок:
class ValidationError(MyError):
pass
class DatabaseError(MyError):
pass
💡Такой подход особенно полезен в API, играх, сложных скриптах и т.д. — везде, где важно знать какая именно ошибка произошла.
🐍 Pythoner6 621
Квартиры Prime-класса в Краснодаре. 2 часа до моря
ЖК "Гарантия PRIME" в Краснодаре — тёплый климат и чистый воздух, лес и набережная в двух шагах.
Всего 2 часа до пляжей Чёрного моря и 4 часа до склонов Красной Поляны.
Авторский двор-сад с фонтанами, лаунж-зонами, японским двориком и многообразием растений.
✅ Река и заповедная зелёная зона у дома;
✅ Панорамные и витражные окна;
✅ Гастрономический кластер и Арт-пространство;
✅ Образовательный кластер;
✅ Деловой хаб и офисы резидентов.
Во дворе детский сад, международная школа, бизнес-школа с бакалавриатом, филиал школы-лицея. КубГУ — всего в 2,5 км от дома.
Все условия для развития вас и ваших детей по международным стандартам.
Деловой хаб. Вы можете работать в Зелёном коворкинге и проводить встречи на Винной террасе.
Ваша личная резиденция на Юге!
Узнать больше
Проектная декларация на сайте https://наш.дом.рф/.
#реклама
gk-garantiaprime.ru
О рекламодателе
6 621
✈️Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции. Это удобно при необходимости получить случайную выборку из данных.
➡️Функция принимает два основных аргумента:
💬
population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
💬k — количество элементов для выборки.
➡️Дополнительные аргументы:
💬counts — список весов элементов (по умолчанию равновероятный выбор).
💬rng — генератор случайных чисел (по умолчанию берется из модуля random).
➡️Пример:
from random import sample
letters = ['a', 'b', 'c', 'd', 'e']
result = sample(letters, k=3)
print(result)
⬆️В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.
🐍Pythoner