Разъяснивший Python
8.17K subscribers
2.44K photos
40 videos
30 files
2.29K links
Твой проводник в омут Python'а

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/python_pssss
Download Telegram
Переменная вне области видимости (ч.3)

Чтобы изменить переменную внешней области a в another_inner_func, используйте nonlocal ключевое слово. Нелокальный оператор используется для ссылки на переменные, определенные в ближайшей внешней (исключая глобальную) области видимости.

Ключевые слова global и nonlocal говорят интерпретатору python не объявлять новые переменные и искать их в соответствующих внешних областях.

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

Разъяснивший Python
Готовый код за 4 часа или за 4 минуты?
Решать тебе. Но рынок всё равно поставит на тех, кто кодит с нейросетями.


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

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

Что ждет вас на вебинаре?

– Разберём, что такое вайб-кодинг и как Cursor уже меняет правила игры на IT-рынке;
– Пошагово покажем, как программировать в Cursor, не написав ни единой строки кода вручную;
– Создадим готовый проект с нуля своими руками;
– Расскажем, где и как правильно применять эти знания в 2025 году.

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

Один из самых свежих и бесплатных эфиров лета 2025 года ждет вас по ссылке.
Удаление элемента списка во время итерации (ч.1)

Никогда не стоит менять объект, над которым вы выполняете итерацию. Правильный способ сделать это - выполнить итерацию по копии объекта вместо этого, и list_3[:] делает именно это.

Разница между del, remove и pop:

del var_name просто удаляет привязку var_name из локального или глобального пространства имен (вот почему list_1 это не влияет).

remove удаляет первое совпадающее значение, а не конкретный индекс, повышает ValueError, если значение не найдено.

pop удаляет элемент с определенным индексом и возвращает его, поднимает, IndexError если указан недопустимый индекс.

Разъяснивший Python
Удаление элемента списка во время итерации (ч.2)

Почему вывод такой[2, 4]?

Итерация списка выполняется индекс за индексом, и когда мы удаляем 1 из list_2 или list_4, содержимое списков теперь [2, 3, 4]. Остальные элементы сдвинуты вниз, т.Е. 2 находятся с индексом 0, а 3 - с индексом 1. Поскольку следующая итерация будет смотреть на индекс 1 (который является 3), 2 он полностью пропускается. Аналогичная вещь произойдет с каждым альтернативным элементом в последовательности списков.

Обратитесь к этому потоку StackOverflow, объясняющему пример

Смотрите также этот приятный поток StackOverflow для аналогичного примера, связанного со словарями в Python.

Разъяснивший Python
Почтовый индекс итераторов с потерями

Итак, функция принимает произвольное количество итерируемых объектов, добавляет каждый из их элементов в result список, вызывая для них next функцию, и останавливается всякий раз, когда какой-либо из итерируемых объектов исчерпан.

Предостережение здесь в том, что когда любой итерируемый параметр исчерпан, существующие элементы в result списке отбрасываются. Именно это произошло с 3 в numbers_iter.

Первый аргумент zip должен содержать наименьшее количество элементов.

Разъяснивший Python
👍1
IP-адрес

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

Разъяснивший Python
👍1
User-Agent

Механизм защиты от скрапинга – User-Agent. UA – это заголовок, который браузеры отправляют в запросах для идентификации. Обычно он представляет собой длинную строку, в которой объявляется имя браузера, версия, платформа и многое другое.

Разъяснивший Python
Утечки переменных цикла (ч.1)

Но x никогда не был определен вне области действия цикла for...

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

Разъяснивший Python
Очиститель почты

Сделаем очиститель почты. Он будет автоматически убирать спам и старые письма в архив или корзину. Фильтр при желании можешь сам задать, но в качестве примера будем удалять письма старше 60 дней. Обрати внимание, мы используем IMAP для доступа к почте. Поэтому лучше использовать отдельный email или App Password, если почта на Gmail (из-за 2FA).

Ссылка на код

Разъяснивший Python
Утечки переменных цикла (ч.2)

Различия в выходных данных интерпретаторов Python 2.x и Python 3.x для примера понимания списков можно объяснить следующими изменениями, описанными в Что нового в Python 3.0

Разъяснивший Python
Утечки переменных цикла (ч.3)

Понимание списков больше не поддерживает синтаксическую форму [... for var in item1, item2, ...]. Используйте [... for var in (item1, item2, ...)] вместо этого. Также обратите внимание, что понимание списков имеет другую семантику: они ближе к синтаксическому сахару для выражения генератора внутри list() конструктора, и, в частности, управляющие переменные цикла больше не передаются в окружающую область видимости.

Разъяснивший Python
1
Остерегайтесь изменяемых аргументов по умолчанию (ч.1)

Изменяемые аргументы функций по умолчанию в Python на самом деле не инициализируются при каждом вызове функции. Вместо этого в качестве значения по умолчанию используется недавно присвоенное им значение. Когда мы явно передали [] в some_func качестве аргумента значение default_arg переменной по умолчанию не использовалось, поэтому функция вернулась, как ожидалось.

Разъяснивший Python
Остерегайтесь изменяемых аргументов по умолчанию (ч.2)

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

Разъяснивший Python
Проверка вхождения подстроки через оператор in — быстрее и проще

Иногда разработчики прибегают к str.find() или str.index() для поиска подстроки, но есть более питоничный способ — использовать in.

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

Разъяснивший Python
Перехват исключений (ч.1)

Чтобы добавить несколько исключений в предложение except, вам нужно передать их в виде кортежа в скобках в качестве первого аргумента. Второй аргумент - это необязательное имя, которое при указании будет привязывать созданный экземпляр исключения.

Разъяснивший Python
Перехват исключений (ч.2)

Разделение исключения из переменной запятой устарело и не работает в Python 3; правильный способ - использовать as.

Разъяснивший Python
Атрибуты по умолчанию с getattr

Иногда нужно безопасно получить значение атрибута объекта, даже если он может не существовать. Вместо проверки через hasattr, можно использовать getattr с дефолтным значением.

Безопасный доступ — особенно полезен при работе с внешними объектами, парсерами или нестабильными структурами данных.

Итог:
getattr(obj, attr, default) — простой способ избежать AttributeError и задать значение по умолчанию для несуществующих атрибутов.

Разъяснивший Python
Те же операнды, другая история! (ч.1)

a += b не всегда ведет себя так же, как a = a + b. Классы могут по-разному реализовывать op= операторы, и списки делают это.

Выражение a = a + [5,6,7,8] генерирует новый список и устанавливает a ссылку на этот новый список, оставляя b без изменений.

Разъяснивший Python
Те же операнды, другая история! (ч.2)

Выражение a += [5,6,7,8] на самом деле сопоставлено с функцией "extend", которая работает со списком таким образом, что a и b по-прежнему указывают на тот же список, который был изменен на месте.

Разъяснивший Python
Разрешение имен, игнорирующее область видимости класса (ч.1)

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

Разъяснивший Python