Побег Робота из лабиринта. Технологи: Jetson + Arduino + CV. Робот находит выход из лабиринта только с помощью компьютерного зрения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
• Создай urls.txt — по одному URL в строке.• Установи зависимости: pip install requests• Запусти скрипт ниже рядом с urls.txt.from concurrent.futures import ThreadPoolExecutor, as_completed
from pathlib import Path
import requests
OUT = Path("images"); OUT.mkdir(exist_ok=True)
urls = [u.strip() for u in Path("urls.txt").read_text(encoding="utf-8").splitlines() if u.strip()]
def download(u: str) -> str:
name = (u.split("/")[-1].split("?")[0] or "file").replace("/", "_")
path = OUT / name
r = requests.get(u, timeout=20, stream=True)
r.raise_for_status()
path.write_bytes(r.content)
return name
with ThreadPoolExecutor(max_workers=10) as ex:
futures = {ex.submit(download, u): u for u in urls}
for f in as_completed(futures):
try:
print("OK:", f.result())
except Exception as e:
print("FAIL:", futures[f], "->", e)
— ThreadPoolExecutor(max_workers=10) параллелит загрузки без блокировки основного потока.
— r.raise_for_status() ловит HTTP-ошибки, чтобы не сохранять «битые» файлы.
— Файлы кладутся в папку images; имена берутся из URL (с обрезкой query-параметров).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1
Почему этот код «портит» все строки матрицы одновременно?
Пример
m = [[0]*3]*3 # одна и та же строка повторена 3 раза
m[0][1] = 1
print(m) # ➔ [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
Ответ
Оператор * дублирует ссылку на один и тот же внутренний список, а не создаёт новые. Поэтому изменение m[0][1] меняет ту же самую строку во всех местах.
✅ Правильно создавать независимые строки:
m = [[0]*3 for _ in range(3)] # новая строка на каждой итерации
🟢 Запомнить:
[x]*n безопасно для немутируемых значений (int, str, tuple), но не для вложенных списков.
Для копии строки используйте row[:] или row.copy().
Для глубокой копии вложенных структур — copy.deepcopy.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12
Тестируем реальные сценарии, измеряем RPS, смотрим на потребление памяти и разбираемся, когда самая разумная стратегия — это просто подождать и обновить Python на free-threading версию.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🤔2
httpx — современный HTTP-клиент для Python с синхронным и асинхронным API, поддержкой HTTP/2, стриминга и удобными таймаутами. Подходит для сервисов, ботов и интеграций, где важны скорость и контроль соединений.
🟢 Единый интерфейс для sync/async клиентов🟢 HTTP/1.1 и HTTP/2, пул соединений, куки, прокси🟢 Гибкие таймауты, стриминг запросов/ответов, загрузка файлов🟢 Совместим с requests по духу, но современнее и быстрее в async
import asyncio
import httpx
async def main():
async with httpx.AsyncClient(http2=True, timeout=httpx.Timeout(5.0)) as client:
# GET с проверкой статуса
r = await client.get("https://api.github.com/repos/encode/httpx")
r.raise_for_status()
data = r.json()
print(f"{data['full_name']} ⭐️ {data['stargazers_count']}")
# POST JSON
echo = await client.post("https://httpbin.org/post", json={"ping": "pong"})
print(echo.json()["json"]) # {'ping': 'pong'}
if __name__ == "__main__":
asyncio.run(main())
pip install httpx
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
Курс охватывает основы и «рабочие» приёмы: типы данных, функции, итераторы/генераторы, файлы, исключения, ООП, модули и работа с пакетами — с упором на практику и рефакторинг.
Материал состоит из коротких уроков и лабораторных с пошаговыми заданиями и решениями; всё можно запускать локально, без сложной подготовки окружения.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
Пошаговое руководство от Python for Devs: как связать MarkItDown, LangChain, ChromaDB, Ollama и Gradio, чтобы собрать полноценную RAG-систему без облаков и создать умную базу знаний у себя на ПК.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤1
MappingProxyType создаёт неизменяемое представление существующего словаря: читать можно, писать — нельзя. Удобно, когда нужно отдать конфиг/истину в нескольких местах без риска случайной записи.from types import MappingProxyType
settings = {"debug": True, "port": 8000}
readonly = MappingProxyType(settings)
print(readonly["port"]) # ➔ 8000
# readonly["port"] = 9000 # ➔ TypeError: 'mappingproxy' object does not support item assignment
# Изменили оригинал — прокси «увидит» это
settings["port"] = 9000
print(readonly["port"]) # ➔ 9000
dict, а кортежи/frozenset)Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
• Введён новый модуль profiling.sampling - инструмент для статистического профилирования, который позволяет анализировать производительность кода без задержек и дополнительных затрат ресурсов.
• Стандартная библиотека была оптимизирована: многие функции теперь работают быстрее.
• Улучшены механизмы сборки мусора и управления памятью.
• Расширена поддержка аннотаций типов.
• Повышена стабильность работы интерпретатора при многопоточном выполнении.
• Новый профайлер поможет выявлять узкие места в коде без необходимости останавливать приложение.
• Версия стабильна и подходит для использования в продакшене.
• Снижены задержки и накладные расходы, улучшена работа с асинхронным кодом и большими объемами данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯18🤣6😁5👍1🤔1
journalctl — это мощный инструмент для систем на базе systemd. Вот несколько практичных советов.
journalctl -f
Это аналог команды tail -f, но для системного журнала. Круто, когда вы отлаживаете службу и хотите следить за новыми записями в реальном времени.
journalctl -u nginx.service -f
Удобно, если проблема связана с определённым демоном. Вместо nginx просто укажите нужный сервис (например, aiogram_bot.service, sshd.service и т.д.).
journalctl --since "1 hour ago"
journalctl --since "2025-10-01" --until "2025-10-02 03:00"
Это позволяет быстро сузить временной диапазон и увидеть проблему в контексте.
journalctl -p err..emerg
Эта команда покажет только серьёзные сообщения (ошибки, критические, предупреждения и экстренные). Особенно полезно, когда логи «шумные».
journalctl _PID=12345
journalctl _UID=1000
journalctl _SYSTEMD_UNIT=nginx.service
Метаданные systemd позволяют удобно фильтровать информацию.
journalctl -o short-iso # для удобных временных меток
journalctl -o json-pretty # для автоматического парсинга и анализа
Если вам нужно автоматизировать обработку логов, используйте вывод в формате JSON.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤4😁3
• Установи requests: pip install requests• Укажи URL сервиса, интервал проверки — и запускай скрипт.• Скрипт каждые N секунд шлёт GET и пишет статус (OK / FALLING). Можно использовать как простой аптайм-мониторimport time
import requests
URL = "https://example.com
" # что мониторим
INTERVAL = 10 # сек между проверками
def check():
try:
r = requests.get(URL, timeout=5)
if r.status_code == 200:
print("OK:", URL, r.status_code)
else:
print("WARNING:", URL, r.status_code)
except Exception as e:
print("DOWN:", URL, "->", e)
while True:
check()
time.sleep(INTERVAL)
— requests.get(URL, timeout=5) проверяет, отвечает ли сервис и не висит ли.
— status_code != 200 или Exception → считаем, что сервис нестабилен.
— INTERVAL регулирует частоту опроса (не ставь слишком низко, чтобы не ддосить сам себя).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤6
Показываю, как отказаться от ручной возни со строками и начать работать с путями по-питонячьи: через объекты, методы и оператор /. Чисто, удобно и без ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
КАК СОЗДАТЬ КЛАССЫ ❓
Это можно сделать двумя способами.
🔹 Первый и распространенный – использование ключевого слова
🔹 Второй метод – динамическое создание класса с помощью функции
Это позволяет формировать классы быстро, передавая
🐍 Ghostly Python | #фишки
class, как показано в примере с классом Person, который имеет инициализатор и метод say_hello.class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
return f"Привет, я {self.name}!"
p = Person("Соня")
print(p.say_hello()) # Привет, я Соня!
type().Это позволяет формировать классы быстро, передавая
type() имя класса, базовые классы (кортеж) и словарь с атрибутами (методами и переменными класса).Person = type("Person", (object,), {
"__init__": lambda self, name: setattr(self, "name", name),
"say_hello": lambda self: f"Привет, я {self.name}!"
})
p = Person("Соня")
print(p.say_hello()) # Привет, я Соня!Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🤯8👎2🔥2🥰1
littleutils — это компактная утилита для Python 3, предлагающая набор полезных функций-помощников.Библиотека, актуальная версия которой 0.2.4 (июль 2024), занимает всего около 8 КБ. Она отлично подходит как легкий "инструментарий" для проектов с малой нагруззкой.
Установка проста:
pip install littleutils.Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5🤮5❤2👀1
Понимание этой разницы необходимо при работе с аргументами функций, проектировании API и использовании изменяемых объектов как ключей в словарях.
Изменяемые объекты: Oни могут быть изменены после создания. Например, при передаче списка (list) в функцию, любые изменения внутри функции повлияют на исходный список:
def add_item(lst):
lst.append(100)
my_list = [1, 2, 3]
add_item(my_list)
print(my_list) # [1, 2, 3, 100]
Примеры изменяемых типов:
list, dict, set.Неизменяемые объекты: Они не могут быть изменены после создания; любая операция, кажущаяся изменением, фактически создает новый объект. Если бы
my_list был кортежем (tuple), попытка изменения вызвала бы ошибку.Примеры неизменяемых типов:
int, float, str, tuple, frozenset.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13💩10👏3😁3😱3