Точка входа в программирование
19.7K subscribers
1.38K photos
254 videos
2 files
2.9K links
Фундаментальные знания по основам программирования

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/zrgj
Download Telegram
Media is too big
VIEW IN TELEGRAM
Как устроены хэш-таблицы

HashSet — это самая популярная структура данных, используемая в программировании. Она позволяет проверять в ней наличие любого элемента за О(1) времени.

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

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

#видео #основы #структурыданных
Делаем красивый мониторинг чего угодно

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

Ловите гайд для начинающих, в котором подробней рассказывают про Grafana и учат использовать её в разных проектах.

#основы #grafana
Forwarded from Zen of Python
__init__.py в Python: зачем он нужен и как с ним работать

Файл __init__.py играет ключевую роль в функционировании модулей и пакетов. В этой посте разберём, зачем нужен этот файл, как его использовать, и какие трюки можно с ним провернуть.

__init__.py используется для обозначения директории как пакета Python. Пакет — это просто каталог, содержащий код, который можно импортировать. До Python 3.3 файл __init__.py был обязателен для того, чтобы Python распознавал директорию как пакет. Начиная с Python 3.3, это уже не строго обязательно благодаря PEP 420, который ввёл поддержку 'implicit namespace packages'.

Тем не менее, __init__.py всё ещё активно используется, потому что он позволяет:

— Настроить импорты, переменные окружения и т.д.;
— Реализовать алиасы и проксировать импорты;
— Управлять логикой и поведением при импорте.

Пример: простой пакет с __init__.py


my_package/
├── __init__.py
├── module1.py
└── module2.py


В __init__.py можно явно указать, какие модули экспортируются:


from .module1 import func1
from .module2 import func2

__all__ = ['func1', 'func2']


Теперь из внешнего кода можно написать:


from my_package import func1, func2


И это сработает — благодаря тому, что __init__.py делает интерфейс «плоским».

Что можно писать в __init__.py

Всё, что угодно — это обычный Python-скрипт. Вот что часто в нём делают:

1. Инициализация логики:


import logging

logging.getLogger(__name__).addHandler(logging.NullHandler())


2. Упрощение структуры:


# Вместо длинного:
from my_package.module1.submodule import ClassA

# можно:
from my_package import ClassA


И в __init__.py:


from .module1.submodule import ClassA


3. Версионирование:


__version__ = "1.0.0"


4. Работа с абсолютными и относительными импортами:

Python различает абсолютные и относительные импорты. Благодаря __init__.py, относительные импорты типа from . import module1 работают корректно.

Когда __init__.py не нужен

PEP 420 ввёл концепцию namespace packages — это директории без __init__.py, которые Python всё равно распознаёт как пакеты. Это удобно, когда вы хотите:

— Распределить один пакет между несколькими каталогами (например, для плагинной архитектуры);
— Избежать необходимости в поддержке пустых __init__.py.

Пример:


project/
├── pkg/
│ └── subpkg1/
│ └── a.py
└── other/
└── pkg/
└── subpkg2/
└── b.py


Если в pkg/ нет __init__.py, Python объединит содержимое в один namespace package.

Когда __init__.py обязателен

— При тестировании и использовании pytest (некоторые тест-раннеры не обнаруживают модули без `__init__.py`);
— При работе с устаревшими инструментами;
— При построении плоского интерфейса пакета;
— Для поддержки специфичных путей и логики импорта.

#основы
22
Forwarded from Zen of Python
Byte of Python | Бесплатный учебник, ставший классикой

Сейчас лето, и при должном везении ваш работодатель слегка расслабился. Можно и книжку почитать.
«Укус питона» — известный бесплатный учебник, который можно скачать в форматах .pdf / .epub вместе с Python-скриптами прямо из репозитория автора Сварупа.

Спасибо @Chellbas за рекомендацию.
#основы
@zen_of_python
👍3
Деструктуризация в JavaScript

Деструктуризация — это удобный инструмент получения данныхв JS. Он позволяет «распаковывать» сразу много значений из массивов или объектов во множество переменных. Это, например, активно используется в React-хуках.

Простейший пример:

const timers = [10, 20, 30];
const [first, second, third] = timers;


Здесь мы одной строкой задаем значения из массива сразу трём переменным — first, second, third.

Подробнее о возможностях и фишках деструктуризации можно прочитать в этой статье.

#javascript #основы
🤓1
Основы работы с массивами и списками: что нужно знать каждому разработчику

Универсальная статья для всех разработчиков, независимо от языка и стека. Здесь собраны базовые концепции массивов и списков в Python, Java, C++. Особенности работы со структурами данных, их практическое применение. В общем всё, что нужно знать, чтобы начать эффективно использовать эти структуры данных.

#основы
1
«О» большое — простое объяснение с картинками

Наверняка при решение задач по программированию или во время чтения статей на эту тему вы натыкались на такое обозначение. Например, время работы этого алгоритма составляет O(n2).

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

#основы
52👎1