IT-Helpers 🧠
195 subscribers
33 photos
5 files
92 links
🏆Канал для разработчиков (багов)

🪲 Bug Development

🤙Сотрудничество: @rogozen

Ютубянский:
https://www.youtube.com/@ITHelpers170

Чат: https://t.me/+WS7qirG6KSAzYThi
Download Telegram
IT-Helpers 🧠
8️⃣ Вопрос Что быстрей: list comprehension или for решающие одну и ту же задачу. Почему? Ответ Быстрее будет работать конструкция, реализованная на С, то есть списковое включение. Как это выражается в коде? В коде списковое включение не создает временную…
9️⃣

Вопрос

Как Вы понимаете термин “оптимизация хвостовой рекурсии”?


Ответ

Если функция предусматривает вызов самой себя это, так или иначе добавляет один блок в стек вызовов. Под оптимизацией хвостовой рекурсии понимается ситуация, когда компилятор избегает создания новых стеков вызова рекурсивной функции в памяти.

При этом необходимо держать в уме несколько тезисов:
А. "Zen of Python" гласит, что акцент в написании кода делается на readability, то есть читаемости
Б. В питоне отсутствует оптимизация хвостовой рекурсии
В. Гвидо выступает за сохранение полного стека вызовов

Однако, если кому интересно вот микро статья на хабре с реализацией данной оптимизации в виде декоратора

Источники:
* Guido van Rossum article on Blogspot
* About tail call
* GeeksForGeeks about tail recursion
* Habr article

#питон #собеседования #вопросы

@IT_Helper_s
👍2
IT-Helpers 🧠
В питоне есть редко-полезный флаг -O Которым, по сути, можно отменить все асерты в коде. То есть запуская сниппет, закрепленный ниже без флага вы получите AssertionError а вместе с ним исключения не будет Описание флага выглядит вот так: -O : remove…
Оператор моржа

Если вдруг кто не знал, то, начиная с 3.8, в питоне появился так называемый walrus operator (ну или просто "морж")

Назвали его так потому что он выглядит как глаза и бивни моржа:

:=


Если вкратце, то морж нужен для инициализации + записи переменных в рамках более сложной конструкции.

То есть с одной стороны - он как бы упрощает конструкцию (как например с условиями), а с другой — только усложняет (list comprehension)

Ниже наглядные примеры как им пользоваться.

Источник:
* Python 3.8 Release highlights

#питон

@IT_Helper_s
IT-Helpers 🧠
9️⃣ Вопрос Как Вы понимаете термин “оптимизация хвостовой рекурсии”? Ответ Если функция предусматривает вызов самой себя это, так или иначе добавляет один блок в стек вызовов. Под оптимизацией хвостовой рекурсии понимается ситуация, когда компилятор избегает…
1️⃣0️⃣

Вопрос

Как вы понимаете термин "слабая связь" в контексте ООП?


Ответ

Когда между родителем и потомком есть посредники, то есть логика методов наследуется не напрямую и может быть перегружена в зависимости от реализации.

Такая ситуация может возникнуть, например, при использовании мидлваря (Паттерн "Посредник", Джанга, Фастапи), однако тут следует помнить, что в питоне различия в реализации абстракных классов и интерфейсов весьма размыты — оба реализуются при помощи библиотеки abc. Ключевая разница в том, что абстрактный класс (помимо абстрактных методов) может иметь методы, реализующие логику, а интерфейс — нет.

Источники:
* Abstract classes in python — abc library
* Python interfaces
* Django middlewares
* FastAPI middlewares
* Middleware pattern

#питон #собеседования #вопросы

@IT_Helper_s
IT-Helpers 🧠
Давайте задача 5 Напишите функцию, которая принимает на вход два целых положительных числа x и y. Функция должна определить возможность "перехода" числа x в число y (x → y) только путем побитового сдвига влево или вправо (операции << и >>, соответственно)…
Давайте задача 6

Напишите функцию, которая будет считать "здания" определенной высоты в "городе". Под "Городом" понимается текст на нескольких строках, состоящий из символов точки (.) и букв "П", имитирующих здание. В "городе" на примере ниже 3 здания трехэтажных, 2 двухэтажных и 1 - одноэтажное:


.П...П..П
ПП...ПП.П
ПП..ППП.П


Функция принимает на вход два аргумента. Первый — строка с "городом", второй — высота "здания", количество которых нужно найти. Для примера выше, если высота = 3, то ответ — 3 (потому что в городе три трехэтажных здания)


