🤔7🤨3🙈2
Функция напечатает 5 один раз, а затем выдаст ошибку, потому что дальше программа пытается вызвать "ничего" (None) как функцию
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3🔥2👀1
class MyError(Exception):
pass
raise MyError("Что-то пошло не так")— Код становится читаемее
— Ошибки легче отлавливать
— Проще отлаживать и тестировать
— Можно группировать ошибки по типу
class ValidationError(MyError):
pass
class DatabaseError(MyError):
pass
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1
from itertools import zip_longest
names = ["Анна", "Борис"]
scores = [90]
for name, score in zip_longest(names, scores, fillvalue="—"):
print(name, score)
Анна 90
Борис —
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5❤1
Давайте рассмотрим пример простой чистой функции на языке Python. Предположим, у нас есть функция
double, которая удваивает переданное число:def double(number):
return number * 2
Рассмотрим теперь пример нечистой функции на языке Python. Предположим, у нас есть функция add_to_list, которая добавляет переданное значение в глобальный список:
my_list = []
def add_to_list(value):
my_list.append(value)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4❤2👌1
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤣6👀4😁1💯1
python manage.py makemigrations, которая создаст файл миграции в папке migrations вашего приложения.python manage.py migrate, которая применит все необходимые изменения к базе данных. При этом Django будет автоматически отслеживать и применять новые миграции при изменениях в моделях.python manage.py makemigrations --empty, чтобы определить свои собственные изменения в базе данных.Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🔥1
Идея простая: если один компонент падает или начинает работать медленно, остальные продолжают функционировать.
- разделение ресурсов (пулы потоков, подключения к БД, очереди) для разных компонентов
- ограничение «захвата» всех ресурсов одним зависимым сервисом
- предотвращение лавинообразных отказов
Если сервис обращается к 3 внешним API, у каждого свой пул потоков. Тогда сбой в одном API не «забьёт» все подключения и не остановит остальные запросы.
— устойчивость к локальным сбоям
— предсказуемая деградация системы (отваливается часть, а не всё)
— усложнение конфигурации и мониторинга
— необходимость балансировки ресурсов между пулами
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3🔥2
import sqlite3
# Создание соединения с базой данных
conn = sqlite3.connect('mydatabase.db')
# Создание таблицы "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)])
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤5🔥4
Функция type() в Python - это не просто инструмент для определения типа объекта. Она также может быть использована для создания новых классов динамически. Вот простой пример:
MyClass = type('MyClass', (), {'x': 42, 'my_method': lambda self: print("Hello!")})
obj = MyClass()
print(obj.x) # Выведет: 42
obj.my_method() # Выведет: Hello!Метаклассы - это классы классов. Они позволяют нам контролировать процесс создания классов. Рассмотрим пример:
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): динамическое создание классов на основе структуры базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1😁1🤯1👀1
Функция .upper() в Python используется для преобразования всех символов в строке в верхний регистр. Это очень полезно, когда вы хотите сравнить строки без учета регистра или обеспечить единообразие ввода данных.
Пример использования:
text = 'Hello, World!'
print(text.upper()) # Вывод: 'HELLO, WORLD!'
С другой стороны, функция .lower() преобразует все символы строки в нижний регистр. Это также может быть полезно при сравнении строк или обеспечении единообразия ввода.
Пример использования:
text = 'Hello, World!'
print(text.lower()) # Вывод: 'hello, world!'
Функции .upper() и .lower() часто используются вместе для обеспечения единообразия ввода и процесса обработки данных. Например, вы можете преобразовать ввод пользователя в нижний регистр перед проверкой его в словаре, где все ключи хранятся в нижнем регистре. Таким образом, вы можете быть уверены, что ваш код будет работать независимо от того, как пользователь ввел данные.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥3
import requests
response = requests.post(
'http://localhost:8000/extract',
files={'file': open('ваш_документ.pdf', 'rb')}
)
print(response.json()) # Ваши данные в структурированном виде!
Sparrow извлекает текст, таблицы и рукописные данные из документов, преобразуя их в структурированный формат с полной локальной обработкой для вашей безопасности.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4❤1
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", "Телефон не указан") — «Телефон не указан».Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥2
автоматически генерирует стандартные методы 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 (подсказки типов работают из коробки).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥2
❤7👍2🔥1
Эквивалентно a is b and b is c. None - единственный объект, а, b, с на него ссылаются
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4🔥2
Ограничивает RPS (запросов в секунду) и количество одновременных соединений — защищает сервисы от перегрузки при парсинге или работе с API.
import aiometer
import httpx
async def fetch(url):
async with httpx.AsyncClient() as client:
return await client.get(url)
urls = [...] # Список URL
results = await aiometer.run_on_each(fetch, urls, max_per_second=5)
Интеграция с asyncio и anyio + поддержка кастомных лимитеров. Замена самописным «костылям» с семафорами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4🔥3
Чтобы автоматизировать работу с Docker через простые Python-скрипты вместо ручных команд в терминале.
from dockerpyze import DockerClient
# Подключаемся к Docker
docker = DockerClient()
# Получаем список всех контейнеров
containers = docker.list_containers()
print(f"Запущено контейнеров: {len(containers)}")
- Работает со всем, что умеет Docker.
- Команды как в Python — понятные и читаемые.
- Не нужно самому разбирать ошибки — библиотека сделает это за вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1
def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# Пример использования
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 5
result = binary_search(arr, target)
if result != -1:
print("Элемент найден в позиции", result)
else:
print("Элемент не найден")
Бинарный поиск обладает несколькими преимуществами по сравнению с другими алгоритмами поиска. Во-первых, он имеет временную сложность O(log n), что делает его очень эффективным даже для больших списков данных. Во-вторых, он работает только с упорядоченными списками, что позволяет сократить количество операций поиска. И, наконец, бинарный поиск является универсальным и может быть применен для поиска элементов в любом упорядоченном списке данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4⚡1🔥1🤔1