Код на салфетке
2.21K subscribers
747 photos
15 videos
2 files
790 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.iss.one/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Обновление библиотеки - AIOgram 3.14
Автор: Иван Ашихмин

🚀 Вышла новая версия Aiogram 3.14.0!
Подробности релиза со списком изменений на русском языке.


Читать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Telegram #aiogram #Код_на_салфетке #changelog #боты #обновление_библиотеки
🔥11🤩2👍1
Привет, друзья!

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

Понедельник (28.10.2024) Дайджест за предыдущую неделю

Вторник (29.10.2024) Знаете ли вы как использовать Docker Compose для оркестрации многоконтейнерных приложений?

Среда (30.10.2024)

Четверг (31.10.2024)

Пятница (01.11.2024) Пятничный кинорелакс

Суббота (02.11.2024)

Воскресенье (03.11.2024) Обновление библиотеки - AIOgram 3.14


Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
🔥71👍1
Знаете ли вы, как Python управляет памятью с помощью подсчета ссылок и сборщика мусора?

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

Однако подсчет ссылок не справляется с циклическими ссылками, где объекты ссылаются друг на друга. Такие ситуации возникают, например, в деревьях, где узлы хранят ссылки на родителей, или в связанных списках с двунаправленными связями. Например:
class Employee:
def __init__(self, manager=None):
self.manager = manager

alice = Employee()
bob = Employee(alice)
alice.manager = bob
del alice
del bob

Здесь объекты alice и bob ссылаются друг на друга. Счетчики ссылок не достигнут нуля, и память не будет освобождена. Для решения этой проблемы Python использует циклический сборщик мусора, который обнаруживает и удаляет такие циклы, предотвращая утечки памяти.

Код на салфетке x Кусочки кода
🔥9👍2👏1
Приветствую!

На этой неделе мы предлагаем вам комедийно-драматический фильм, который рассказывает о простом сапожнике. Главный герой, мастерски сыгранный Адамом Сэндлером, проходит через череду комичных и трогательных ситуаций, открывая для себя новые грани жизни и понимания других людей. Фильм наполнен теплом, юмором и добротой, что делает его идеальным для семейного просмотра или уютного вечера в компании друзей.

Фильм: Сапожник

Год: 2014

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

Устраивайтесь поудобнее и готовьтесь к увлекательному просмотру. Не забывайте делиться своими впечатлениями и мыслями в комментариях. Приятного просмотра!
🔥5🤩2👏1
Что выведет этот код? №44

Задача:
Вы работаете над алгоритмом, который должен выбрать из списка только те числа, которые соответствуют определённым условиям. Однако коллега написал код, и теперь вам нужно понять, что этот код вернёт. В коде используются хитрые конструкции и работа с функциями. Попробуйте предугадать результат, не запуская код.
🔥4
Что выведет код с изображения? №44
Anonymous Quiz
6%
[2, 3, 5, 22]
17%
[3, 5, 10, 22]
50%
[2, 3, 5, 10, 22]
11%
[2, 3, 10, 21, 22]
17%
[2, 3, 5, 10, 15, 21, 22]
🔥5
Вчерашняя задача была несложной, но требовала знаний простых чисел и внимательности. Правильный ответ выбрали около 50% участников! Давайте разберём подробно как работает данный код. Это поможет лучше понять использование функций для проверки числовых свойств и работы с условными выражениями.

Задача:
Вы разрабатываете алгоритм, который отбирает из списка только те числа, которые либо простые, либо чётные. Программа вызывает несколько функций и использует списковые включения, которые помогают сделать код более компактным. Разберём, как он работает и что вернёт.

Код задачи:
def filter_numbers(
numbers: list[int],
) -> list[int]:
return [
x
for x in numbers
if is_prime(x) or is_even(x)
]


def is_prime(num: int) -> bool:
if num < 2:
return False
return all(
num % i != 0
for i in range(2, int(num**0.5) + 1)
)