Тесты:

assert имя_функции(".П...П..П\nПП...ПП.П\nПП..ППП.П", 3) == 3
assert имя_функции(".П...П..П\nПП...ПП.П\nПП..ППП.П", 2) == 2
assert имя_функции(".П...П..П\nПП...ПП.П\nПП..ППП.П", 1) == 1
assert имя_функции("", 1) == 0
assert имя_функции("П", 1) == 1
assert имя_функции("П", 2) == 0
assert имя_функции("П\nП", 1) == 0
assert имя_функции("П\nП", 2) == 1
assert имя_функции("..П\n..П\nП.П", 2) == 0
assert имя_функции("..П\n..П\nП.П", 1) == 1
assert имя_функции("..П\n..П\nП.П", 3) == 1


Уровень сложности 5 🤡 из 5

#задачи #питон

@IT_Helper_s
IT-Helpers 🧠
Оператор моржа Если вдруг кто не знал, то, начиная с 3.8, в питоне появился так называемый walrus operator (ну или просто "морж") Назвали его так потому что он выглядит как глаза и бивни моржа: := Если вкратце, то морж нужен для инициализации + записи…
Позиционирование параметров

Начиная с версии 3.8 в питоне появилась возможность запрещать передачу позиционного аргумента как ключевого.

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

def say_hello(name: str, /) -> None:
...

say_hello("Python") # ok
say_hello(name="Clown") # say_hello() got some positional-only arguments passed as keyword arguments: 'name'

Делается это тогда, когда использование аргумента функции по имени в качестве ключевого является избыточно очевидным.

Источник:
* Python 3.8 Positional-only parameters

#питон

@IT_Helper_s
IT-Helpers 🧠
Сервисы #8 Сайт, который я использую для обрамления кода в картинки как в предыдущем сообщении: https://carbon.now.sh/ #сервисы @IT_Helper_s
Сервисы #9

МФТИшный сайт с практикой по питону

Для многих разделов нужна авторизация, но, в целом, есть много полезной информации.

Содержание страницы:

# Практика
1 Практика: Черепаха
2 Практика: Робот
3 Контест: выделение цифр, if, for, while
4 Практика: графические примитивы
5 Практика: физическое моделирование
6 Контест: использование массивов
7 Контрольная работа №1
8 Рекурсия: фракталы
9 Контест: сортировки
10 Асимптотическая сложность алгоритмов
11 Практика: Динамическое программирование
12 Контест: динамическое программирование
13 Практика: Z-функция и КМП
14 Практика: Арифметические выражения и калькуляторы
15 Семестровая контрольная работа
16 БИЛЕТЫ К ОСЕННЕМУ ЗАЧЁТУ
17 Контест: вспоминаем - повторяем
18 Словари и множества в Python и асимптотика стандартных операций
19 Практика: AI Contest
20 Практика: Pygame и шарики
21 Практика: Pygame, шарики и ООП
22 Промежуточная сдача проектов
23 Словари и множества в Python
24 Контрольная работа №1
25 Практика: web программирование
26 Контест: Графы, поиск в глубину
27 Контест: Поиск в ширину
28 Практика: поиск путей минимального веса
29 Практика: двоичные деревья поиска
30 Семестровая контрольная работа
31 ВОПРОСЫ К ЗАЧЁТУ


#сервисы #питон

@IT_Helper_s
IT-Helpers 🧠
Сервисы #9 МФТИшный сайт с практикой по питону Для многих разделов нужна авторизация, но, в целом, есть много полезной информации. Содержание страницы: # Практика 1 Практика: Черепаха 2 Практика: Робот 3 Контест: выделение цифр, if, for, while 4 Практика:…
Сервисы #10

У меня уже был неплохой опыт написания статьей на хабре и тут, внезапно для себя, я узнал что на Т-Прогере тоже можно писать статьи.

А кто я такой, чтобы не перенести хайповую статью с хабра на Т-Прогер? 😏

Ладно, пост не об этом. Вы знаете, что я люблю постгрес и всякую субдшуню тему.
Пока шерстил т-прогер, наткнулся на статью про SQLTest.online.

Это такая платформа, на которой есть и теория (в тестах) и практика (с проверкой запросов)

В качестве базы данных там взята Sakila. Это разработанная компанией MySQL БД, представляющая архитектуру компании по прокату dvd дисков. (ставь кловуна если помнишь что такое cd-r)

