Python School
82.3K subscribers
2.4K photos
7 videos
571 links
Уроки по Python, которые упростят вам жизнь. Без идиотских туториалов.

Наши мемы для программистов: @conhum

Сотрудничество - @alivian

Канал сотрудничает с рекламным сервисом @Tgpodbor_official

РКН: clck.ru/3G6pBb
加入频道
Переменная вне области видимости (ч.1)

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

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

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

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

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

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

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

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

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

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

pop удаляет элемент с определенным индексом и возвращает его, поднимает, IndexError если указан недопустимый индекс.
Наша редакция заметила в городе вот такие баннеры. Пытаемся разобрать эту задачку от Академии Яндекса всем коллективом, но пока не выходит. Может, у вас получится?
Удаление элемента списка во время итерации (ч.2)

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

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

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

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

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

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

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

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

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

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

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

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

Различия в выходных данных интерпретаторов Python 2.x и Python 3.x для примера понимания списков можно объяснить следующими изменениями, описанными в Что нового в Python 3.0
Хотите научиться собирать информацию из интернета, анализировать данные и автоматизировать рутину с помощью Python? Присоединяйтесь к бесплатному интенсиву с 1 по 3 июня в 19:00 по московскому времени. За 3 дня вы на практике познакомитесь с различными сферами применения языка Python, узнаете, какие навыки сейчас востребованы на фрилансе, и поймёте, как начать работать на удалёнке: ▶️ https://goo.su/N6BiJ

На интенсиве вы:

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

Спикером выступит руководитель направления по исследованию данных в Сбере Анастасия Борнева. Она с 2018 года занимается автоматизацией процессов с помощью искусственного интеллекта.

🎁 Всем участникам, прошедшим интенсив, подарим электронную книгу Роджера Сайпа и Робба Збиерски «Разум под контролем» издательства МИФ. А каждый, кто оставит заявку на участие в интенсиве, получит материал с подборкой коротких и полезных программ на Python.

Подключайтесь, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox
Утечки переменных цикла (ч.3)

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

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

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

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

Разделение исключения из переменной запятой устарело и не работает в Python 3; правильный способ - использовать as.
Хотите узнать больше об IT-профессии? Начните с бесплатного онлайн-интенсива Skillbox «Как выбрать язык программирования и найти работу». Выберите направление карьерной деятельности, которое будет интересно именно вам. 

За 3 дня вы:

попробуете сразу несколько востребованных IT-направлений;
узнаете, сколько платят разным IT-специалистам и на кого сейчас есть спрос;
на практике познакомитесь с самыми популярными языками программирования;
научитесь составлять резюме и готовиться к собеседованиям.
 
Интенсив бесплатный, а каждый участник получит полезные подарки. Автору лучшей практической работы по мнению спикера подарим скидку 99% на курс Skillbox 😉

Первый вебинар уже скоро — начинаем 5 июня в 19:00 (МСК). Скорее записывайтесь по ссылке 👉 https://epic.st/_HNvy
Те же операнды, другая история! (ч.1)

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

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

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