def is_even(num: int) -> bool:
return num % 2 == 0


sequence = [2, 3, 5, 10, 15, 21, 22]
result = filter_numbers(sequence)
print(result)


Пояснения по коду:

1. Функция `filter_numbers`:
- Эта функция принимает список чисел numbers и возвращает новый список, содержащий только те числа, которые проходят проверку на простоту или чётность.
- Используется списковое включение: [x for x in numbers if is_prime(x) or is_even(x)].
- Здесь каждый элемент x из numbers добавляется в результат, если он проходит проверку: is_prime(x) or is_even(x). То есть число добавляется в новый список, если оно простое (функция is_prime) или чётное (функция is_even).

2. Функция `is_prime`:
- Эта функция проверяет, является ли число простым.
- Простое число — это число, большее 1, которое делится только на 1 и само на себя. Например, 2, 3, 5 — простые числа.
- Сначала проверяется, меньше ли число 2. Если да, то оно точно не простое (например, 0 и 1 не являются простыми).
- Если число больше 2, то с помощью функции all() проверяется, что оно не делится на числа от 2 до квадратного корня из него. Это оптимизация, позволяющая сократить количество делений, ведь если число делится на какое-то число больше квадратного корня, то это уже не простое число.

3. Функция `is_even`:
- Она возвращает True, если число чётное, и False — если нечётное.
- Для этого проверяется, делится ли число на 2 без остатка: num % 2 == 0.

4. Применение функций к списку `sequence`:
- В переменной sequence хранится список чисел [2, 3, 5, 10, 15, 21, 22].
- Функция filter_numbers проверит каждый элемент списка на чётность или простоту. Если хотя бы одно из этих условий выполнено, число попадёт в результирующий список.

Шаги выполнения и результат:

1. 2 — чётное, добавляем.
2. 3 — простое, добавляем.
3. 5 — простое, добавляем.
4. 10 — чётное, добавляем.
5. 15 — не чётное и не простое, пропускаем.
6. 21 — не чётное и не простое, пропускаем.
7. 22 — чётное, добавляем.

Ожидаемый результат: [2, 3, 5, 10, 22].

Вывод:
Этот код фильтрует список, оставляя только чётные или простые числа. Это может быть полезно для задач, где важны свойства чисел, такие как простота или чётность.
🔥5👍1👏1
Интересный факт
Конструкция [for ... in ...], используемая в нашем коде, называется списковое включение (или list comprehension на английском). Это удобный способ быстро создать новый список на основе существующей коллекции, применяя к его элементам условия или преобразования. Хотя правильное название — списковое включение, его часто называют просто "генератором" — это не совсем корректно, но распространено среди разработчиков.
🔥5
Привет, друзья!

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

Понедельник (04.11.2024) Дайджест за предыдущую неделю

Вторник (05.11.2024) Знаете ли вы, как Python управляет памятью с помощью подсчета ссылок и сборщика мусора?

Среда (06.11.2024)

Четверг (07.11.2024)

Пятница (08.11.2024) Пятничный кинорелакс

Суббота (09.11.2024) Что выведет этот код?

Воскресенье (10.11.2024) Объяснение задачи


Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
🔥53
Хотите узнать, как использовать генераторы в Python для эффективной работы с большими данными?

Генераторы в Python - это особый тип функций, которые возвращают объект-итератор. В отличие от обычных функций, они не выполняют весь код сразу, а "замораживаются" на каждом yield и возобновляют работу только при запросе следующего значения.

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

def read_logs(filename):
with open(filename) as file:
for line in file:
if '[ERROR]' in line:
yield line.strip()

for error in read_logs('server.log'):
print(f"Error found: {error}")


- Файл читается построчно, а не целиком
- В памяти хранится только одна строка в каждый момент времени
- Если в файле миллион строк, но нас интересуют только ошибки, мы не тратим память на хранение ненужных строк

Код на салфетке x Кусочки кода
🔥7
Вхожу в IT - telegram-bot (часть 2)
Автор: Eugene Kaddo

