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

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

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

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

РКН: clck.ru/3G6pBb
加入频道
Говорят, что среди программистов больше мужчин, чем женщин. Проверим, так ли это. Какого вы пола?
Anonymous Poll
83%
Мужской
17%
Женский
Использование оператора Walrus (ч.2)

Синтаксис оператора Walrus имеет вид, NAME:= exprгде NAME - допустимый идентификатор, а expr - допустимое выражение. Следовательно, повторяемая упаковка и распаковка не поддерживаются, что означает, (a := 6, 9) эквивалентно ((a := 6), 9) и, в конечном счете, (a, 9) (где a значение равно 6').

Как обычно, заключение в скобки выражения, содержащего = operator, не допускается. Отсюда синтаксическая ошибка в (a, b = 6, 9).
Строки

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

Когда для a и b в одной строке заданы значения "wtf!", интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную. Если вы делаете это в отдельных строках, он не "знает", что уже существует "wtf!" как объект (потому что "wtf!" неявно интернирован согласно фактам, упомянутым выше). Это оптимизация во время компиляции. Эта оптимизация не применяется к версиям CPython 3.7.x (проверьте этот вопрос для более подробного обсуждения).
Строки иногда могут быть сложными (ч.2)

Модуль компиляции в интерактивной среде, такой как IPython, состоит из одного оператора, тогда как в случае модулей он состоит из всего модуля. a, b = "wtf!", "wtf!" это один оператор, тогда как a = "wtf!"; b = "wtf!" это два оператора в одной строке. Это объясняет, почему идентификаторы различаются в a = "wtf!"; b = "wtf!", а также объясняет, почему они одинаковы при вызове в some_file.py
Строки иногда могут быть сложными (ч.3)

Резкое изменение выходных данных четвертого фрагмента связано с методом глазковой оптимизации, известным как постоянное сворачивание. Это означает, что выражение 'a'*20 заменяется на 'aaaaaaaaaaaaaaaaaaaa' во время компиляции, чтобы сэкономить несколько тактов во время выполнения. Постоянное сгибание происходит только для строк, имеющих длину менее 21. (Почему? Представьте размер .pyc файла, сгенерированного в результате выражения 'a'*10**10). Вот исходный код реализации для того же самого.
Будьте осторожны с цепными операциями (ч.1)

Согласно документации, если a, b, c, ..., y, z являются выражениями, а op1, op2, ..., opN - операторами сравнения, то op1 является op2 c ... y opN z эквивалентен op1 b и b op2 c и ... y opN z, за исключением того, что каждое выражение вычисляется не более одного раза.

Из-за этого мы получаем что, False is False is False эквивалентно (False is False) and (False is False) и True is False == False эквивалентно (True is False) and (False == False) и поскольку первая часть инструкции (True is False) вычисляется как False, общее выражение вычисляется как False.
Ответьте, пожалуйста, на вопрос. Нам это важно, чтобы продолжать создавать актуальный для вас контент. Сколько вам лет?
Anonymous Poll
20%
До 18
19%
От 18 до 24-х лет
24%
От 25 до 34-х лет
24%
От 35 до 44-х лет
7%
От 45 до 54-х лет
6%
Старше 50
Python — язык программирования, который легко освоить с нуля. На нём создают сайты, игры, чат-боты, нейросети и проводят научные вычисления. Благодаря такой универсальности он один из самых популярных в мире. Python-разработчики востребованы в самых разных IT-направлениях — от веб-разработки до финтеха.

С 27 по 29 апреля в 19:00 по московскому времени присоединяйтесь к бесплатному интенсиву, где вы сможете попробовать свои силы в программировании на практике: ▶️ https://epic.st/0R1kY.

Вы научитесь:
— Получать данные с сайтов, которые помогают аналитикам и владельцам бизнеса изучать рынок, конкурентов и динамику цен.
— Работать с API — специальными программными инструкциями, с помощью которых можно получить данные с сайтов.
— Парсить HTML. Узнаете, как автоматизировать сбор информации прямо из HTML-кода сайта.
— Автоматически выделять важное из огромных массивов данных с помощью Python.
— Писать программы для автоматической отправки важных писем по расписанию, тем самым автоматизировать Email-рассылки.
— Разбираться в рынке фриланса на Python.

🎁 Всем участникам, прошедшим интенсив, подарим электронную книгу Роджера Сайпа и Робба Збиерски «Разум под контролем» издательства МИФ. Подключайтесь, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox.
Будьте осторожны с цепными операциями (ч.2)

Такое поведение в этом примере может показаться вам глупым но, оно фантастично с такими вещами, как a == b == c и 0 <= x <= 100. Поэтому 1 > 0 < 1 эквивалентно, (1 > 0) and (0 < 1) который вычисляется как True и Выражение (1 > 0) < 1 эквивалентно True < 1.

Итак, 1 < 1 вычисляется как False
Разница между is и ==

is оператор проверяет, ссылаются ли оба операнда на один и тот же объект (т.Е. он проверяет, совпадает ли идентификатор операндов или нет).

== оператор сравнивает значения обоих операндов и проверяет, совпадают ли они.
Это is для равенства ссылок и == для равенства значений.

256 является существующим объектом, но 257 им не является. При запуске python будут выделены числа от -5 до 256. Эти числа используются часто, поэтому имеет смысл просто иметь их наготове.
Годная реклама стала такой редкостью, что ей посвятили канал

Наконец-то, блин, нормальная рекламаклииик
Как не использовать оператор is

Тут оба a и b ссылаются на один и тот же объект при инициализации с одинаковым значением в одной строке. Это происходит когда a и b устанавливаются в 257 значения в одной строке, интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную.

Если вы делаете это в отдельных строках, он не "знает", что уже существует 257 как объект. Это оптимизация компилятора, и она особенно применима к интерактивной среде. Когда вы вводите две строки в живой интерпретатор, они компилируются отдельно, следовательно, оптимизируются отдельно.
Хэш брауни (ч.1)

Уникальность ключей в словаре Python определяется эквивалентностью, а не идентичностью. Итак, даже несмотря на то, что 5, 5.0 и 5 + 0j являются различными объектами разных типов, поскольку они равны, они не могут оба находиться в одном и том же dict (или set). Как только вы вставите любой из них, попытка поиска любого отдельного, но эквивалентного ключа завершится успехом с исходным отображенным значением (вместо сбоя с KeyError)
Хэш брауни (ч.2)

Итак, как мы можем обновить ключ на 5 (вместо 5.0)? На самом деле мы не можем выполнить это обновление на месте, но что мы можем сделать, это сначала удалить ключ (del some_dict[5.0]), а затем установить его (some_dict[5]), чтобы получить целое число 5 в качестве ключа вместо плавающего 5.0, хотя это должно быть необходимо в редких случаях.
Хэш-функций (ч.1)

Когда вы это делаете some_dict[5] = "Python", Python находит существующий элемент с эквивалентным ключом 5.0 -> "Ruby", перезаписывает его значение на месте и оставляет исходный ключ в покое.
Ребята из Yudaev School создали новый формат обучения дизайн-профессиям.

Теперь достаточно записаться на обучение дизайну с 0 до PRO к Yudaev School и вы получите:
— Подбор дизайн-профессии, подходящей именно вам.
— Гарантию трудоустройства или 100% возврат средств.
— Возможность получить стипендию до 30 000 р. (если назвать менеджеру при общении промо-код стипендия)

Если вы творческий человек, которому интересно каждый день создавать что-то новое, не заниматься рутиной — дизайн для вас мастхэв.
Здесь и зарплаты от 60 000 до 350 000 рублей в месяц и количество вакансий десятки тысяч, а на удаленке более 1 000 000 заказов в месяц и это только в России.

Записывайтесь и получайте профессию дизайнера с гарантией трудоустройства: https://clck.ru/34CqpN
Хэш-функций (ч.2)

Как Python нашел 5 в словаре, содержащем 5.0? Python делает это за постоянное время без необходимости сканировать каждый элемент с помощью хэш-функций. Когда Python ищет ключ foo в dict, он сначала выполняет вычисления hash(foo) (которые выполняются в постоянном времени). Поскольку в Python требуется, чтобы объекты, которые сравниваются равными, также имели одинаковое хэш-значение (docs здесь), 5, 5.0 и 5 + 0j имеют одинаковое хэш-значение.
Узнайте как работать из дома без навыков программирования и зарабатывать от 100.000 рублей в месяц на закрытом вебинаре от SkyPro

Специальный гость вебинара Карина kerry.catt — популярный блогер по релокации в США.

На эфире вы узнаете:
— 3 самых востребованных IT-профессии, где не надо ковыряться в коде.
— Примерите на себе профессию, которая подойдет именно вам.
— Узнаете как легко без опыта перейти в новую профессию меньше, чем за полгода.

Все участники получат в подарок гарантированную скидку на обучение новой профессии от SkyPro

Дата старта 27 апреля в 19:00 по МСК. Спешите зарегистрироваться, записи эфира не будет: https://clck.ru/34EbKc
Как вывести переменную и строку в Python, разделив их запятыми

Вы можете указать строку и переменную в качестве аргументов функции print(), просто перечислив их через запятую.