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

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

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

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

РКН: clck.ru/3G6pBb
加入频道
Удаление элемента списка во время итерации (ч.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 по-прежнему указывают на тот же список, который был изменен на месте.
Разрешение имен, игнорирующее область видимости класса (ч.1)

Области, вложенные внутри определения класса, игнорируют имена, связанные на уровне класса.
Разрешение имен, игнорирующее область видимости класса (ч.2)

Выражение генератора имеет свою собственную область видимости.

Начиная с Python 3.X, понимание списков также имеет свою собственную область.
Округляет, как банкир (ч.1)

Давайте реализуем наивную функцию для получения среднего элемента списка

Это не ошибка точности с плавающей запятой, на самом деле, такое поведение является преднамеренным. Начиная с Python 3.0, round() использует округление банкира, где дроби .5 округляются до ближайшего четного числа:
Синтаксис

Синтаксис представления списков обеспечивает простой и надежный способ для создания новых списков из уже существующих. Допустим, нам нужен новый список, в котором каждый элемент старого списка будет умножен на 3. При помощи цикла for мы можем это сделать