Знакомимся с рекурсией
Автор познакомит вас с базовым понятием рекурсии на простых примерах и объяснит, как рекурсивные функции вызывают сами себя для решения подзадач.
#статья #основы
Автор познакомит вас с базовым понятием рекурсии на простых примерах и объяснит, как рекурсивные функции вызывают сами себя для решения подзадач.
#статья #основы
👍6🔥3
Forwarded from Веб-страница
Вопросы с собеседований: что такое специфичность CSS-селекторов и как она работает?
Типы селекторов расположены по возрастанию специфичности:
— Селекторы типов элементов (например, h1) и псевдоэлементов (например, ::before).
— Селекторы классов (например, .example), селекторы атрибутов (например, [type="radio"]) и псевдоклассов (например, :hover)
— Селекторы идентификаторов (например, #example).
Универсальный селектор (*), комбинаторы (+, >, ~, ' ') и отрицающий псевдокласс (:not()) не влияют на специфичность. Но селекторы, объявленные внутри :not(), влияют.
Стили, обьявленные в элементе (например, style="font-weight:bold"), всегда переопределяют любые правила из внешних файлов стилей и, таким образом, их специфичность можно считать наивысшей.
Расчёт специфичности:
— тег и псевдоэлемент имеют специфичность 0001;
— класс, псевдокласс, атрибут — 0010;
— id имеет специфичность 0100;
— инлайновый стиль имеет приоритет 1000.
#основы #собеседование #css
Типы селекторов расположены по возрастанию специфичности:
— Селекторы типов элементов (например, h1) и псевдоэлементов (например, ::before).
— Селекторы классов (например, .example), селекторы атрибутов (например, [type="radio"]) и псевдоклассов (например, :hover)
— Селекторы идентификаторов (например, #example).
Универсальный селектор (*), комбинаторы (+, >, ~, ' ') и отрицающий псевдокласс (:not()) не влияют на специфичность. Но селекторы, объявленные внутри :not(), влияют.
Стили, обьявленные в элементе (например, style="font-weight:bold"), всегда переопределяют любые правила из внешних файлов стилей и, таким образом, их специфичность можно считать наивысшей.
Расчёт специфичности:
— тег и псевдоэлемент имеют специфичность 0001;
— класс, псевдокласс, атрибут — 0010;
— id имеет специфичность 0100;
— инлайновый стиль имеет приоритет 1000.
#основы #собеседование #css
👍9🍌1
Media is too big
VIEW IN TELEGRAM
Полезное видео для тех, кто собирается осваивать SQL
Если вы наконец-то созрели для изучения баз данных, то стоит начать с основ. И это SQL — язык запросов, который просто жизненно необходимо знать при работе с базами данных.
В этом видео вы узнаете, как создавать базы данных, как ими управлять, познакомитесь с основными типами запросов и многое другое. Вверху скачанное видео, а по ссылке первоисточник, если вам хочется посмотреть ролик на YouTube: https://youtu.be/5sG9kmXYsKU
#видео #sql #основы
Если вы наконец-то созрели для изучения баз данных, то стоит начать с основ. И это SQL — язык запросов, который просто жизненно необходимо знать при работе с базами данных.
В этом видео вы узнаете, как создавать базы данных, как ими управлять, познакомитесь с основными типами запросов и многое другое. Вверху скачанное видео, а по ссылке первоисточник, если вам хочется посмотреть ролик на YouTube: https://youtu.be/5sG9kmXYsKU
#видео #sql #основы
👍3❤1
Моё кунг-фу лучше твоего кунг-фу: ключевые парадигмы программирования
Парадигмы программирования — это различные стили или подходы к написанию программного кода. Каждая из них предлагает свой взгляд на структуру и способ взаимодействия компонентов программы. Давайте рассмотрим основные парадигмы и поймем, чем они отличаются.
Императивное программирование
Это один из самых старых и интуитивно понятных подходов. В императивном программировании акцент делается на последовательные шаги, которые компьютер должен выполнить. Программист пишет детальные инструкции о том, как выполняются операции.
Основные элементы: переменные, циклы, условия.
Примеры:
Декларативное программирование
Здесь основной упор делается на то, что нужно сделать, а не на то, как это сделать. Программист описывает результат, который хочет получить, и система сама решает, как это сделать.
Основные элементы: выражения, правила.
Примеры: SQL, регулярные выражения.
Функциональное программирование
Этот подход основывается на математических функциях. Программы состоят из функций, которые не имеют состояния и побочных эффектов. Это делает программы предсказуемыми и легко тестируемыми.
Основные элементы: функции, неизменяемость данных.
Примеры: рекурсия, чистые функции (без побочных эффектов).
Объектно-ориентированное программирование (ООП)
В этом подходе всё строится вокруг объектов. Объекты — это сущности, которые объединяют данные и методы для работы с этими данными. ООП помогает моделировать реальный мир и способствует повторному использованию кода.
Основные элементы: классы, объекты, наследование, инкапсуляция, полиморфизм.
Примеры: создание класса
Логическое программирование
В логическом программировании программы определяются через логические утверждения и правила. Компьютер использует эти правила для вывода заключений и решения задач.
Основные элементы: факты, правила, запросы.
Примеры: базовые логические операции и запросы в Prolog.
Реактивное программирование
Эта парадигма акцентирует внимание на потоках данных и пропагандирует асинхронное вычисление. Реактивное программирование позволяет обрабатывать события по мере их возникновения.
Основные элементы: абстракции потоков данных, операторы трансформации.
Примеры: обработка событий пользовательского интерфейса, стриминг данных.
Компонентно-ориентированное программирование
Это подход, который строится вокруг создания программ из небольших и независимых компонентов, которые могут взаимодействовать друг с другом. В компонентно-ориентированном программировании акцент делается на повторном использовании и модульности.
Основные элементы: компоненты, интерфейсы.
Примеры: создание виджетов для пользовательского интерфейса.
Заключение
Каждая парадигма программирования имеет свои сильные стороны и подходящие случаи использования. Зачастую в реальных проектах используются сразу несколько парадигм, чтобы использовать их преимущества в разных частях программы. Понимание различных парадигм помогает разработчикам выбирать наиболее подходящие инструменты и методы для решения конкретных задач. Ещё более подробно можно почитать в статье: https://doka.guide/tools/programming-paradigms/
#советы #основы
Парадигмы программирования — это различные стили или подходы к написанию программного кода. Каждая из них предлагает свой взгляд на структуру и способ взаимодействия компонентов программы. Давайте рассмотрим основные парадигмы и поймем, чем они отличаются.
Императивное программирование
Это один из самых старых и интуитивно понятных подходов. В императивном программировании акцент делается на последовательные шаги, которые компьютер должен выполнить. Программист пишет детальные инструкции о том, как выполняются операции.
Основные элементы: переменные, циклы, условия.
Примеры:
for
циклы, if-else
конструкции.Декларативное программирование
Здесь основной упор делается на то, что нужно сделать, а не на то, как это сделать. Программист описывает результат, который хочет получить, и система сама решает, как это сделать.
Основные элементы: выражения, правила.
Примеры: SQL, регулярные выражения.
Функциональное программирование
Этот подход основывается на математических функциях. Программы состоят из функций, которые не имеют состояния и побочных эффектов. Это делает программы предсказуемыми и легко тестируемыми.
Основные элементы: функции, неизменяемость данных.
Примеры: рекурсия, чистые функции (без побочных эффектов).
Объектно-ориентированное программирование (ООП)
В этом подходе всё строится вокруг объектов. Объекты — это сущности, которые объединяют данные и методы для работы с этими данными. ООП помогает моделировать реальный мир и способствует повторному использованию кода.
Основные элементы: классы, объекты, наследование, инкапсуляция, полиморфизм.
Примеры: создание класса
Car
, экземпляры my_car
, your_car
.Логическое программирование
В логическом программировании программы определяются через логические утверждения и правила. Компьютер использует эти правила для вывода заключений и решения задач.
Основные элементы: факты, правила, запросы.
Примеры: базовые логические операции и запросы в Prolog.
Реактивное программирование
Эта парадигма акцентирует внимание на потоках данных и пропагандирует асинхронное вычисление. Реактивное программирование позволяет обрабатывать события по мере их возникновения.
Основные элементы: абстракции потоков данных, операторы трансформации.
Примеры: обработка событий пользовательского интерфейса, стриминг данных.
Компонентно-ориентированное программирование
Это подход, который строится вокруг создания программ из небольших и независимых компонентов, которые могут взаимодействовать друг с другом. В компонентно-ориентированном программировании акцент делается на повторном использовании и модульности.
Основные элементы: компоненты, интерфейсы.
Примеры: создание виджетов для пользовательского интерфейса.
Заключение
Каждая парадигма программирования имеет свои сильные стороны и подходящие случаи использования. Зачастую в реальных проектах используются сразу несколько парадигм, чтобы использовать их преимущества в разных частях программы. Понимание различных парадигм помогает разработчикам выбирать наиболее подходящие инструменты и методы для решения конкретных задач. Ещё более подробно можно почитать в статье: https://doka.guide/tools/programming-paradigms/
#советы #основы
Дока
Парадигмы программирования — Веб-платформа — Дока
Моё кунг-фу сильнее твоего кунг-фу (из разговора программистов).
👍13❤2
Как работает интернет: основы архитектуры веб-сетей
Каждый день мы с вами сёрфим в волнах интернета. Но давайте на секунду остановимся и нырнём чуть глубже, чтобы узнать, как это всё работает.
Здесь максимально кратко изложены основные концепции, чтобы не перегружать вашу голову:
https://nuancesprog.ru/p/16313/
#основы #интересное #интернет
Каждый день мы с вами сёрфим в волнах интернета. Но давайте на секунду остановимся и нырнём чуть глубже, чтобы узнать, как это всё работает.
Здесь максимально кратко изложены основные концепции, чтобы не перегружать вашу голову:
https://nuancesprog.ru/p/16313/
#основы #интересное #интернет
🤓1
«О» большое — простое объяснение с картинками
Наверняка при решение задач по программированию или во время чтения статей на эту тему вы натыкались на такое обозначение. Например, время работы этого алгоритма составляет O(n2).
Что же это за О такое и как понять, от чего зависит содержимое скобок. Я нашёл для вас статью, которая в картинках объясняет все эти моменты, а также отвечает и на другие вопросы.
#основы
Наверняка при решение задач по программированию или во время чтения статей на эту тему вы натыкались на такое обозначение. Например, время работы этого алгоритма составляет O(n2).
Что же это за О такое и как понять, от чего зависит содержимое скобок. Я нашёл для вас статью, которая в картинках объясняет все эти моменты, а также отвечает и на другие вопросы.
#основы
👍8🦄1
HTTP-запросы: параметры, методы и коды состояния
Когда пользователь вводит URL-адрес сайта в поисковой строке браузера, его устройство инициирует соединение с сервером и отправляет ему HTTP-запрос — сообщение с некой информацией. В запросе может быть что угодно.
В этой статье вы рассмотрите, как общаются серверы и устройства пользователей: что такое HTTP-сообщение, какая у него структура и из чего состоит HTTP-запрос и ответ. А также вскользь затронете сам протокол HTTP и его основы.
https://habr.com/ru/companies/timeweb/articles/853174/
#http #основы #веб
Когда пользователь вводит URL-адрес сайта в поисковой строке браузера, его устройство инициирует соединение с сервером и отправляет ему HTTP-запрос — сообщение с некой информацией. В запросе может быть что угодно.
В этой статье вы рассмотрите, как общаются серверы и устройства пользователей: что такое HTTP-сообщение, какая у него структура и из чего состоит HTTP-запрос и ответ. А также вскользь затронете сам протокол HTTP и его основы.
https://habr.com/ru/companies/timeweb/articles/853174/
#http #основы #веб
Что такое стек и куча?
Стек — это область памяти, где хранятся временные данные, например, локальные переменные и параметры функций. Он работает по принципу «последним пришёл — первым ушёл". Когда функция завершается, её данные автоматически удаляются. Стек быстрый, но его размер ограничен.
Куча — это область памяти для данных, которые живут долго, например, объекты или массивы. Данные в куче выделяются вручную или автоматически (например, с помощью сборщика мусора). Она гибче стека, но доступ к ней медленнее.
Пример использования стека:
Пример использования кучи:
Стек используется для временных данных, куча — для долгоживущих объектов. Знание этих областей памяти помогает оптимизировать программы и избегать утечек памяти.
#простымисловами #основы
Стек — это область памяти, где хранятся временные данные, например, локальные переменные и параметры функций. Он работает по принципу «последним пришёл — первым ушёл". Когда функция завершается, её данные автоматически удаляются. Стек быстрый, но его размер ограничен.
Куча — это область памяти для данных, которые живут долго, например, объекты или массивы. Данные в куче выделяются вручную или автоматически (например, с помощью сборщика мусора). Она гибче стека, но доступ к ней медленнее.
Пример использования стека:
def add(a, b):
result = a + b # Локальные переменные хранятся в стеке
return result
Пример использования кучи:
class User:
def __init__(self, name):
self.name = name # Объект "User" хранится в куче
user = User("Alex")
print(user.name)
Стек используется для временных данных, куча — для долгоживущих объектов. Знание этих областей памяти помогает оптимизировать программы и избегать утечек памяти.
#простымисловами #основы
🔥8❤1✍1
Что такое асинхронность
Сперва немного терминологии. Асинхронность — это способность программы выполнять несколько задач одновременно, не дожидаясь завершения каждого шага. Это особенно полезно, когда программа выполняет долгие операции (например, загрузку данных из сети), но при этом не блокирует выполнение других задач.
Если код работает синхронно, каждая операция выполняется строго по порядку. Это может привести к задержкам:
В примере выше всё остальное в программе «заморожено», пока выполняется
Как работают async/await
В асинхронном программировании код выполняется без блокировки. Программа продолжает работать, пока выполняются долгие задачи.
Пример на Python с
Давайте разберёмся, что здесь происходит:
1.
2.
3.
Асинхронность делает код быстрее и эффективнее, особенно при работе с долго выполняющимися операциями!
#простымисловами #основы
Сперва немного терминологии. Асинхронность — это способность программы выполнять несколько задач одновременно, не дожидаясь завершения каждого шага. Это особенно полезно, когда программа выполняет долгие операции (например, загрузку данных из сети), но при этом не блокирует выполнение других задач.
Если код работает синхронно, каждая операция выполняется строго по порядку. Это может привести к задержкам:
import time
print("Загрузка данных...")
time.sleep(5) # Программа засыпает на 5 секунд
print("Данные загружены!")
В примере выше всё остальное в программе «заморожено», пока выполняется
sleep()
. Если бы это была веб-страница, она зависла бы на несколько секунд.Как работают async/await
В асинхронном программировании код выполняется без блокировки. Программа продолжает работать, пока выполняются долгие задачи.
Пример на Python с
asyncio
:import asyncio
async def загрузка_данных():
print("Загрузка данных...")
await asyncio.sleep(5) # Не блокирует программу
print("Данные загружены!")
async def main():
await загрузка_данных()
asyncio.run(main())
Давайте разберёмся, что здесь происходит:
1.
async
делает функцию асинхронной.2.
await
говорит «подожди, но не блокируй остальную программу».3.
asyncio.run(main())
запускает асинхронную операцию.Асинхронность делает код быстрее и эффективнее, особенно при работе с долго выполняющимися операциями!
#простымисловами #основы
👍11
Как работают управляющие конструкции в Python: if, else, switch, for, while
Все знают, что программы состоят из последовательности команд. При этом часто нам нужно выполнять различные действия или повторять операции. Для этого есть управляющие конструкции — if, else, switch, for, while — они помогают написать гибкую программу с алгоритмом любой сложности.
Управляющие конструкции в целом похожи в разных языках, но мы рассмотрим их работу в языке Python. Статья отлично подойдёт тем, кто только начинает изучать программирование.
#python #основы
Все знают, что программы состоят из последовательности команд. При этом часто нам нужно выполнять различные действия или повторять операции. Для этого есть управляющие конструкции — if, else, switch, for, while — они помогают написать гибкую программу с алгоритмом любой сложности.
Управляющие конструкции в целом похожи в разных языках, но мы рассмотрим их работу в языке Python. Статья отлично подойдёт тем, кто только начинает изучать программирование.
#python #основы
👍2
Media is too big
VIEW IN TELEGRAM
Как устроены хэш-таблицы
HashSet — это самая популярная структура данных, используемая в программировании. Она позволяет проверять в ней наличие любого элемента за
В этом видео вы разберетесь, как она устроена и что позволяет ей быстро перебирать массив данных. Вы также узнаете, как модифицировать ее так, чтобы получить хэш-таблицу — структуру данных, хранящую пары ключ-значение. Обе эти структуры данных очень популярны и используются в любом проекте.
А еще на их знание очень часто задают вопросы на собеседовании, поэтому три самых популярных из них также разбираются в этом видео.
#видео #основы #структурыданных
HashSet — это самая популярная структура данных, используемая в программировании. Она позволяет проверять в ней наличие любого элемента за
О(1)
времени. В этом видео вы разберетесь, как она устроена и что позволяет ей быстро перебирать массив данных. Вы также узнаете, как модифицировать ее так, чтобы получить хэш-таблицу — структуру данных, хранящую пары ключ-значение. Обе эти структуры данных очень популярны и используются в любом проекте.
А еще на их знание очень часто задают вопросы на собеседовании, поэтому три самых популярных из них также разбираются в этом видео.
#видео #основы #структурыданных
Делаем красивый мониторинг чего угодно
Платформа Grafana — это популярный инструмент для визуализации, мониторинга, демонстрации и анализа данных. Платформа позволяет создавать дашборды, которые отображают различные показатели и процессы, в том числе в онлайн-режиме. Данные могут быть любыми — количество подписчиков в тг-канале, онлайн в игре или температура за окном.
Ловите гайд для начинающих, в котором подробней рассказывают про Grafana и учат использовать её в разных проектах.
#основы #grafana
Платформа 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`);— При работе с устаревшими инструментами;
— При построении плоского интерфейса пакета;
— Для поддержки специфичных путей и логики импорта.
#основы
Python Enhancement Proposals (PEPs)
PEP 420 – Implicit Namespace Packages | peps.python.org
Namespace packages are a mechanism for splitting a single Python package across multiple directories on disk. In current Python versions, an algorithm to compute the packages __path__ must be formulated. With the enhancement proposed here, the import ...
✍2❤2