Тем, кто хотел прокачать свои навыки в бд — рекомендую
Тем, кто не хотел — тоже

#сервисы #бд #практика #собес

@IT_Helper_s
🤡3
IT-Helpers 🧠
Позиционирование параметров Начиная с версии 3.8 в питоне появилась возможность запрещать передачу позиционного аргумента как ключевого. Для того чтобы это сделать, необходимо добавить слэш, после аргументов, которые обязательно должны быть позиционными.…
Смайлики

Я знаю что правильно они сейчас называются емодзи, но мне больше нравится смайлики.

Для многих не секрет, что есть либа emoji. Благодаря её методу emojize Можно получить смайлик прям по описанию:

import emoji

print(emoji.emojize("You are :clown_face:"))


Но есть еще два способа 😏 Во-первых, выводить эмодзи можно по коду, то есть:

print("\U0001f600" == '😀')
# True


А во-вторых, что мое самое любимое, можно просто писать название смайла в фигурных скобках в строке перед символом \N:

print("\N{clown face}")


Список имен эмодзи можете найти тут. Для печати по коду необходимо знак "плюс" заменить на три нуля. То есть из U+1F921 сделать U0001F921

#питон #пайтон

@IT_Helper_s
IT-Helpers 🧠
1️⃣0️⃣ Вопрос Как вы понимаете термин "слабая связь" в контексте ООП? Ответ Когда между родителем и потомком есть посредники, то есть логика методов наследуется не напрямую и может быть перегружена в зависимости от реализации. Такая ситуация может возникнуть…
1️⃣1️⃣

Вопрос

Нормально ли использовать f-строки (форматирование строк) при логировании?


Ответ

Это может быть приемлемо, если заранее известно, что подставляемое значение — малó (цифра, короткая строка, например: GET, 404, etc)

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

# result = ". . . long string . . . 15mb for example . . ."
log.debug(f"Result is {result}")
# or: log.debug("Result is {}".format(result))


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

Другое дело, когда имплементацию результата в строку мы делегируем самому логеру, например:

log.debug("Result is {}", result)


Здесь уже подстановка результата в строку лога будет выполняться только если уровень логирования соответствует вызываемому методу логера.

#питон #пайтон #вопросы #собес

@IT_Helper_s
IT-Helpers 🧠
Смайлики Я знаю что правильно они сейчас называются емодзи, но мне больше нравится смайлики. Для многих не секрет, что есть либа emoji. Благодаря её методу emojize Можно получить смайлик прям по описанию: import emoji print(emoji.emojize("You are :clown_face:"))…
Asyncio REPL

Если кто не знал, то в питоне помимо запуска обычного репла (это если просто написать в терминале (командной строке — для виндавс 🤡) — python3) можно вызвать и асинкио репл.

Делается это через команду:

python -m asyncio


Фишка тут только одна — можно дергать await напрямую вместо asyncio.run

Источники:
* Python Asyncio

#питон #пайтон #практика

@IT_Helper_s
А есть тут те, кто не любит макбуки по тем или иным причинам?

УПД:
У меня в постах собрано 2 недостатка:
1) Кейбиндинги
2) Скриншоты
В новом видео я собрал аж 13 сука! Залью видео совсем скоро.

Напишите, пожалуйста @rogozen - обкашляем пару вопросов
IT-Helpers 🧠
Давайте задача 6 Напишите функцию, которая будет считать "здания" определенной высоты в "городе". Под "Городом" понимается текст на нескольких строках, состоящий из символов точки (.) и букв "П", имитирующих здание. В "городе" на примере ниже 3 здания трехэтажных…
Давайте задача 7

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


Тесты:

assert flatten_dict({}) == []
assert flatten_dict({"a": 1, "b": 2, "c": 3}) == [("a", 1), ("b", 2), ("c", 3)]
assert flatten_dict({"a": 1, "b": {"x": 22}}) == [("a", 1), ("b.x", 22)]
assert flatten_dict({"a": 1, "b": {"x": 22, "y": 23}}) == [("a", 1), ("b.x", 22), ("b.y", 23)]
assert flatten_dict({"a": 1, "b": {"x": 20, "y": 21, "z": {"m": "n", "o": "p"}}, "c": 3}) == [("a", 1), ("b.x", 20), ("b.y", 21), ("b.z.m", "n"), ("b.z.o", "p"), ("c", 3)]


Уровень сложности 1 🤡 из 5

#задачи #пайтон #питон

