Just Python
11.2K subscribers
3.66K photos
11 videos
3.65K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

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

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Упрямая del операция (ч.1)

Фух, наконец-то удалил. Возможно, вы уже догадались, что спасло del от вызова при нашей первой попытке удаления x.

del x напрямую не вызывает x.del().

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

#theory // Just Python
Упрямая del операция (ч.2)

Во втором фрагменте вывода del() не был вызван, потому что предыдущий оператор (>>> y) в интерактивном интерпретаторе создал другую ссылку на тот же объект (в частности, на _ магическую переменную, которая ссылается на результирующее значение последнего не None выражения в REPL), таким образом предотвращая достижение нулевого значения количества ссылок при del y обнаружении.

Вызов globals (или, на самом деле, выполнение чего-либо, что не будет иметь None результата) заставил _ ссылаться на новый результат, отбрасывая существующую ссылку. Теперь количество ссылок достигло 0, и мы видим, что "Удалено!" печатается (наконец-то!).

#theory // Just Python
Переменная вне области видимости (ч.1)

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

#theory // Just Python
Переменная вне области видимости (ч.2)

Чтобы изменить переменную внешней области a в another_func, мы должны использовать global ключевое слово.

В another_closure_func, a становится локальным для области another_inner_func, но он не был инициализирован ранее в той же области, поэтому выдает ошибку.

#theory // Just Python
Переменная вне области видимости (ч.3)

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

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

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

#theory // Just Python
Удаление элемента списка во время итерации (ч.1)

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

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

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

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

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

#theory // Just Python
Удаление элемента списка во время итерации (ч.2)

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

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

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

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

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


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

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

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

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

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

Один из самых свежих и бесплатных эфиров лета 2025 года ждет вас по ссылке.
Почтовый индекс итераторов с потерями

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

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

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

#theory // Just Python
IP-адрес

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

#theory // Just Python
Декораторы

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

#theory // Just Python
User-Agent

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

#theory // Just Python
Утечки переменных цикла (ч.1)

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

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

#theory // Just Python
Утечки переменных цикла (ч.2)

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

#theory // Just Python
Утечки переменных цикла (ч.3)

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

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

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

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

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

#theory // Just Python
Перехват исключений (ч.1)

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

#theory // Just Python
Перехват исключений (ч.2)

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

#theory // Just Python
Те же операнды, другая история! (ч.1)

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

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

#theory // Just Python