Telegram Web
Что такое JSON и зачем он нужен

JSON (JavaScript Object Notation) — текстовый формат для обмена данными, удобный для людей и машин. Он возник в экосистеме JavaScript, но стал язык-независимым стандартом для API, конфигураций и документных хранилищ. Формат простой: объекты (пар «ключ: значение») и массивы — это основные строительные блоки.

Почему Python-разработчику это важно:

🔘 JSON часто используется в web-API, логах, конфигурациях и при обмене данными между сервисами.
🔘 Python имеет встроенный модуль json, который делает сериализует (Python → JSON) и десериализует (JSON → Python).


Синтаксис JSON

🔘 Строки — в двойных кавычках ("...");
🔘 Логические значения — в нижнем регистре: true / false (в Python — True / False);
🔘 Отсутствующее значение — null (в Python → None);
🔘 Нельзя оставлять комментарии и нельзя ставить завершающие запятые после последнего элемента.

Валидный JSON:


{
"name": "Frieda",
"isDog": true,
"hobbies": ["eating", "sleeping"],
"age": 8,
"address": {"home": ["Berlin", "Germany"], "work": null}
}



Модуль json

Главные функции одноименного модуля стандартной библиотеки:

🔘 json.dumps(obj, **opts) — сериализует Python-объект в строку JSON;
🔘 json.dump(obj, fp, **opts) — сериализует и записывает в файл-объект;
🔘 json.loads(s) — парсит JSON-строку в Python-объект;
🔘 json.load(fp) — считывает JSON из файла и парсит.

Эти функции следуют стандартному отображению типов: словари → объекты, списки → массивы, строки → строки, числа → числа, True / Falsetrue / false, Nonenull.


import json

data = {"name": "Frieda", "age": 8, "is_dog": True}
s = json.dumps(data) # --> '{"name": "Frieda", "age": 8, "is_dog": true}'
obj = json.loads(s) # --> {'name': 'Frieda', 'age': 8, 'is_dog': True}



Полезные параметры dumps / dump

При сериализации полезны параметры:

🔘 indent — делает вывод читабельным (pretty print) (например, indent=2);
🔘 sort_keys=True — сортирует ключи объекта по алфавиту;
🔘 separators — позволяет контролировать символы между элементами (полезно для минификации);
🔘 ensure_ascii=False — по умолчанию json экранирует не-ASCII символы; если хотите сохранить UTF-8 в читаемом виде, ставьте False;
🔘 skipkeys=True — пропускает неподдерживаемые типы ключей вместо TypeError (использовать осторожно — вы можете потерять данные).


Маппинг типов

При загрузке JSON в Python выполняется обратное отображение типов:

* objectdict
* arraylist
* stringstr
* numberint / float
* true`/`falseTrue`/`False
* nullNone

JSON-ключи — всегда строки. Если у вас в исходном Python-словаре были числовые ключи (например {1: "a"}`), при сериализации они станут строками (`"1"`). После `json.loads() вы получите ключи как строки — Python не "угадает" исходный тип. Это частая ловушка при конвертации словарей ключами-числами.


Полезные утилиты и приёмы

🔘 python -m json.tool — встроенная утилита для форматирования/проверки JSON в терминале (можно использовать для prettify/minify);
🔘 Онлайн-валидаторы (например, JSONLint) и редакторы с подсветкой помогут быстро найти синтаксические ошибки (комментарии, лишние запятые и т. п.).


Подборка примеров

Читаем JSON из файла:

import json

with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)


Записываем с красивым форматированием:

with open("data_pretty.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, sort_keys=True, ensure_ascii=False)


Сериализуем datetime:

from datetime import datetime
import json

def default(o):
if isinstance(o, datetime):
return o.isoformat()
raise TypeError

json.dumps({"now": datetime.utcnow()}, default=default)


Проверяем валидность JSON в CLI

python -m json.tool input.json > /dev/null
# код возврата 0 — валидный JSON


#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
10
Фабрики в Python

В программировании довольно часто встречается задача: в зависимости от входных данных нужно выбрать подходящий класс для обработки. Например, у нас есть XML-файлы и JSON-файлы, и мы хотим написать систему, которая будет их импортировать.

На первый взгляд решение простое — внутри метода проверять расширение файла и создавать соответствующий объект. Но у такого подхода есть несколько серьёзных недостатков. Именно здесь на помощь приходит паттерн «Фабрика».

Рассмотрим упрощённый пример кода:


class XMLImporter:
def __init__(self, filename):
self.filename = filename

def execute(self):
print("XML imported from", self.filename)


class JSONImporter:
def __init__(self, filename):
self.filename = filename

def execute(self):
print("JSON imported from", self.filename)


class Document:
def import_file(self, filename):
if filename.endswith(".xml"):
importer = XMLImporter(filename)
elif filename.endswith(".json"):
importer = JSONImporter(filename)
data = importer.execute()


document = Document()
document.import_file("text.xml")
document.import_file("text.json")


На первый взгляд код рабочий, но здесь нарушаются два принципа SOLID:

1️⃣ Принцип единственной ответственности (Single Responsibility Principle): класс Document отвечает сразу за создание объектов XMLImporter, JSONImporter и их использование.

2️⃣ Принцип открытости / закрытости (Open / Closed Principle).
Если появится новый формат (например, CSV), придётся снова лезть в метод import_file и расширять блок if / elif.


Решение: фабрика

Чтобы убрать ответственность за создание объектов из класса Document, вводится так называемася фабрика. Это объект, который берёт на себя ответственность за создание других объектов. Она не избавляет нас полностью от изменения кода при добавлении новых форматов, но значительно улучшает читаемость, гибкость и расширяемость системы.


class ImporterFactory:
def get_importer(self, filename):
if filename.endswith(".xml"):
return XMLImporter(filename)
elif filename.endswith(".json"):
return JSONImporter(filename)


Теперь Document больше не знает, как именно создаются нужные классы. Ему просто передают готовую фабрику:


class Document:
def __init__(self, factory):
self.factory = factory

def import_file(self, filename):
importer = self.factory.get_importer(filename)
data = importer.execute()


factory = ImporterFactory()
document = Document(factory)

document.import_file("text.xml")
document.import_file("text.json")


Преимущества фабрики

1️⃣ Изоляция ответственности: логика создания объектов теперь сосредоточена только в одном месте — в ImporterFactory.
2️⃣ Гибкость: если нужно добавить поддержку нового формата (CSV, YAML и т.д.), достаточно изменить фабрику, не трогая Document.
3️⃣ Удобное тестирование: в тестах можно подменить фабрику на «фиктивную» (mock) и проверять работу Document независимо от импортеров.


Что дальше?

Фабрика — это базовый паттерн. На его основе строятся более сложные подходы, например:

🔘 Factory Method — когда создание объектов делегируется подклассам.
🔘 Abstract Factory — когда фабрика создаёт целые семейства объектов, согласованных между собой.

#основы
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👎4🔥21
​​typing-extensions | Машинка времени для фичей ЯП

Вечный участник рейтинга самых скачиваемых библиотек PyPi, модуль предоставляет дополнительные возможности для аннотаций типов, которые либо были добавлены в стандартный модуль typing в более поздних версиях Python, либо являются экспериментальными и ещё не включены в стандарт.

Тот случай, когда переходить на новую версию языкового пакета нет желания, а использовать новую фичу есть.

#инструмент
@zen_of_python
1
This media is not supported in your browser
VIEW IN TELEGRAM
leapcell.io | Деплой-сервис для вашего сайта / API

Аналог Heroku, система дарит возможность задеплоить до 20 проектов на JavaScript / Python / Go / Rust с 3-мя ядрами CPU на каждый из них. Дают одну сущность PostgreSQL. Как и во многих аналогичных деплой-сервисах, коннектится с вашим GitHub-аккаунтом и пуллит оттуда. Обещают отсутствие скрытых платежей за «выдающийся» трафик.

Доступен в РФ: да
Минимальная цена: есть Freemium
@prog_tools
👍21🗿1
Вышел Django 6.0 (альфа-версия)

17 сентября 2025 года команда Django представила шестую версию фреймворка. Это новый крупный релиз, в котором есть несколько фундаментальных улучшений.

Поддержка новых версий Python

🔘 Django 6 официально поддерживает Python 3.12 и 3.13;
🔘 Поддержка Python 3.10 и 3.11 прекращена.


Поддержка CSP

Content Security Policy (CSP) — это механизм безопасности веб-приложений, который через специальные HTTP-заголовки ограничивает, какие скрипты, стили и ресурсы может загружать и выполнять браузер, защищая от XSS и похожих атак.

Ранее для CSP приходилось ставить сторонние пакеты. Теперь же:

🔘CSP встроен в ядро Django;
🔘Поддерживаются nonce-атрибуты для защиты inline-скриптов;
🔘Настройка выполняется через middleware и шаблонные процессоры;

Это сократит ваш requirements.txt и обеспечит больше безопасности «из коробки».


Фоновые задачи

Одно из самых ожидаемых нововведений: встроенная система фоновых задач. Новый декоратор @task позволяет превращать любую функцию в асинхронное задание.

🔘 ImmediateBackend — выполняет задачу сразу (удобно для разработки)
🔘 DummyBackend — добавляет задачу в очередь, но не исполняет (для тестирования логики)

В будущем планируются интеграции с реальными брокерами (Postgres, Redis, RabbitMQ).


Template Partials: переиспользуемые компоненты
Фронтенд-разработчикам понравится. Новый механизм partials:

🔘 Позволяет определять фрагменты шаблона через partialdef;
🔘 Поддерживает параметры и повторное использование в циклах и разных местах страницы;
🔘 Устраняет дублирование кода, упрощает дизайн-системы на Django Templates.

Это шаг в сторону компонентного подхода, знакомого пользователям React / Vue, но в экосистеме Django.


Другие изменения
🔘 В циклах теперь можно использовать forloop.length, чтобы узнать размер итерации (ранее были только forloop.counter, forloop.first, forloop.last и т.п.)
🔘 Более корректная работа с Unicode, MIME-типами и вложениями в емейлах;
🔘 Обновления для PostgreSQL и других баз данных;
🔘 Традиционные улучшения производительности и совместимости;
🔘 Альфа-релиз означает feature freeze: новые возможности добавлены, впереди тестирование и исправление багов.

#факт
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
Что нового в Python 3.14: разбираем главные изменения

В статье на Tproger рассказали о ключевых нововведениях Python 3.14:
— t-строки (строки-шаблоны с префиксом t), которые не вычисляются сразу, а дают разработчику контроль над подстановкой значений;
— отложенные аннотации типов, которые вычисляются только при первом доступе, что решает проблемы с циклическими импортами;
— новые методы pathlib (copy, move) и другие новшества.

#факт
@zen_of_python
PEP 804 | Про разные зависимости в разных ОС

Новый Python Enhancement Proposal вводит механизм мэппинга внешних зависимостей для разных операционок.

Пример

Если пакет A требует внешнюю библиотеку zlib, в pyproject.toml указывают, например, dep:generic/zlib. С помощью маппингов можно получить, что на Debian это zlib1g-dev, на Fedora — zlib-devel, или в conda — zlib. Инструмент выдаст команду в зависимости от текущей экосистемы:


sudo apt install zlib1g-dev


или


conda install zlib


Дабы не делать пост уж слишком лонгридом, для просмотра схемы мэппинга переадресуем вас в соответствующий раздел PEP.

p.s. На изображении гипотетический мэппинг для conda-forge.

#факт
@zen_of_python
4
​​SQLCheck | Оптимизируем запросы

Мало кто задумывается о затратности / оптимальности того или иного SQL-запроса при верстке. Скорее уж потом, когда приходят счета за облачную БД или прилетает от тимлида на код-ревью.

SQLCheck — статический анализатор, который автоматически выявляет распространённые антипаттерны (рекурсии, отсутствие первичного ключа, SELECT * и многие другие).

Доступен в РФ: да
Цена: бесплатно
@prog_tools
👍32
​​django-silk | Профилирование HTTP- и SQL-запросов

Инструмент «перехватывает» запросы и ответы, собирая детальную статистику:
— длительность выполнения;
— заголовки, тела запросов / ответов;
— таблицы-источники.

Также поддерживаются ручное профилирование блоков кода через декораторы и контекстные менеджеры, динамическое профилирование функций. Хороший способ найти узкие места производительности в вашем Django-проекте.

#инструмент
@zen_of_python
👍2🙈1
Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте.

#обсуждение
@zen_of_python
👍2
И жнец, и на дуде игрец, знакомо?
Спасибо @fobyphill за идею мема :)
#кек
@zen_of_python
10
Придумайте смешную подпись к фото, но так, чтобы это относилось к языку программирования Python.