@IT_Helper_s
IT-Helpers 🧠
Bkhargava_-_Grokaem_algoritmy.pdf
И потянется сиквел за сиквелом


Штош сразу скажу, что судя по рецензиям концептуально нового ничего нет. Переписали все на 3 питон.

Порефачили деревья, добавили более подробное описание NP-полных задач

И все же, что первую что вторую (и третью, уверен она выйдет) книгу могу порекомендовать любому разработчику.

Прокачаете либо понимание структур данных, либо умение объяснять их на примере.

Рецензию свою напишу уже после прочтения.

#алгоритмы@it_helper_s
#питон@it_helper_s

@IT_Helper_s
11
А никто из айтишнеков сейчас работу не ищет случайно?

Могу пореферить в бигтех 🤡

Если заинтересовались — пишите @rogozen

@IT_Helper_s
Ну что, дорогие подписчеки
Год был не простой

С наступающим (и наступившим) 2025

Пусть он для вас будет годом достижимых целей, стабильной дисциплины и неиссякаемой мотивации.

Успехов в покорении новых вершин!

В свою очередь обещаю в 2025 наладить конвейер полезного контента 🤡🙏

Обнял
1
IT-Helpers 🧠
1️⃣1️⃣ Вопрос Нормально ли использовать f-строки (форматирование строк) при логировании? Ответ Это может быть приемлемо, если заранее известно, что подставляемое значение — малó (цифра, короткая строка, например: GET, 404, etc) Однако, если есть необходимость…
Сделал небольшой анонимный тест по питончику

Состоит из разношёрстных вопросов, но в основном, из хитрых (знания которых вам в реальной жизни пригодятся редко, либо не пригодятся 🤡). Элементы теста подразделяются на:
◾️ 1 вариант ответа
◾️ несколько вариантов ответа
◾️ ввод текста

Максимум баллов: 25
Количество вопросов: 18
Версия питона: 3.12
Уровень сложности: 9/10 (субъективно конечно)

❗️Само собой разумеется, что вы не должны юзать консоль во время прохождения теста, а опираться только на интуицию опыт и знания

Если знаете ещё какой-нибудь конченый вопрос, который можно добавить в этот тест — пишите в комменты к посту

Если найдёте ошибку — пишите в комменты к посту

Ну ещё результат можете свой написать (в комменты к посту), если не стыдно будет 🤡

🔝На данный момент лучший результат 16/25

Ссылка на тест:
https://forms.gle/5yAM6r3pzE3QUdyTA

Удачи)

#питон #вопросы #собес #пайтон

@IT_Helper_s
IT-Helpers 🧠
А есть тут те, кто не любит макбуки по тем или иным причинам? УПД: У меня в постах собрано 2 недостатка: 1) Кейбиндинги 2) Скриншоты В новом видео я собрал аж 13 сука! Залью видео совсем скоро. Напишите, пожалуйста @rogozen - обкашляем пару вопросов
Подумал что не совсем честно писать только про косяки макпук эира (макоси)

И совсем ничего не сказать про линух

Как в старом анекдоте:
<...> она хотела поебаца — я поставил ей линукс

😉

А начну я с довольно стандартной проблемы, с которой столкнулся после получения корпоративного ноутбука: это отсутствие звука.

Прелюдия: дали ноут с виндой, работай—нехочу
Снёс винду, поставил уебунту 24.04 лтс
Запустил, настроил, завелось — звука нет.

Пошёл в интернеты и на форуме хундая хуйвея нашёл такую же проблему
В комментах чел пишет, что нашёл солюшен и даёт ссылку на гитхоб

Зашел в репу этого чювака, склонил, запустил bash install.sh
Звук появился

Плюсы истории:
Всё решилось довольно быстро (минут за 5) и одной командой

Минусы:
Убунту 24.04

#линух #линукс #проблемы #баги

@IT_Helper_s
👍2
IT-Helpers 🧠
Ну что, дорогие подписчеки Год был не простой С наступающим (и наступившим) 2025 Пусть он для вас будет годом достижимых целей, стабильной дисциплины и неиссякаемой мотивации. Успехов в покорении новых вершин! В свою очередь обещаю в 2025 наладить конвейер…
Что-то давно ничего не писал в тележку

С наступающим всех ❄️

В новом году обещаю выкладывать видосы почаще 🥴 (уже второй год обещаю 🤡)

А пока вот вам сайтик с документацией на все популярные технологии/языки

#сервисы

@IT_Helper_s
2🔥2👨‍💻1