19203
Полезные материалы для питониста по Фреймворкам Django, Flask, FastAPI, Pyramid, Tornado и др. По всем вопросам @evgenycarter РКН clck.ru/3Ko7Hq
Если вы хотите игнорировать какое-то исключение, вы, вероятно, сделаете что-то вроде этого:
try:
lst = [1, 2, 3, 4, 5]
print(lst[10])
except IndexError:
pass
contextlib позволяет сделать то же самое более выразительно и семантически правильно:
from contextlib import suppress
with suppress(IndexError):
lst = [1, 2, 3, 4, 5]
lst[10]
BBOT (Black Box OSINT Toolkit)
Рекурсивный модульный OSINT инструмент, написанный на Python.
Он поддерживает модульную структуру, интеграцию с API и плагины для выполнения сетевых сканирований, анализа доменов, поиска утечек данных и других задач. BBOT нацелен на исследование целевых систем, обеспечивая гибкость и настраиваемость для профессионалов в области кибербезопасности.
https://github.com/blacklanternsecurity/bbot
Мы в MAX
👉@BookPython
Last Call: ИИ, бэкенд и фронтенд в одном хакатоне
Wink AI Challenge — соревнование для разработчиков, которые знакомы с нейросетями и мультимодальными данными. Разбираешься в NLP и интеграции моделей? Приходи и покажи, на что способен твой ИИ. Призовой фонд — 1 125 000 рублей.
Последние дни регистрации — открыта до 4 ноября включительно: https://cnrlink.com/winkaichallengepylib
ML-инженеры, backend- и frontend-разработчики, DevOps, MLOps и мультимедиа-инженеры — ваш выход. Алгоритм такой:
1️⃣ Получи реальный текстовый набор данных.
2️⃣ Проанализируй структуру и извлеки ключевые сущности.
3️⃣ Собери ИИ-сервис, который помогает принимать решения в киноиндустрии.
Задачи хакатона:
🔸 Построй модель зависимости между сценами и структурируй сценарий.
🔸 Преврати текст в эскизы с помощью text-to-image для создания превизуализации сценария.
🔸 Создай решение, которое классифицирует контент и находит сцены, влияющие на возрастной рейтинг.
Финал пройдёт в Москве — двум участникам из команды Wink оплатит билеты и проживание. Успей зарегистрироваться на первый в России хакатон по применению ИИ в кинопроизводстве: https://cnrlink.com/winkaichallengepylib
Ibis Phuket Kata 3* — отличный старт отдыха у пляжа Ката
Ищете доступный и комфортный отель в районе Ката? Ibis Phuket Kata — всего в 10 минутах от пляжа и в шаге от кафе, рынков и ночного базара.
Локация: отель на улице Kata Road — удобно добираться до моря, магазинов и развлечений.
Бассейн с шезлонгами и барбекю-зоной у бара — для отдыха после пляжа.
Питание: завтраки шведский стол с фруктами, выпечкой и горячими блюдами. В ресторане закуски, тапас и напитки. Бар — в лобби и у бассейна.
Ibis Phuket Kata — это ваш надёжный и доступный выбор в Ката: чисто, удобно, недорого и с пляжем в пешей доступности. Для спокойного отдыха без лишних изысков — отличный вариант!
Хотите забронировать неделю отдыха? Это можно сделать на сайте pegast.ru
Смотреть
#реклама
pegast.ru
О рекламодателе
Т-Технологии зовут на Стековку
1 ноября в Екатеринбурге, Новосибирске и Нижнем Новгороде стартует квест для ИТ-специалистов — с городским интерактивом, задачами на знание кода и смекалку.
Что нужно делать?
Решать онлайн- и офлайн-задания и получать за это баллы для своего города.
Какой приз?
В городе, который наберет больше всего баллов, устроят вечеринку. А самые активные участники смогут повлиять на выбор тематики и программы.
Как участвовать?
Просто зарегистрируйтесь до 31 октября
Вредные советы python разработчику
l=[['a', 'b', 'c'], ['1', '2'], ['#']]
sum(l, [])
sum(). Вот код (выполнять, пока никто не видит):sum() принимает первым аргументом итерируемый объект, а вторым — значение, с которого начинается операция. По умолчанию это 0, но если указать пустой список [], то sum() начнёт с него. Затем sum() последовательно применяет операцию сложения к элементам первого аргумента, начиная со значения второго аргумента. В случае списков это означает конкатенацию.
Лучший курс по Python
0: Мета информация
1: int
2: +
3: Какой Python язык?
4: bool
5: None
6.0: float
6.1: float, интервью с Michael Overton
7: typeshed
7.1: typeshed, интервью с Alex Waygood
источник
Мы в MAX
👉@BookPython
Python предоставляет мощную библиотеку для работы с датой и временем: datetime. Интересный момент заключается в том, что объекты datetime имеют специальный интерфейс для поддержки часовых поясов (а именно атрибут tzinfo), но этот модуль поддерживает интерфейс лишь частично, оставляя остальную часть задачи другим модулям.
Наиболее популярный модуль для этой задачи — pytz. Однако сложность в том, что pytz не полностью соответствует интерфейсу tzinfo. Документация pytz указывает на это одной из первых строк: «Эта библиотека отличается от документированного API Python для реализаций tzinfo».
Нельзя использовать объекты часовых поясов pytz в качестве атрибута tzinfo. Если попытаться это сделать, можно получить абсолютно неожиданные результаты.
In : paris = pytz.timezone('Europe/Paris')
In : str(datetime(2017, 1, 1, tzinfo=paris))
Out: '2017-01-01 00:00:00+00:09'
In : str(paris.localize(datetime(2017, 1, 1)))
Out: '2017-01-01 00:00:00+01:00'
In : new_time = time + timedelta(days=2)
In : str(new_time)
Out: '2018-03-27 00:00:00+01:00'
In : str(paris.normalize(new_time))
Out: '2018-03-27 01:00:00+02:00'
Очередь с приоритетом — это структура данных, которая поддерживает две операции: добавление элемента и извлечение минимального из всех ранее добавленных элементов.
Одной из самых распространённых реализаций очереди с приоритетом является бинарная куча. Это полное бинарное дерево со следующим свойством: ключ, хранящийся в каждом узле, меньше или равен (≤) ключам в дочерних узлах. Минимум всех элементов находится в корне такого дерева.
1
3 7
5 4 9 8
15 16 17 18 19
[1, 3, 7, 5, 4, 9, 8, 15, 16, 17, 18, 19]
heapq.
In [1]: from heapq import *
In [2]: heap = [3,2,1]
In [3]: heapify(heap)
In [4]: heap
Out[4]: [1, 2, 3]
In [5]: heappush(heap, 0)
In [6]: heap
Out[6]: [0, 1, 3, 2]
In [7]: heappop(heap)
Out[7]: 0
In [8]: heap
Out[8]: [1, 2, 3]
Если вы хотите перехватить как IndexError, так и KeyError, вы можете и должны использовать LookupError, их общего предка. Это оказалось полезным при доступе к сложным вложенным данным.
try:
db_host = config['databases'][0]['hosts'][0]
except LookupError:
db_host = 'localhost'
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
Блок else для выражений for и try используется довольно редко. Однако, комбинируя их вместе, можно написать код, который выполняет итерацию по коллекции до первого успешного результата без использования дополнительных флагов.
import logging
from typing import List, Optional
logging.basicConfig(level=logging.DEBUG)
def first_int(iterable: List[str]) -> Optional[int]:
for x in iterable:
try:
result = int(x)
except ValueError:
logging.debug('Bad int: %s', x)
else:
break
else:
result = None
logging.error('No int found')
return result
print(first_int(('a', 'b', '42', 'c')))
DEBUG:root:Bad int: a
DEBUG:root:Bad int: b
42
Интеллектуальные складские системы для производства
Эффективность сборки современных электронных изделий во многом определяется качеством работы склада. Ошибки при хранении и комплектовании приводят к простоям, а автоматизация позволяет их исключить и обеспечить бесперебойную подачу компонентов.
Приглашаем на бесплатный вебинар технологов и главных специалистов по производству радиоэлектроники.
На вебинаре будут рассмотрены:
✅ примеры частично и полностью автоматизированных решений
✅ возможности современных программно-аппаратных систем учета
✅ практические подходы к интеграции склада и производственного оборудования
Спикер: Виктор Орешков, ведущий инженер Технического управления Остек-СМТ.
Записаться онлайн
#реклама 16+
ostec-smart.rqch.ru
О рекламодателе
Самый быстрый способ чтения Excel в Python: чтение 500 тысяч строк менее чем за 4 секунды
У меня нет данных, чтобы подтвердить это утверждение, но я почти уверен, что Excel — самый распространённый способ хранения, обработки и, да(!), даже передачи данных. Именно поэтому нередко приходится работать с Excel в Python. Недавно мне понадобилось это сделать, и я протестировал и оценил несколько способов чтения файлов Excel в Python.
https://hakibenita.com/fast-excel-python#results-summary
Мы в MAX
👉@BookPython
Что такое хуки? Как они используются в Python?
Хуки (hooks) в программировании — это специальные точки в коде, в которые можно «вклиниться», чтобы изменить или расширить поведение программы без модификации её исходного кода. Хуки позволяют добавлять дополнительную логику или выполнять нужные действия, когда происходят определенные события.
⚫️Как хуки используются в Python?
В Python хуки часто реализуются в библиотеках и фреймворках для того, чтобы пользователи могли добавлять свои функции, выполняющиеся при определённых событиях. Они применяются в тестировании, веб-разработке, обработке данных и многих других областях. Вот несколько примеров использования хуков в Python:
1. Тестовые фреймворки (например, pytest):
В тестовом фреймворке pytest есть хуки для настройки и завершения тестов. Вы можете создать функции, которые будут выполняться до начала тестов (pytest_runtest_setup) или после их завершения (pytest_runtest_teardown). Это удобно для создания и очистки тестовой среды.
# Пример hook-функции в pytest
def pytest_runtest_setup(item):
print(f"Setting up for test: {item.name}")
pre_save и post_save, которые позволяют выполнять код до и после сохранения объекта в базе данных.
from django.db.models.signals import pre_save
from django.dispatch import receiver
from .models import MyModel
@receiver(pre_save, sender=MyModel)
def my_hook(sender, instance, **kwargs):
print("This runs before saving MyModel instance.")
before_request и after_request, которые позволяют выполнить код до обработки HTTP-запроса или после отправки ответа.
from flask import Flask
app = Flask(__name__)
@app.before_request
def before_request_func():
print("This runs before each request")
@app.after_request
def after_request_func(response):
print("This runs after each request")
return response
logging в Python поддерживает хуки для настраиваемой обработки логов, например, через методы addFilter или создание своих обработчиков (handlers), чтобы настроить кастомное поведение логирования.
Осени начхать на наш иммунитет.
Но в Ингосстрахе знают, как заботиться о себе в сезон простуд. В Telegram-канале делятся советами для поддержания здоровья и рассказывают о полисе ДМС. Подписывайтесь, чтобы не пропустить полезные посты.
Подписаться
#реклама
О рекламодателе
Гринатом — ИТ-интегратор Росатома — ищет системного архитектора АРМ в Москве!💼
✅Вам предстоит разрабатывать архитектурные концепции и технические решения на АРМ, готовить презентации и обоснования архитектурных решений, проводить аудит и анализ текущей инфраструктуры, разрабатывать стратегии миграции на отечественные платформы и участвовать в разработке проектной документации.
🤝А мы предложим конкурентоспособную «белую» зарплату с годовыми бонусами и ежегодной индексацией, ДМС со стоматологией, тренажерный зал с сауной в офисе, образовательные курсы за счёт компании. И главное — карьерный и экспертный рост в рамках единой команды.
Модуль functools для манипуляций с функциями
Модуль functools в Python предоставляет инструменты для работы с функциями, позволяя выполнять различные манипуляции с ними. Вот некоторые из наиболее важных функций и возможностей, которые предоставляет functools:
1. `functools.partial`: Позволяет зафиксировать некоторые аргументы функции и создать новую функцию с предопределенными значениями.
from functools import partial
def multiply(x, y):
return x * y
double = partial(multiply, 2)
print(double(5)) # Вывод: 10
from functools import reduce
numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Вывод: 24
functools.lru_cache: Кэширует результаты вызовов функции, чтобы ускорить повторные вызовы с теми же аргументами. Полезно для функций с дорогими вычислениями.
from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10)) # Вывод: 55
functools.wraps: Декоратор, который сохраняет метаданные оригинальной функции (такие как имя и документация) при создании декоратора.
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Что-то делаем перед вызовом функции")
return func(*args, **kwargs)
return wrapper
@my_decorator
def say_hello():
"""Выводит приветствие."""
print("Привет!")
print(say_hello.__name__) # Вывод: say_hello
print(say_hello.__doc__) # Вывод: Выводит приветствие.
functools.total_ordering: Упрощает реализацию всех методов сравнения для класса, определяя только несколько из них.
from functools import total_ordering
@total_ordering
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return (self.x, self.y) == (other.x, other.y)
def __lt__(self, other):
return (self.x, self.y) < (other.x, other.y)
p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 < p2) # Вывод: True
print(p1 <= p2) # Вывод: True
functools мощным инструментом для функционального программирования в Python.
Что такое контекстный менеджер в Python?
Контекстный менеджер в Python — это специальный тип объекта, который определяет методы enter() и exit() и используется с инструкцией with. Эти объекты часто применяются в операциях, которые требуют установки и освобождения ресурсов.
Частый сценарий — это работа с файлом:
with open('file.txt', 'r') as file:
data = file.read()
import time
class Timer:
def __enter__(self):
self.start = time.time()
def __exit__(self, exc_type, exc_val, exc_tb):
self.end = time.time()
print(f'Время выполнения: {self.end - self.start:.2f} секунд')
with Timer():
# код, время выполнения которого нужно измерить
time.sleep(2)
В Python вы можете переопределить оператор квадратных скобок ([]), определив магический метод getitem. Примером может быть объект Cycle, который виртуально содержит бесконечное количество повторяющихся элементов:
class Cycle:
def __init__(self, lst):
self._lst = lst
def __getitem__(self, index):
return self._lst[index % len(self._lst)]
print(Cycle(['a', 'b', 'c'])[100]) # prints 'b'
In : class Inspector:
...: def __getitem__(self, index):
...: print(index)
...:
In : Inspector()[1]
1
In : Inspector()[1:2]
slice(1, 2, None)
In : Inspector()[1:2:3]
slice(1, 2, 3)
In : Inspector()[:]
slice(None, None, None)
In : Inspector()[:, 0, :]
(slice(None, None, None), 0, slice(None, None, None))
In : s = slice(1, 2, 3)
In : s.start
Out: 1
In : s.stop
Out: 2
In : s.step
Out: 3
Генераторы — один из самых полезных механизмов в Python. Они имеют множество применений, одно из которых — создание менеджеров контекста. Обычно нужно вручную определять магические методы __enter__ и __exit__, но декоратор @contextmanager из модуля contextlib делает это намного удобнее:
from contextlib import contextmanager
@contextmanager
def atomic():
print('BEGIN')
try:
yield
except Exception:
print('ROLLBACK')
else:
print('COMMIT')
atomic — это менеджер контекста, который можно использовать следующим образом:
In : with atomic():
...: print('ERROR')
...: raise RuntimeError()
...:
BEGIN
ERROR
ROLLBACK
@contextmanager позволяет использовать его как декоратор, так и менеджер контекста.
In : @atomic()
...: def ok():
...: print('OK')
...:
In : ok()
...:
BEGIN
OK
COMMIT
Функция enumerate
Эта встроенная функция снабжает циклы счётчиком. Возвращает генераторный объект, который имеет метод, вызываемый встроенной функцией next: на каждом проходе цикла возвращает кортеж {индекс, значение}. Цикл for проходит по этим кортежам автоматически, что позволяет распаковывать их значения с помощью присваивания кортежей почти так, как в zip.
S = "stroka"
example = enumerate(S)
next(example) # -> (0, 's')
shopping_list = ['яблоки', 'бананы', 'апельсины', 'хлеб']
for index, item in enumerate(shopping_list, start=1):
print(f"Пункт {index}: {item}")
Реализация парсеров с Pylasu
В этой статье рассказывается, как реализовать парсеры на Python с использованием Pylasu и ANTLR. Пошагово:
1. Создадим грамматику ANTLR для простого языка программирования Slang и сгенерируем парсер.
2. Определим абстрактное синтаксическое дерево (AST) с помощью Pylasu и научимся строить его из дерева разбора ANTLR.
3. Интегрируем парсер с CLI-приложением для обработки кода Slang из строк и файлов, с выводом AST в формате JSON.
Полный код проекта доступен на GitHub. Вы можете экспериментировать, вносить улучшения и делиться идеями!
https://tomassetti.me/implement-parsers-with-pylasu/
Мы в MAX
👉@BookPython
МТС приглашает всех, кто пишет на С++, Go, Python, JS, Java, C# и других языках, на True Tech Champ — всероссийский чемпионат по программированию. Соревнование будет проходить в двух треках.
Трек 1. Алгоритмический. Индивидуальный зачет [призовой фонд 2 750 000 рублей]
Реши задачи, которые помогут прокачаться в работе с алгоритмами и структурами данных. Похожие задания встречаются на собеседованиях в МТС и других крупных компаниях. До 240 лучших участников попадут в финал и сразятся в лайв-кодинге.
Трек 2. Программирование роботов. Командный формат [призовой фонд 7 500 000 рублей]
Проведи робота по виртуальному лабиринту, затем управляй им дистанционно на офлайн-полигоне, а в финале — пройди испытания на реальной площадке и выбей соперников с платформы.
🎁 Организаторы отправят командам финалистов по одному роботу Waveshare Cobra Flex для кастомизации. После соревнований они останутся у участников в качестве подарка.
📍 Зрелищный шоу-финал с ИИ-технологиями, кодерскими челленджами и выступлениями международных и российских спикеров пройдет 21 ноября в МТС Live Холл.
Стоит участвовать, чтобы:
— Освежить знания и прокачать новые навыки.
— Заявить о себе на всю страну, получить карьерный буст и шанс лично пообщаться с HR-специалистами МТС.
⏰ Регистрация участников до 20 октября на сайте.
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
exit или quit появляется это сообщение? Решение довольно неожиданное, но изящное. Это не специальный случай для интерактивной оболочки, она просто показывает представление каждого вычисленного результата, а эта строка - просто представление функции exit.sys.exit().
В Python 3 методы keys, values и items для словарей возвращают объекты-представления (view objects). В Python 2 они возвращали списки. Основное различие в том, что представления не хранят все элементы в памяти, а предоставляют их по мере запроса. Это работает отлично, пока вы просто итерируете ключи (что обычно и делается), но теперь вы не можете получить доступ к элементам по индексу.
TypeError: 'dict_keys' object does not support indexing
d.keys()[0] может быть удобным способом получить любой ключ (используйте next(iter(d.keys())) в Python 3). Во-вторых, начиная с Python 3.6, словари в CPython упорядочены по порядку добавления, и с версии Python 3.7 это стало стандартной особенностью языка.
UV
Чрезвычайно быстрый менеджер пакетов и проектов на языке Python, написанный на Rust.
Создатели позиционируют его как замену pip, pip-tools и virtualenv. Это, кстати, те же разработчики, которые сделали линтер Ruff.
https://astral.sh/blog/uv
https://github.com/astral-sh/uv
Мы в MAX
👉@BookPython
Декораторы Python: пошаговое руководство
Понимание декораторов является важной вехой для любого программиста Python. Эта статья представляет собой пошаговое руководство о том, как декораторы могут помочь вам стать более эффективным и продуктивным разработчиком на Python.
Декораторы в Python позволяют расширять и изменять поведение вызываемых объектов (функций, методов и классов) без постоянного изменения самого вызываемого объекта.
Любая достаточно общая функциональность, которую можно «прикрепить» к поведению существующего класса или функции, является отличным примером использования декораторов.
Сюда входит:
- журналирование,
- обеспечение контроля доступа и аутентификации,
- инструментарий и функции управления временем,
- ограничение скорости,
- кэширование и многое другое.
Rus https://habr.com/ru/companies/otus/articles/727590/
Eng https://dbader.org/blog/python-decorators
Мы в MAX
👉@BookPython
Что такое «сырые» строки (Raw Strings) в Python?
В Python "сырые" строки (или raw strings) — это строки, в которых символы обратного слэша \ воспринимаются буквально, а не как специальные символы (например, \n для новой строки, \t для табуляции и т. д.). Они обозначаются префиксом r перед строкой, например: r"строка".
Сырые строки удобны, когда вам нужно использовать много обратных слэшей, например, в путях к файлам или регулярных выражениях, где \ часто встречается. Сырые строки упрощают код и помогают избежать ошибок, связанных с экранированием символов.
Пример использования
# Обычная строка
print("C:\\new_folder\\file.txt") # Выводит: C:\new_folder\file.txt
# Сырая строка
print(r"C:\new_folder\file.txt") # Выводит: C:\new_folder\file.txt
\\ используется для экранирования, чтобы Python не воспринял \n как символ новой строки. В случае сырой строки r"...", экранирование не нужно, так как \ воспринимается буквально.
Сравнение производительности dict() и {} в Python
Какое-то время назад, во время разбора кода, мы обсудили выбор dict() вместо {} в новом коде на Python. Коллега утверждал, что dict() более читаем и чётче выражает предназначение кода, поэтому следует предпочесть его. Меня это не убедило, но в тот момент контраргументов не нашлось, поэтому я воздержался.
Это заставило меня задуматься: в чём разница между типом dict и литеральным выражением {}?
https://habr.com/ru/articles/788440/
original https://madebyme.today/blog/python-dict-vs-curly-brackets/
Мы в MAX
👉@BookPython