#кек #обсуждение
@zen_of_python
😁4
Тоже поймали себя на том, что положение Python в этой сетке устраивает?
#кек
@zen_of_python
Это что, первая конференция для лидов и менеджеров от Авито Тех?

Да! avito.tech.conf пройдёт 17 октября в Москве и онлайн.

В программе — доклады про управление командами и процессами от экспертов Авито, интерактивные зоны, где можно прочувствовать их менеджерскую культуру, практические воркшопы и море возможностей для нетворка с лидами из крупных IT-компаний.

Темы:
— лидерство и развитие до C-level;
— AI и то, как он меняет роль техруководителей и управление командами;
— адаптивность и процессы в меняющемся мире;
— люди и выстраивание эффективных отношений с командами.

Звучит как событие, которое точно стоит добавить в календарь.
Регистрируйтесь по ссылке — места ограничены.

Реклама. ООО «Авито Тех» Erid 2VtzqwgnGxD
А розовые образования вообще навайбкодили
p.s. Это из Босха
#кек
@zen_of_python
👍3😁1
​​Python снова № 1 в рейтинге ЯП, но...

IEEE Spectrum (популярный в США журнал для инженеров всех направлений) опубликовал рейтинг языков программирования 2025 года, и Python снова оказался на первом месте. Авторы рейтинга отмечают, что привычные способы измерять популярность перестали работать. Запросов на форумах вроде Stack Overflow — лишь 22% от прежнего уровня, ведь теперь разработчики задают вопросы напрямую ИИ. Авторы отмечают, что роль программиста меняется — важнее становятся архитектура, алгоритмы и интеграция систем, а не знание синтаксиса. При этом новым языкам всё труднее пробиваться, потому что LLM-модели тяготеют к уже распространённым инструментам.