Данная статья продолжает цикл статей о том как я вхожу в IT product уровня в сфере Telegram-ботов на aiogram3. Тут я описываю сложности вхождения в коммерческий мир IT, высказываю свои мысли, рассказываю через какие трудности приходится пройти на старте продуктовой карьеры в IT.


Читать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Python #Стажировка #Бот #Aiogram #Курсы #Путь_в_IT #Обучение #Менторство #Код_Ревью
1🔥5🤩1
Приветствую!

Сегодня пятница, а это значит, что настало время для нашего еженедельного кинопоста! На этой неделе мы предлагаем вам отправиться в космическое путешествие.

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

Фильм: Ускорение

Год: 2024

Группа астронавтов отправляется в смертельно опасную миссию к спутнику Сатурна Титану и пытается сохранить контроль над реальностью.

Устраивайтесь поудобнее и готовьтесь к незабываемому просмотру. Не забывайте делиться своими впечатлениями и мыслями в комментариях – нам очень интересно узнать ваше мнение о фильме. Приятного просмотра и до встречи на следующей неделе!
🔥5
Что выведет этот код? №45

Задача:
Вы работаете над обработкой данных из внешнего источника. В процессе обработки требуется отфильтровать данные на основе сложного условия. На просторах StackOverflow вы нашли следующий код для проверки логики.

Внимательно изучите код и ответьте: что выведет этот код?
🔥3🤯2
Что выведет код с изображения? №45
Anonymous Quiz
23%
[1, 2, 3, 4, 5]
3%
[1, 2, 3]
35%
[4, 5]
26%
[]
13%
TypeError
🤔2
Вчера мы предложили вам довольно хитрую задачу, которая требовала внимательного подхода. Несмотря на её видимую простоту, код оказался обманчиво сложным. Проголосовало 23 человека, и только 4 из них справились правильно. Разберем всё подробно.

Задача:
Вы работаете над обработкой данных из внешнего источника. В процессе обработки требуется отфильтровать данные на основе сложного условия. На просторах StackOverflow вы нашли следующий код для проверки логики.

Внимательно изучите код и ответьте: что выведет этот код?

Код задачи:

from typing import Any  

def filter_data(
data: list[Any], condition: Any
) -> list[Any]:
def matches_condition(item):
nonlocal condition
if callable(condition):
condition = item
return False
return condition == item

return [
item
for item in data
if matches_condition(item)
]

data = [1, 2, 3, 4, 5]
condition = lambda x: x > 3

result = filter_data(data, condition)
print(result)



Разбор:
На первый взгляд задача кажется достаточно простой: нужно отфильтровать список data, основываясь на переданном условии condition. Однако несколько деталей делают этот код действительно коварным.

1. Что делает функция `matches_condition`?
- Проверяет, является ли condition вызываемым объектом (например, функцией).
- Если condition — вызываемый объект, оно перезаписывается текущим элементом item, а функция возвращает False.
- Если condition — не вызываемый объект, то возвращается результат сравнения condition == item.

2. Что происходит внутри списка?
Список создается с помощью вхождения:
[item for item in data if matches_condition(item)]


Для каждого элемента item из data вызывается matches_condition.

3. Перезапись переменной `condition`:
При первом вызове matches_condition, condition — это функция (lambda). Для первого элемента списка (1) происходит следующее:
- condition заменяется на 1.
- matches_condition возвращает False.

4. Дальнейшие итерации:
Начиная со второго элемента списка, condition уже не является функцией. Теперь это число, и на каждой итерации проверяется равенство condition == item.

Таким образом:
- На первом шаге 1 != 2, проверка завершается.
- На втором шаге 1 != 3.
- И так далее.


Что здесь происходит?
1. `condition` на старте содержит lambda-функцию, определяющую условие: x > 3.

2. `nonlocal condition` позволяет изменять значение переменной condition, объявленной в функции-родителе, прямо во время работы функции.

3. Логика проверки в `matches_condition`:
- Если condition — функция (то есть callable), она заменяется на текущий элемент item, а элемент исключается из итогового списка (возвращается False).
- Если condition уже не функция, проверяется равенство condition == item.

4. Итоговый процесс фильтрации:
Каждый элемент списка проверяется с помощью matches_condition. Поскольку condition меняется уже на первом шаге, последующие проверки будут отличаться от ожидаемого поведения.


Верный ответ: []


Почему ответ — пустой список?

Ключевую роль играет изменение переменной `condition` на первом шаге. Изначально это была лямбда-функция, которая после первой итерации заменяется на число. В итоге фильтрация ломается: condition больше не проверяет изначальное условие x > 3, а просто сравнивает элементы с числом 1. Так как ни один элемент не равен 1, результатом становится пустой список.

Всегда обращайте внимание на использование замыканий, изменяемых переменных и ключевых слов, таких как nonlocal. Они могут существенно повлиять на выполнение программы.
🔥3🤩1
Что нового в Telegram Bot API 8.0?
Автор: Иван Ашихмин

Вышло масштабное обновление Telegram Bot API 8.0, которое стало одним из крупнейших за последнее время. Оно добавило сразу несколько революционных возможностей для Mini Apps и ботов, включая платные подписки, полноэкранный режим, и многое другое. Подробности в посте.


Читать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Telegram #Bot_API #новости #aiogram #изменения #боты
🔥6🥱2
Привет, друзья!

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

Понедельник (11.112024) Дайджест за предыдущую неделю

Вторник (12.11.2024) Хотите узнать, как использовать генераторы в Python для эффективной работы с большими данными?

Среда (13.11.2024)

Четверг (14.11.2024) Вхожу в IT - telegram-bot (часть 2)

Пятница (15.11.2024) Пятничный кинорелакс

Суббота (16.11.2024) Задача

Воскресенье (17.11.2024) Текстовый разбор задачи и Что нового в Telegram Bot API 8.0?


Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
👍3🔥2
Знаете ли вы разницу между deep copy и shallow copy в Python?

Поверхностное и глубокое копирование объектов в Python различается по тому, как они обрабатывают вложенные объекты:

- Поверхностное копирование создает новый объект и сохраняет ссылки на вложенные объекты. Подходит для копирования объектов с иммутабельными вложенными элементами.
- Глубокое копирование создает полностью независимую копию объекта с вложенными элементами. Полезно при необходимости полностью отделить копию от оригинала.

import copy

original = [1, [2, 3], 4]
shallow_copied = copy.copy(original)
deep_copied = copy.deepcopy(original)

original[1][0] = 'изменено'
print(original) # [1, ['изменено', 3], 4]
print(shallow_copied) # [1, ['изменено', 3], 4] — вложенный список изменился
print(deep_copied) # [1, [2, 3], 4] — сохранено исходное состояние


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

Код на салфетке x Кусочки кода
🔥7
Python-проект в EXE-файл и обфускация кода
Автор: Иван Ашихмин

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


Читать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Гайды #Полезные_инструменты #защита #pyinstaller #python_minifier #обфускация #компиляция #nuitka #pyarmor #exe
👍4🤯2🔥1🤩1
Приветствую, друзья!

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

Фильм: Не говори никому

Год: 2024

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

Устраивайтесь поудобнее. Всем приятного просмотра!
🔥5
Приветствую, друзья!

Мы всё ещё находимся в поисках авторов на наш канал и сайт.

Писать код не то же самое, что объяснять его. В программировании есть множество практик, каких-то личных "лайф-хаков" и наработок, которыми можно и нужно делиться с новичками.

Приглашаем всех, кто хочет раскрыть себя как:
- Автор статей на сайт и канал.
- Автор рубрики на канал.
- Автор активностей (задачи/опросы) на канал.

Для авторов у нас есть памятка с основными требованиями и рекомендациями.

Если заинтересовались, пишите @proDreams
🔥42