Что выведет этот код? №45
Задача:
Вы работаете над обработкой данных из внешнего источника. В процессе обработки требуется отфильтровать данные на основе сложного условия. На просторах StackOverflow вы нашли следующий код для проверки логики.
Внимательно изучите код и ответьте: что выведет этот код?
Задача:
Вы работаете над обработкой данных из внешнего источника. В процессе обработки требуется отфильтровать данные на основе сложного условия. На просторах 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 вы нашли следующий код для проверки логики.
Внимательно изучите код и ответьте: что выведет этот код?
Код задачи:
Разбор:
На первый взгляд задача кажется достаточно простой: нужно отфильтровать список
1. Что делает функция `matches_condition`?
- Проверяет, является ли
- Если
- Если
2. Что происходит внутри списка?
Список создается с помощью вхождения:
Для каждого элемента
3. Перезапись переменной `condition`:
При первом вызове
-
-
4. Дальнейшие итерации:
Начиная со второго элемента списка,
Таким образом:
- На первом шаге
- На втором шаге
- И так далее.
Что здесь происходит?
1. `condition` на старте содержит
2. `nonlocal condition` позволяет изменять значение переменной
3. Логика проверки в `matches_condition`:
- Если
- Если
4. Итоговый процесс фильтрации:
Каждый элемент списка проверяется с помощью
Верный ответ:
Почему ответ — пустой список?
Ключевую роль играет изменение переменной `condition` на первом шаге. Изначально это была лямбда-функция, которая после первой итерации заменяется на число. В итоге фильтрация ломается:
Всегда обращайте внимание на использование замыканий, изменяемых переменных и ключевых слов, таких как
Задача:
Вы работаете над обработкой данных из внешнего источника. В процессе обработки требуется отфильтровать данные на основе сложного условия. На просторах 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 #изменения #боты
Автор: Иван Ашихмин
Вышло масштабное обновление 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?
Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!
С уважением,
Команда канала "Код на салфетке".
#дайджест #материалы #новости #код_на_салфетке
Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:
Понедельник (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 различается по тому, как они обрабатывают вложенные объекты:
- Поверхностное копирование создает новый объект и сохраняет ссылки на вложенные объекты. Подходит для копирования объектов с иммутабельными вложенными элементами.
- Глубокое копирование создает полностью независимую копию объекта с вложенными элементами. Полезно при необходимости полностью отделить копию от оригинала.
Зная эту разницу при работе со сложными структурами данных, можно избежать неожиданного поведения. Но не забывайте, что глубокое копирование может быть более ресурсоемким.
Код на салфетке x Кусочки кода
Поверхностное и глубокое копирование объектов в 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
Автор: Иван Ашихмин
В этом посте познакомимся с инструментами, позволяющими превратить Python-проект в exe-файл, а также узнаем, что такое обфускация кода.
Читать пост в Telegram
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#Гайды #Полезные_инструменты #защита #pyinstaller #python_minifier #обфускация #компиляция #nuitka #pyarmor #exe
👍4🤯2🔥1🤩1
Приветствую, друзья!
В этот пятничный вечер у нас для вас особенный фильм. Этот захватывающий триллер обещает погрузить вас в мир тайн и интриг, где каждая деталь имеет значение, а каждое действие может привести к непредсказуемым последствиям. Готовьтесь к тому, что ваше внимание будет приковано к экрану с первой и до последней минуты. Великолепная актерская игра и мастерски построенный сюжет делают этот фильм настоящим шедевром в жанре триллера.
Фильм: Не говори никому
Год: 2024
Отдыхая в Италии, переехавшие в Лондон американцы Бэн и Луиз с дочерью знакомятся с семьёй британцев. По возвращении домой они получают от новых знакомых приглашение погостить в их загородном доме. Вскоре обещавший быть приятным отдых становится напряжённым — хотя Бэн находит оправдания странному поведению хозяев, у Луиз они вызывают всё больше отторжения.
Устраивайтесь поудобнее. Всем приятного просмотра!
В этот пятничный вечер у нас для вас особенный фильм. Этот захватывающий триллер обещает погрузить вас в мир тайн и интриг, где каждая деталь имеет значение, а каждое действие может привести к непредсказуемым последствиям. Готовьтесь к тому, что ваше внимание будет приковано к экрану с первой и до последней минуты. Великолепная актерская игра и мастерски построенный сюжет делают этот фильм настоящим шедевром в жанре триллера.
Фильм: Не говори никому
Год: 2024
Отдыхая в Италии, переехавшие в Лондон американцы Бэн и Луиз с дочерью знакомятся с семьёй британцев. По возвращении домой они получают от новых знакомых приглашение погостить в их загородном доме. Вскоре обещавший быть приятным отдых становится напряжённым — хотя Бэн находит оправдания странному поведению хозяев, у Луиз они вызывают всё больше отторжения.
Устраивайтесь поудобнее. Всем приятного просмотра!
🔥5
Приветствую, друзья!
Мы всё ещё находимся в поисках авторов на наш канал и сайт.
Писать код не то же самое, что объяснять его. В программировании есть множество практик, каких-то личных "лайф-хаков" и наработок, которыми можно и нужно делиться с новичками.
Приглашаем всех, кто хочет раскрыть себя как:
- Автор статей на сайт и канал.
- Автор рубрики на канал.
- Автор активностей (задачи/опросы) на канал.
Для авторов у нас есть памятка с основными требованиями и рекомендациями.
Если заинтересовались, пишите @proDreams
Мы всё ещё находимся в поисках авторов на наш канал и сайт.
Писать код не то же самое, что объяснять его. В программировании есть множество практик, каких-то личных "лайф-хаков" и наработок, которыми можно и нужно делиться с новичками.
Приглашаем всех, кто хочет раскрыть себя как:
- Автор статей на сайт и канал.
- Автор рубрики на канал.
- Автор активностей (задачи/опросы) на канал.
Для авторов у нас есть памятка с основными требованиями и рекомендациями.
Если заинтересовались, пишите @proDreams
🔥4 2
Привет, друзья!
Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:
Понедельник (18.112024) Дайджест за предыдущую неделю
Вторник (19.11.2024) Знаете ли вы разницу между deep copy и shallow copy в Python?
Среда (20.11.2024)
Четверг (21.11.2024) Python-проект в EXE-файл и обфускация кода
Пятница (22.11.2024) Пятничный кинорелакс
Суббота (23.11.2024)
Воскресенье (24.11.2024) Мы ищем авторов
Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!
С уважением,
Команда канала "Код на салфетке".
#дайджест #материалы #новости #код_на_салфетке
Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:
Понедельник (18.112024) Дайджест за предыдущую неделю
Вторник (19.11.2024) Знаете ли вы разницу между deep copy и shallow copy в Python?
Среда (20.11.2024)
Четверг (21.11.2024) Python-проект в EXE-файл и обфускация кода
Пятница (22.11.2024) Пятничный кинорелакс
Суббота (23.11.2024)
Воскресенье (24.11.2024) Мы ищем авторов
Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!
С уважением,
Команда канала "Код на салфетке".
#дайджест #материалы #новости #код_на_салфетке
🔥4👍1
Хотите разобраться в основах сетей Docker и как связывать контейнеры?
В Docker есть несколько способов организовать сеть между контейнерами, основные из которых:
- bridge (по умолчанию): создает изолированную сеть для контейнеров на одном хосте.
- host: контейнер использует сетевой стек хост-машины.
- overlay: связывает контейнеры на разных хостах (для Docker Swarm).
Теперь контейнеры "дружат" между собой и в
Это упрощает конфигурацию и позволяет контейнерам общаться друг с другом без явного указания IP-адресов. А для просмотра сетей и их подключения используйте:
Код на салфетке x Кусочки кода
В Docker есть несколько способов организовать сеть между контейнерами, основные из которых:
- bridge (по умолчанию): создает изолированную сеть для контейнеров на одном хосте.
- host: контейнер использует сетевой стек хост-машины.
- overlay: связывает контейнеры на разных хостах (для Docker Swarm).
docker network create mynetwork
docker run -d --name web --network mynetwork djangoapp
docker run -d --name db --network mynetwork postgres
Теперь контейнеры "дружат" между собой и в
djangoapp можно настроить подключение к базе данных:import psycopg2
conn = psycopg2.connect(
host='db',
database='mydb',
user='user',
password='password'
)
Это упрощает конфигурацию и позволяет контейнерам общаться друг с другом без явного указания IP-адресов. А для просмотра сетей и их подключения используйте:
docker network ls
docker network inspect mynetwork
Код на салфетке x Кусочки кода
🔥6 3👍1👏1
Неделя IT-донора: масштабируем добро
С 2 по 7 декабря пройдёт девятая акция IT-донор. Это социальный проект Artsofte. Его цель — создать донорское сообщество из специалистов IT-отрасли, которые готовы сдавать кровь. Идея сплотила комьюнити: проект стал федеральной акцией, привлёк более 650 IT-компаний и 40 Министерств.
В прошлую акцию:
❤️ Зарегистрировалось более 2600 добровольцев из 200 городов России;
❤️ Сдали почти 500 литров крови, которые помогли спасти жизни людей со всей России.
И это не предел — ведь скоро стартует декабрьская акция IT-донор.
Как участвовать в акции?
1. Регистрируйтесь через чат-бот IT-донора до 7 декабря включительно;
2. Приходите с 2 по 7 декабря сдавать кровь на станцию переливания в вашем городе. Найти ближайшую к вам станцию можно здесь.
Подробнее о неделе добра и о правилах участия в акции можно прочесть на сайте проекта.
А если у вас ещё остались вопросы, задавайте их в чате сообщества доноров из IT.
С 2 по 7 декабря пройдёт девятая акция IT-донор. Это социальный проект Artsofte. Его цель — создать донорское сообщество из специалистов IT-отрасли, которые готовы сдавать кровь. Идея сплотила комьюнити: проект стал федеральной акцией, привлёк более 650 IT-компаний и 40 Министерств.
В прошлую акцию:
❤️ Зарегистрировалось более 2600 добровольцев из 200 городов России;
❤️ Сдали почти 500 литров крови, которые помогли спасти жизни людей со всей России.
И это не предел — ведь скоро стартует декабрьская акция IT-донор.
Как участвовать в акции?
1. Регистрируйтесь через чат-бот IT-донора до 7 декабря включительно;
2. Приходите с 2 по 7 декабря сдавать кровь на станцию переливания в вашем городе. Найти ближайшую к вам станцию можно здесь.
Подробнее о неделе добра и о правилах участия в акции можно прочесть на сайте проекта.
А если у вас ещё остались вопросы, задавайте их в чате сообщества доноров из IT.
🔥6👍3👏3
Бесплатный аналог ChatGPT на своём ПК
Автор: Иван Ашихмин
В этой статье мы узнаем, что такое предобученные модели нейронных сетей, что такое квантизация и какие ресурсы они потребляют. Также разберём способы запуска аналогов ChatGPT на своём ПК.
Читать пост в Telegram
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#ChatGPT #Гайды #Полезные_инструменты #AI #Квантированные_модели #OpenAI #LLM #GigaChat #GGUF #ИИ #Hugging_Face #YandexGPT
Автор: Иван Ашихмин
В этой статье мы узнаем, что такое предобученные модели нейронных сетей, что такое квантизация и какие ресурсы они потребляют. Также разберём способы запуска аналогов ChatGPT на своём ПК.
Читать пост в Telegram
Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram
#ChatGPT #Гайды #Полезные_инструменты #AI #Квантированные_модели #OpenAI #LLM #GigaChat #GGUF #ИИ #Hugging_Face #YandexGPT
🔥7
Приветствую!
Сегодня пятница, а это значит, что настало время для нашего еженедельного кинопоста! На этой неделе мы предлагаем вам погрузиться в мир научной фантастики. Этот фильм переносит нас в альтернативную реальность, где инопланетяне живут среди людей, но их существование далеко не безоблачно.
Фильм: Район №9
Год: 2009
Более 20 лет назад инопланетяне установили первый контакт с Землей. Люди были готовы ко всему — от враждебного вторжения до невероятного технологического прорыва. Ни того, ни другого не произошло. Пришельцы оказались беженцами со своей собственной планеты, и пока мировое сообщество решало, что с ними делать дальше, для них был организован временный лагерь в южноафриканском Районе N9.
Приятного просмотра!
Сегодня пятница, а это значит, что настало время для нашего еженедельного кинопоста! На этой неделе мы предлагаем вам погрузиться в мир научной фантастики. Этот фильм переносит нас в альтернативную реальность, где инопланетяне живут среди людей, но их существование далеко не безоблачно.
Фильм: Район №9
Год: 2009
Более 20 лет назад инопланетяне установили первый контакт с Землей. Люди были готовы ко всему — от враждебного вторжения до невероятного технологического прорыва. Ни того, ни другого не произошло. Пришельцы оказались беженцами со своей собственной планеты, и пока мировое сообщество решало, что с ними делать дальше, для них был организован временный лагерь в южноафриканском Районе N9.
Приятного просмотра!
👍3🔥3
Что выведет этот код? №46
Задача:
Вы работаете над оптимизацией обработки входящих данных. Для упрощения написания условий фильтрации вы решили использовать вложенные функции и модификацию списка в процессе его обработки. Коллега предложил свой вариант решения.
Посмотрите на код и скажите, что он выведет?
Задача:
Вы работаете над оптимизацией обработки входящих данных. Для упрощения написания условий фильтрации вы решили использовать вложенные функции и модификацию списка в процессе его обработки. Коллега предложил свой вариант решения.
Посмотрите на код и скажите, что он выведет?
🔥4
Что выведет код с изображения? №46
Anonymous Quiz
25%
[1, 3, 5]
6%
[0, 2, 4, 1, 3, 5]
11%
[1, 3, 5, 0, 2, 4]
14%
[1, 2, 3, 4, 5, 6]
44%
IndexError
🔥4
Вчера мы предложили вам довольно простую задачу, в котором за, казалось бы, сложными операциями, скрывается сама простая ошибка. Задачу решило из проголосовавших человек. Давайте резберём правильный ответ.
Задача:
Вы экспериментируете с оптимизацией обработки данных. В представленном коде для фильтрации списка чисел используется вложенная функция и модификация самого списка во время его обработки. Цель задачи — понять, как работает данный код, и выяснить, какой результат будет выведен на экран.
Код задачи:
Разбор кода
Давайте разберём этот код построчно и посмотрим, что происходит.
Функция process_data
Это основная функция, принимающая список целых чисел
Вложенная функция modify_and_filter
Эта функция должна:
1. Проходить по индексам списка
2. Проверять, является ли элемент чётным.
3. Если элемент чётный:
- Удалять его из списка (
- Возвращать индекс удалённого элемента (с помощью
Ключевой момент:
Цикл for i in range(len(data))
Цикл проходит по индексам от
Проблема: Во время работы цикла список
Удаление элемента data.pop(i)
Удаление элемента приводит к изменению длины списка и смещению индексов остальных элементов. Например, если удалить элемент с индексом
Генератор возвращает индексы
Функция
Возврат результата
Функция
Правильный ответ:
Почему возникает ошибка IndexError?
Рассмотрим, что происходит при выполнении программы:
1.
2. Вызов
3. Внутри генератора:
- На первой итерации
- На второй итерации
- Удаляется
- Возвращается
- Следующая итерация пытается проверить
Вывод
Ошибка в программе возникает из-за попытки изменить список во время его итерации. Это меняет длину списка и смещает индексы, что делает дальнейшие попытки доступа к элементам небезопасными. Для избежания подобных ошибок важно:
1. Не модифицировать список внутри цикла, итерирующегося по нему.
2. Использовать копию списка или собирать данные для изменения в отдельную структуру.
Модификация списка — распространённая ошибка новичков, но с пониманием устройства циклов и индексов её легко избежать.
Задача:
Вы экспериментируете с оптимизацией обработки данных. В представленном коде для фильтрации списка чисел используется вложенная функция и модификация самого списка во время его обработки. Цель задачи — понять, как работает данный код, и выяснить, какой результат будет выведен на экран.
Код задачи:
def process_data(data: list[int]) -> list[int]:
def modify_and_filter():
for i in range(len(data)):
if data[i] % 2 == 0:
data.pop(i)
yield i
indices = list(modify_and_filter())
return indices + data
data_lst = [1, 2, 3, 4, 5, 6]
result = process_data(data_lst)
print(result)
Разбор кода
Давайте разберём этот код построчно и посмотрим, что происходит.
Функция process_data
Это основная функция, принимающая список целых чисел
data и возвращающая обработанный результат.Вложенная функция modify_and_filter
Эта функция должна:
1. Проходить по индексам списка
data.2. Проверять, является ли элемент чётным.
3. Если элемент чётный:
- Удалять его из списка (
data.pop(i)).- Возвращать индекс удалённого элемента (с помощью
yield).Ключевой момент:
modify_and_filter — это генератор, так как она использует yield. Вызов этой функции не выполняет её код сразу, а создаёт генераторный объект, выполнение которого начинается только при итерации.Цикл for i in range(len(data))
Цикл проходит по индексам от
0 до len(data) - 1. Внутри цикла вызывается data[i] для проверки условия.Проблема: Во время работы цикла список
data модифицируется. Это влияет на длину списка и смещение элементов, что приводит к несогласованности индексов.Удаление элемента data.pop(i)
Удаление элемента приводит к изменению длины списка и смещению индексов остальных элементов. Например, если удалить элемент с индексом
1, то элемент с индексом 2 станет на место элемента 1, а длина списка уменьшится.Генератор возвращает индексы
Функция
modify_and_filter возвращает индексы удалённых элементов в процессе итерации.Возврат результата
Функция
process_data создаёт список из всех возвращённых генератором индексов (indices) и объединяет его с текущим состоянием списка data.Правильный ответ:
IndexErrorПочему возникает ошибка IndexError?
Рассмотрим, что происходит при выполнении программы:
1.
data_lst = [1, 2, 3, 4, 5, 6].2. Вызов
process_data(data_lst) запускает modify_and_filter.3. Внутри генератора:
- На первой итерации
i = 0, проверяется data[0] (значение 1). Условие не выполнено, идёт следующая итерация.- На второй итерации
i = 1, проверяется data[1] (значение 2). Условие выполнено:- Удаляется
data[1] (pop(1)), список становится [1, 3, 4, 5, 6].- Возвращается
i = 1.- Следующая итерация пытается проверить
data[2], но из-за удаления индексы изменились: на месте data[2] сейчас стоит 4, а длина списка уменьшилась. Попытка доступа к несуществующему индексу приводит к IndexError.Вывод
Ошибка в программе возникает из-за попытки изменить список во время его итерации. Это меняет длину списка и смещает индексы, что делает дальнейшие попытки доступа к элементам небезопасными. Для избежания подобных ошибок важно:
1. Не модифицировать список внутри цикла, итерирующегося по нему.
2. Использовать копию списка или собирать данные для изменения в отдельную структуру.
Модификация списка — распространённая ошибка новичков, но с пониманием устройства циклов и индексов её легко избежать.
🔥3❤2
Привет, друзья!
Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:
Понедельник (25.112024) Дайджест за предыдущую неделю
Вторник (26.11.2024) Хотите разобраться в основах сетей Docker и как связывать контейнеры?
Среда (27.11.2024)
Четверг (28.11.2024) Бесплатный аналог ChatGPT на своём ПК
Пятница (29.11.2024) Пятничный кинорелакс
Суббота (30.11.2024) Задача
Воскресенье (01.12.2024) Разбор задачи
Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!
С уважением,
Команда канала "Код на салфетке".
#дайджест #материалы #новости #код_на_салфетке
Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:
Понедельник (25.112024) Дайджест за предыдущую неделю
Вторник (26.11.2024) Хотите разобраться в основах сетей Docker и как связывать контейнеры?
Среда (27.11.2024)
Четверг (28.11.2024) Бесплатный аналог ChatGPT на своём ПК
Пятница (29.11.2024) Пятничный кинорелакс
Суббота (30.11.2024) Задача
Воскресенье (01.12.2024) Разбор задачи
Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!
С уважением,
Команда канала "Код на салфетке".
#дайджест #материалы #новости #код_на_салфетке
🔥3
Хотите узнать, как использовать SElinux для повышения безопасности в Linux?
Security-Enhanced Linux (SELinux) предоставляет механизм принудительного контроля доступа (MAC), который ограничивает права процессов и пользователей.
Проверка статуса SElinux:
Изменение режима работы:
Создание пользовательской политики:
1. Запустите приложение и соберите ошибки SElinux в /var/log/audit/audit.log
2. Создайте модуль политики:
3. Установите модуль:
- audit2allow автоматически генерирует правила на основе логов (генерируемые правила audit2allow могут быть слишком широкими, поэтому их важно анализировать перед применением)
- semodule управляет модулями политик
Важно помнить, что хоть SElinux и помогает предотвратить несанкционированный доступ и повышает общую безопасность системы, он требует правильной настройки и даже с ней – это не панацея.
Код на салфетке x Кусочки кода
Security-Enhanced Linux (SELinux) предоставляет механизм принудительного контроля доступа (MAC), который ограничивает права процессов и пользователей.
Проверка статуса SElinux:
sestatus
Изменение режима работы:
sudo setenforce Permissive # или Enforcing
Создание пользовательской политики:
1. Запустите приложение и соберите ошибки SElinux в /var/log/audit/audit.log
2. Создайте модуль политики:
sudo audit2allow -a -M mypolicy
3. Установите модуль:
sudo semodule -i mypolicy.pp
- audit2allow автоматически генерирует правила на основе логов (генерируемые правила audit2allow могут быть слишком широкими, поэтому их важно анализировать перед применением)
- semodule управляет модулями политик
Важно помнить, что хоть SElinux и помогает предотвратить несанкционированный доступ и повышает общую безопасность системы, он требует правильной настройки и даже с ней – это не панацея.
Код на салфетке x Кусочки кода
🔥4
Сравнение улучшения кода в Python и C++ (часть 1)
Автор: Eugene Kaddo
Данная статья посвящена теме улучшения кода в языках Python и C++, а именно обработке ошибок, валидации, аннотациям типов, повышению отказоустойчивости и переиспользованию кода.
Читать пост
Файлы к посту, можно получить в боте по коду: 108905
Поддержать проект на Boosty
Поддержать проект в Telegram
#exception #Cpp #Сравнение_Python_и_C_Cpp #annotation #validation
Автор: Eugene Kaddo
Данная статья посвящена теме улучшения кода в языках Python и C++, а именно обработке ошибок, валидации, аннотациям типов, повышению отказоустойчивости и переиспользованию кода.
Читать пост
Файлы к посту, можно получить в боте по коду: 108905
Поддержать проект на Boosty
Поддержать проект в Telegram
#exception #Cpp #Сравнение_Python_и_C_Cpp #annotation #validation
🔥7⚡2👏2❤1