#факт
@zen_of_python
1👍1🌚1
Программирование на Python с помощью GitHub Copilot и ChatGPT

Ну что ж, приехали, книга по вайб-кодингу... В этом издании от авторов Портера и Зингаро вы узнаете, как:
— настраивать ИИ-расширения для разных IDE;
— составлять ТЗ-промт, в том числе декомпозировать задачи;
— проектировать функции;
— делегировать тесты нейронкам и многое другое.

NB! Zen of Python призывает новичков осваивать базу, чтобы вы понимали, что вайбкодите.

#обучение #книга
@zen_of_python
😢42😁21
Нестандартные интерфейсы на Python: как вставить кнопки, как на пульте ТВ?

А что если ваш UI должен содержать кнопки нестандартной формы? Как на пульте ТВ / игровом джойстике, к примеру. Tkinter, к примеру, такое не умеет.

Один австралийский разработчик решил эту задачу, написав библиотеку GIMPy-Widget-UI. Библиотека позволяет проектировать в графическом редакторе такие нестандартные элементы и делать их интерактивными с минимальным объёмом кода.

#инструмент
@zen_of_python
Френдли фаер: наши привычки, которые медленно, но верно бьют по суставам и мышцам

Мы привыкли думать, что проблемы со спиной и суставами начинаются только от сидячки. Но есть куча мелких бытовых жестов, которые каждый день копят нагрузку и тихо разрушают тело:

— Держать телефон между ухом и плечом.
— Рюкзак или сумка всегда на одной стороне.
— Стоять, перенося вес только на одну ногу.
— Сидеть, поджимая ногу под себя.
— Скрещивать ноги за столом или закидывать одну на другую.
— Носить кроссовки без поддержки пятки и свода (особенно дешёвые тряпочные).
— Долго сидеть, положив локоть на стол и опираясь на подбородок.
— Спать всё время на одном боку в одной позе.
— Работать за ноутбуком, постоянно смотря чуть вниз.
— Часто носить тяжёлые пакеты «в одну руку».

Всё это со временем даёт защемления, перекосы и хронические боли. Так что позаботьтесь, чтобы убрать их из быта.

#суставы #советы
55👎2🕊1
«Я перестал думать»: чем опасен ИИ и вайб-кодинг для разработчиков

Один опытный разработчик предупредил новичков:

Лёгкость, с которой ИИ решает задачи, постепенно стирает ваше понимание процесса. Возникает дофаминовая ловушка, почти как при бессмысленном скроллинге ленты соцсетей — быстрое «удовольствие» без усилий и без реального роста.


Что делать неофиту в эпоху вайб-кодинга, чтобы вырасти в настоящего профи — смотрите в статье.

#обучение
@zen_of_python
👍53👎2
2025/10/15 19:48:13
Back to Top
HTML Embed Code: