Pythoner (@pythonercode) — Telegram-канал | Telegram Dialogs
Все каналы
Pythoner

Pythoner

@pythonercode

6.7K подписчиков технологии 💬 Комментарии открыты

Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode

Последние публикации

Pythoner
20.07.2026 10:31 · 👁 339
Java: разберись в многопоточности за 1 урок Не теряй время на поиск разрозненных гайдов: на открытом уроке соберём базу по многопоточности в Java в единую картину. Узнать больше #реклама 16+ otus.ru О рекламодателе
Pythoner
16.07.2026 10:08 · 👁 556
✈️Memray - это библиотека для профилирования памяти и она является важным инструментом оптимизации производительности Python программ. ➡️Библиотека отслеживает выделение и освобождение памяти при работе программы, поддерживает отслеживание ссылок на объект, применятся для профилирования на серверах и в виртуальных окружениях. ➡️Основные функции: 💬Отслеживание выделения памяти в реальном времени. 💬Анализ использования памяти по различным объектам и их типам. 💬Предоставление удобных отчетов и визуализаций для упрощения диагностики. ➡️Пример использования: Memray для профилирования вашего Python-кода. Вот простой пример: import memray @memray.start() def my_function(): # Пример кода, который может выделять память a = [i for i in range(100000)] b = [j ** 2 for j in a] return b my_function() # Сохранение отчета о профилировании memray.stop() ✅После завершения работы вашей функции Memray создаст файл отчета, который можно анализировать с использованием команд: memray flamegraph <report_file> ⬆️Это визуализирует распределение памяти, что поможет вам лучше понять, как ваша программа использует память и где могут возникнуть проблемы. 🐍Pythoner
Pythoner
06.07.2026 13:05 · 👁 6.3K
✈️Модуль secrets предоставляет инструменты для создания безопасных случайных данных, сложнее предсказать. ➡️Функции модуля secrets: 1. secrets.choice(sequence): Выбирает случайный элемент из последовательности. Полезно для генерации случайных выборок или паролей из определенного набора символов. 2. secrets.randbelow(n): Возвращает случайное число от 0 до n-1. Используется для генерации случайных чисел в определенном диапазоне. 3. secrets.randbits(k): Генерирует k случайных битов. Полезно для создания случайных битовых строк или чисел. 4. secrets.token_bytes(nbytes=None): Генерирует безопасную случайную последовательность байтов длиной nbytes (по умолчанию - 32 байта). 5. secrets.token_hex(nbytes=None): Генерирует безопасную случайную строку в шестнадцатеричном формате длиной nbytes (по умолчанию - 32 байта). 6. secrets.token_urlsafe(nbytes=None): Генерирует безопасную случайную URL-совместимую строку длиной nbytes (по умолчанию - 32 байта). 7. secrets.compare_digest(a, b): Сравнивает две строки для предотвращения временных атак. Это полезно при сравнении хэшей паролей или токенов без утечки информации о длине сравниваемых строк. 🔎Почему использовать secrets? - secrets предоставляет криптографически безопасные данные, что делает их сложными для предсказания. - Эти функции обеспечивают высокий уровень безопасности при генерации случайных данных, паролей и токенов в Python. 🔐Используйте модуль secrets для защиты вашей информации и обеспечения безопасности ваших данных в Python. 🐍Pythoner
Pythoner
25.06.2026 05:56 · 👁 4.2K
✈️Тернарный оператор, также известный как условный оператор, является уникальным оператором, который используется для выполнения конденсированных версий простых операторов if-else. Он принимает три аргумента: условие, значение, если условие истинно, и значение, если условие ложно. ➡️Применение тернарного оператора Тернарный оператор используется, когда мы хотим сократить код и упростить чтение. Это особенно полезно в случаях, когда нам нужно сделать простое условное присваивание. Однако из-за его сжатого формата, использование тернарного оператора в сложных условиях может затруднить понимание кода. ➡️Тернарный оператор в Python Да, Python поддерживает тернарный оператор. В Python тернарный оператор выглядит следующим образом: x if condition else y. Здесь x присваивается, если условие истинно, иначе присваивается y. ➡️Пример использования тернарного оператора в Python: age = 15 type = "teenager" if age < 18 else "adult" print(type) # Выведет: teenager ⬆️В этом примере, если переменная age меньше 18, переменной type присваивается значение "teenager", в противном случае - "adult". 🐍 Pythoner
Pythoner
15.06.2026 17:36 · 👁 4.3K
✈️Сегодня мы нырнем в глубины Python и раскопаем настоящие жемчужины — нестандартные способы использования декораторов. Держитесь крепче, будет интересно! ➡️Декораторы на стероидах: когда обычных функций мало Помните, как вы впервые узнали о декораторах? Наверняка это было что-то вроде @staticmethod или простенького таймера. Но, друзья мои, это лишь верхушка айсберга! Давайте посмотрим, как можно выжать из декораторов все соки. ➡️1. Декоратор-шпион: следим за аргументами import functools def spy_args(func): @functools.wraps(func) def wrapper(*args, **kwargs): print(f"Вызов {func.__name__} с аргументами: {args}, {kwargs}") return func(*args, **kwargs) return wrapper @spy_args def секретная_функция(x, y, шифр="007"): return x + y результат = секретная_функция(3, 4, шифр="008") ⬆️Этот хитрый декоратор не просто логирует вызовы, он позволяет отслеживать все входящие аргументы. Представьте, как это может пригодиться при отладке сложных систем! ➡️2. Декоратор-трансформер: меняем возвращаемое значение def to_json(func): import json @functools.wraps(func) def wrapper(*args, **kwargs): result = func(*args, **kwargs) return json.dumps(result) return wrapper @to_json def получить_данные(): return {"имя": "Алиса", "возраст": 30} json_data = получить_данные() ⬆️Этот декоратор автоматически сериализует результат в JSON. Удобно, правда? Особенно когда вы работаете с API и вам нужно гарантировать формат ответа. ➡️3. Декоратор-многостаночник: применяем несколько функций def применить_все(*funcs): def декоратор(f): @functools.wraps(f) def wrapper(*args, **kwargs): result = f(*args, **kwargs) for func in funcs: result = func(result) return result return wrapper return декоратор def удвоить(x): return x * 2 def прибавить_один(x): return x + 1 @применить_все(удвоить, прибавить_один) def базовая_функция(x): return x результат = базовая_функция(10) # Вернёт 21 ⬆️Этот монстр позволяет применить целую цепочку функций к результату. Представьте, как это может упростить обработку данных в сложных потоках! ➡️4. Декоратор-ленивец: отложенное выполнение class Ленивый: def __init__(self, function): self.function = function self.результат = None def __call__(self, *args, **kwargs): if self.результат is None: self.результат = self.function(*args, **kwargs) return self.результат @Ленивый def сложные_вычисления(): print("Выполняю сложные вычисления...") return 42 результат = сложные_вычисления() # Вычисления выполняются результат = сложные_вычисления() # Используется кэшированный результат ⬆️Этот декоратор позволяет отложить выполнение функции до момента первого вызова, а затем кэширует результат. Идеально для оптимизации производительности! 🐍Pythoner
Pythoner
09.06.2026 14:09 · 👁 1.3K
✈️Проблема традиционного подхода Многие статьи рекомендуют создавать полноценный React SPA и использовать Django только как REST API. Однако такой подход имеет ряд недостатков, особенно для небольших проектов: 💬Дублирование кода (маршрутизация, аутентификация, авторизация) 💬Необходимость создания отдельных страниц ошибок 💬Дублирование состояний и моделей данных Хотя для некоторых проектов это может быть приемлемым решением, для моего небольшого приложения такой подход кажется излишним. ➡️Альтернативное решение: React как шаблонизатор Идея заключается в том, чтобы использовать React не как полноценный фронтенд-фреймворк, а как шаблонизатор для Django. Это позволит нам сохранить преимущества обоих инструментов. ➡️Точки монтирования React React имеет удобное свойство: он монтируется не просто в body DOM или случайное место, а именно в указанный вами элемент. Мы можем использовать это для реализации маршрутизации, используя одну точку монтирования для каждой страницы: ReactDOM.render( &lt;h1&gt;Страница 1!&lt;/h1&gt;, document.getElementById('page-1') ); ReactDOM.render( &lt;h1&gt;Страница 2!&lt;/h1&gt;, document.getElementById('page-2') ); ➡️Маршрутизация на стороне Django На стороне Django нам нужно только отрендерить &lt;div&gt; с соответствующим идентификатором: {% extends "base.html" %} {% load static %} {% block content %} &lt;div id="{{ element_id }}"&gt;&lt;/div&gt; &lt;script src="{% static 'index.js' %}"&gt;&lt;/script&gt; {% endblock %} ➡️Оптимизация размера пакета Чтобы не загружать JavaScript для неиспользуемых страниц, мы можем использовать встроенную функцию React - Code Splitting: let Page1 = React.lazy(() => import('./page1')) let Page2 = React.lazy(() => import('./page2')) ReactDOM.render( &lt;Suspense fallback={&lt;&gt;&lt;/&gt;}&gt; &lt;Page1/&gt; &lt;/Suspense&gt;, document.getElementById('page-1') ); ➡️Передача контекстных данных Для передачи данных из Django в React мы можем использовать встроенный в Django тег json_script: {% extends "base.html" %} {% load static %} {% block content %} &lt;div id="{{ element_id }}"&gt;&lt;/div&gt; {{ page_context | json_script:'page-context' }} &lt;script src="{% static 'index.js' %}"&gt;&lt;/script&gt; {% endblock %} ➡️На стороне React мы можем получить эти данные с помощью пользовательского хука: export let usePageContext = &lt;T = any&gt;() => { let [pageContext, setPageContext] = useState&lt;T | undefined&gt;(undefined) useEffect(() => { let pageContext = document.getElementById('page-context').textContent setPageContext(JSON.parse(pageContext)) }, []) return pageContext as T } const TodosIndexPage = memo(() => { let pageContext = usePageContext&lt;{ todos: Todo[] }&gt;() let todos = pageContext?.todos return &lt;&gt; &lt;h1&gt;React todos page&lt;/h1&gt; &lt;ul&gt; {todos?.map(todo => &lt;li key={todo.id}&gt;{todo.title}&lt;/li&gt;)} &lt;/ul&gt; &lt;/&gt; }) 💡Заключение Этот подход позволяет использовать React как шаблонизатор для Django, сохраняя при этом простоту разработки и избегая дублирования кода. Основные шаги для реализации: 💬Создание отдельных точек монтирования для React 💬Настройка разделения кода для оптимизации производительности 💬Реализация маршрутизации на стороне Django 💬Передача контекста страницы из Django в React 💬Получение и использование контекста страницы на стороне React 🐍Pythoner
Pythoner
02.06.2026 16:06 · 👁 1.2K
✈️Анализ текста с помощью spaCy ➡️Токенизация и лемматизация SpaCy предоставляет эффективные инструменты для разбиения текста на токены и определения их базовых форм: import spacy nlp = spacy.load("ru_core_news_sm") doc = nlp("Кошки любят спать на мягких подушках.") for token in doc: print(f"{token.text} -> {token.lemma_}") ➡️Определение частей речи SpaCy автоматически определяет части речи для каждого токена: for token in doc: print(f"{token.text} - {token.pos_}") ➡️Распознавание именованных сущностей Библиотека способна выделять в тексте именованные сущности, такие как имена, организации и локации: for ent in doc.ents: print(f"{ent.text} - {ent.label_}") ➡️Генерация текста с использованием spaCy Хотя spaCy в первую очередь предназначен для анализа текста, его можно использовать и для помощи в генерации: ➡️Использование зависимостей для построения предложений SpaCy определяет синтаксические зависимости между словами, что может быть использовано для создания новых предложений: def generate_sentence(subject, verb, object): doc = nlp(f"{subject} {verb} {object}") return " ".join([token.text for token in doc]) print(generate_sentence("Программист", "пишет", "код")) ➡️Использование векторных представлений слов Векторные представления слов в spaCy могут быть использованы для поиска семантически близких слов: def find_similar_word(word, n=3): token = nlp(word)[0] similar_words = [] for lex in nlp.vocab: if lex.has_vector: if lex.is_lower == token.is_lower and lex.is_alpha: similarity = token.similarity(lex) similar_words.append((lex.text, similarity)) return sorted(similar_words, key=lambda x: x[1], reverse=True)[:n] print(find_similar_word("компьютер")) 🐍Pythoner
Pythoner
28.05.2026 14:15 · 👁 1.4K
✈️Тернарный оператор — это оператор, позволяющий записать условную конструкцию if-else в одну строку. ➡️Тернарный оператор часто используется для условного присваивания значений переменной, выбора между двумя вариантами в одну строку. Он позволяет сократить и упростить запись условных выражений. Однако не рекомендуется использовать вложенные конструкции, т. к. это ухудшает читаемость. ➡️Простой пример: a = 3 b = 10 print('a больше b') if a > b else print('a меньше b') result = 'Четное' if a % 2 == 0 else 'Нечетное' print(result) # Результат: # a меньше b # Нечетное ⬆️В данном примере тернарный оператор используется: —Для вывода одной из двух фраз в зависимости от условия a > b. —Для присваивания переменной result одного из двух значений в зависимости от четности a. 🐍Pythoner
Pythoner
22.05.2026 14:10 · 👁 1.5K
✈️Что такое итерируемый счетчик? Итерируемый счетчик в Python - это объект, который можно использовать в цикле for и других итерационных контекстах. Он позволяет последовательно получать значения, обычно числовые, в заданном диапазоне или по определенному правилу. ➡️Реализация итерируемого счетчика Давайте рассмотрим пример реализации простого итерируемого счетчика: class IterableCounter: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): return self def __next__(self): if self.current > self.end: raise StopIteration else: self.current += 1 return self.current - 1 В этом примере: 💬init инициализирует счетчик начальным и конечным значениями. 💬iter возвращает сам объект, делая его итератором. 💬next определяет логику получения следующего значения. ➡️Использование итерируемого счетчика Теперь мы можем использовать наш счетчик в цикле for: counter = IterableCounter(1, 5) for num in counter: print(num) ⬆️Этот код выведет числа от 1 до 5. ➡️Преимущества итерируемого счетчика 💬Гибкость: можно легко изменить логику генерации значений. 💬Экономия памяти: значения генерируются по мере необходимости. 💬Интеграция с циклами: легко использовать в стандартных конструкциях Python. ➡️Альтернативы В Python есть встроенные альтернативы для простых случаев: 💬range(): для последовательностей целых чисел. 💬enumerate(): для нумерации элементов итерируемого объекта. 💡Заключение Итерируемые счетчики в Python - мощный инструмент для создания пользовательских последовательностей. Они особенно полезны, когда стандартные функции не удовлетворяют специфическим требованиям вашей задачи. 🐍Pythoner
Pythoner
16.05.2026 13:07 · 👁 1.9K
✈️Монолитная архитектура Монолитная архитектура представляет собой традиционный подход к разработке приложений, где все компоненты тесно связаны и работают как единое целое. ➕Преимущества: 💬Простота разработки и развертывания 💬Легкость в отладке и тестировании 💬Высокая производительность из-за отсутствия сетевых задержек между компонентами ❌Недостатки: 💬Сложность масштабирования отдельных компонентов 💬Затруднительное внедрение новых технологий 💬Риск "снежного кома" при росте сложности проекта ➡️Микросервисная архитектура Микросервисная архитектура разбивает приложение на набор небольших, независимых сервисов, каждый из которых отвечает за конкретную бизнес-функцию. ➕Преимущества: 💬Гибкость в выборе технологий для каждого сервиса 💬Легкость масштабирования отдельных компонентов 💬Возможность независимой разработки и развертывания сервисов ❌Недостатки: 💬Сложность в управлении и оркестрации множества сервисов 💬Повышенные требования к инфраструктуре 💬Потенциальные проблемы с производительностью из-за сетевых взаимодействий 🔎Что выбрать для вашего проекта? Выбор архитектуры зависит от нескольких факторов: ➡️Выбирайте монолитную архитектуру, если: 💬У вас небольшой проект или стартап 💬Вам нужно быстро вывести продукт на рынок 💬У вас ограниченные ресурсы для разработки и поддержки ➡️Выбирайте микросервисную архитектуру, если: 💬У вас крупный проект с множеством функций 💬Вам нужна высокая масштабируемость и гибкость 💬У вас есть ресурсы для управления сложной инфраструктурой ➡️Заключение Выбор между микросервисами и монолитной архитектурой не является универсальным. Каждый подход имеет свои сильные стороны, и правильный выбор зависит от конкретных требований вашего проекта, ресурсов команды и долгосрочных целей. Важно тщательно оценить все факторы и принять решение, которое наилучшим образом соответствует вашим потребностям. 🐍Pythoner
Чат поддержки
Ответим здесь же, обычно быстро
Здравствуйте! Напишите ваш вопрос — оператор ответит в этом чате.