Использование оператора Walrus (ч.1)
Непарентизированное "выражение присваивания" (использование оператора walrus) ограничено на верхнем уровне, следовательно SyntaxError в a := "wtf_walrus" утверждение первого фрагмента. Заключая в скобки, он работал так, как ожидалось, и назначал a.
Разъяснивший Python
Непарентизированное "выражение присваивания" (использование оператора walrus) ограничено на верхнем уровне, следовательно SyntaxError в a := "wtf_walrus" утверждение первого фрагмента. Заключая в скобки, он работал так, как ожидалось, и назначал a.
Разъяснивший Python
Использование оператора Walrus (ч.2)
Синтаксис оператора Walrus имеет вид, NAME:= exprгде NAME - допустимый идентификатор, а expr - допустимое выражение. Следовательно, повторяемая упаковка и распаковка не поддерживаются, что означает, (a := 6, 9) эквивалентно ((a := 6), 9) и, в конечном счете, (a, 9) (где a значение равно 6').
Как обычно, заключение в скобки выражения, содержащего = operator, не допускается. Отсюда синтаксическая ошибка в (a, b = 6, 9).
Разъяснивший Python
Синтаксис оператора Walrus имеет вид, NAME:= exprгде NAME - допустимый идентификатор, а expr - допустимое выражение. Следовательно, повторяемая упаковка и распаковка не поддерживаются, что означает, (a := 6, 9) эквивалентно ((a := 6), 9) и, в конечном счете, (a, 9) (где a значение равно 6').
Как обычно, заключение в скобки выражения, содержащего = operator, не допускается. Отсюда синтаксическая ошибка в (a, b = 6, 9).
Разъяснивший Python
Строки
Обратите внимание, что оба идентификатора одинаковы. Поведение в этом фрагменте связано с оптимизацией CPython (называемой интернированием строк), которая в некоторых случаях пытается использовать существующие неизменяемые объекты вместо того, чтобы каждый раз создавать новый объект.
Разъяснивший Python
Обратите внимание, что оба идентификатора одинаковы. Поведение в этом фрагменте связано с оптимизацией CPython (называемой интернированием строк), которая в некоторых случаях пытается использовать существующие неизменяемые объекты вместо того, чтобы каждый раз создавать новый объект.
Разъяснивший Python
Строки иногда могут быть сложными (ч.1)
Когда для a и b в одной строке заданы значения "wtf!", интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную. Если вы делаете это в отдельных строках, он не "знает", что уже существует "wtf!" как объект (потому что "wtf!" неявно интернирован согласно фактам, упомянутым выше). Это оптимизация во время компиляции. Эта оптимизация не применяется к версиям CPython 3.7.x (проверьте этот вопрос для более подробного обсуждения).
Разъяснивший Python
Когда для a и b в одной строке заданы значения "wtf!", интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную. Если вы делаете это в отдельных строках, он не "знает", что уже существует "wtf!" как объект (потому что "wtf!" неявно интернирован согласно фактам, упомянутым выше). Это оптимизация во время компиляции. Эта оптимизация не применяется к версиям CPython 3.7.x (проверьте этот вопрос для более подробного обсуждения).
Разъяснивший Python
Строки иногда могут быть сложными (ч.2)
Модуль компиляции в интерактивной среде, такой как IPython, состоит из одного оператора, тогда как в случае модулей он состоит из всего модуля. a, b = "wtf!", "wtf!" это один оператор, тогда как a = "wtf!"; b = "wtf!" это два оператора в одной строке. Это объясняет, почему идентификаторы различаются в a = "wtf!"; b = "wtf!", а также объясняет, почему они одинаковы при вызове в some_file.py
Разъяснивший Python
Модуль компиляции в интерактивной среде, такой как IPython, состоит из одного оператора, тогда как в случае модулей он состоит из всего модуля. a, b = "wtf!", "wtf!" это один оператор, тогда как a = "wtf!"; b = "wtf!" это два оператора в одной строке. Это объясняет, почему идентификаторы различаются в a = "wtf!"; b = "wtf!", а также объясняет, почему они одинаковы при вызове в some_file.py
Разъяснивший Python
Будьте осторожны с цепными операциями (ч.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.
Разъяснивший Python
Согласно документации, если 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.
Разъяснивший Python
Будьте осторожны с цепными операциями (ч.2)
Такое поведение в этом примере может показаться вам глупым но, оно фантастично с такими вещами, как a == b == c и 0 <= x <= 100. Поэтому 1 > 0 < 1 эквивалентно, (1 > 0) and (0 < 1) который вычисляется как True и Выражение (1 > 0) < 1 эквивалентно True < 1.
Итак, 1 < 1 вычисляется как False
Разъяснивший Python
Такое поведение в этом примере может показаться вам глупым но, оно фантастично с такими вещами, как a == b == c и 0 <= x <= 100. Поэтому 1 > 0 < 1 эквивалентно, (1 > 0) and (0 < 1) который вычисляется как True и Выражение (1 > 0) < 1 эквивалентно True < 1.
Итак, 1 < 1 вычисляется как False
Разъяснивший Python
Разница между is и ==
is оператор проверяет, ссылаются ли оба операнда на один и тот же объект (т.Е. он проверяет, совпадает ли идентификатор операндов или нет).
== оператор сравнивает значения обоих операндов и проверяет, совпадают ли они.
Это is для равенства ссылок и == для равенства значений.
256 является существующим объектом, но 257 им не является. При запуске python будут выделены числа от -5 до 256. Эти числа используются часто, поэтому имеет смысл просто иметь их наготове.
Разъяснивший Python
is оператор проверяет, ссылаются ли оба операнда на один и тот же объект (т.Е. он проверяет, совпадает ли идентификатор операндов или нет).
== оператор сравнивает значения обоих операндов и проверяет, совпадают ли они.
Это is для равенства ссылок и == для равенства значений.
256 является существующим объектом, но 257 им не является. При запуске python будут выделены числа от -5 до 256. Эти числа используются часто, поэтому имеет смысл просто иметь их наготове.
Разъяснивший Python
Хэш брауни (ч.1)
Уникальность ключей в словаре Python определяется эквивалентностью, а не идентичностью. Итак, даже несмотря на то, что 5, 5.0 и 5 + 0j являются различными объектами разных типов, поскольку они равны, они не могут оба находиться в одном и том же dict (или set). Как только вы вставите любой из них, попытка поиска любого отдельного, но эквивалентного ключа завершится успехом с исходным отображенным значением (вместо сбоя с KeyError)
Разъяснивший Python
Уникальность ключей в словаре Python определяется эквивалентностью, а не идентичностью. Итак, даже несмотря на то, что 5, 5.0 и 5 + 0j являются различными объектами разных типов, поскольку они равны, они не могут оба находиться в одном и том же dict (или set). Как только вы вставите любой из них, попытка поиска любого отдельного, но эквивалентного ключа завершится успехом с исходным отображенным значением (вместо сбоя с KeyError)
Разъяснивший Python
❤1
Хэш брауни (ч.2)
Итак, как мы можем обновить ключ на 5 (вместо 5.0)? На самом деле мы не можем выполнить это обновление на месте, но что мы можем сделать, это сначала удалить ключ (del some_dict[5.0]), а затем установить его (some_dict[5]), чтобы получить целое число 5 в качестве ключа вместо плавающего 5.0, хотя это должно быть необходимо в редких случаях.
Разъяснивший Python
Итак, как мы можем обновить ключ на 5 (вместо 5.0)? На самом деле мы не можем выполнить это обновление на месте, но что мы можем сделать, это сначала удалить ключ (del some_dict[5.0]), а затем установить его (some_dict[5]), чтобы получить целое число 5 в качестве ключа вместо плавающего 5.0, хотя это должно быть необходимо в редких случаях.
Разъяснивший Python
Как не использовать оператор is
Тут оба a и b ссылаются на один и тот же объект при инициализации с одинаковым значением в одной строке. Это происходит когда a и b устанавливаются в 257 значения в одной строке, интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную.
Если вы делаете это в отдельных строках, он не "знает", что уже существует 257 как объект. Это оптимизация компилятора, и она особенно применима к интерактивной среде. Когда вы вводите две строки в живой интерпретатор, они компилируются отдельно, следовательно, оптимизируются отдельно.
Разъяснивший Python
Тут оба a и b ссылаются на один и тот же объект при инициализации с одинаковым значением в одной строке. Это происходит когда a и b устанавливаются в 257 значения в одной строке, интерпретатор Python создает новый объект, а затем одновременно ссылается на вторую переменную.
Если вы делаете это в отдельных строках, он не "знает", что уже существует 257 как объект. Это оптимизация компилятора, и она особенно применима к интерактивной среде. Когда вы вводите две строки в живой интерпретатор, они компилируются отдельно, следовательно, оптимизируются отдельно.
Разъяснивший Python
Как работают списки в Python?
Делимся очень полезным гайдом по спискам. Он тебе поможет при подготовке к собеседованиям. Ты узнаешь, как устроен список, производительность на уровне CPython и многое другое.
Читать...
Разъяснивший Python
Делимся очень полезным гайдом по спискам. Он тебе поможет при подготовке к собеседованиям. Ты узнаешь, как устроен список, производительность на уровне CPython и многое другое.
Читать...
Разъяснивший Python
Хабр
Окончательно разбираем списки в питоне
Какая структура данных стоит за list ? Как быстро отрабатывает операция append ? Эти вопросы часто задают на собеседованиях, и чтобы на них отвечать, нужно понимать, как список...
Telegram Bot на Python: разбираем API
В этом видеоуроке автор подробно и наглядно разбирает как делать запросы к API Telegram, чтобы осуществить работу будущего бота. Вы узнаете как работает любая библиотека "под капотом".
Смотреть...
Разъяснивший Python
В этом видеоуроке автор подробно и наглядно разбирает как делать запросы к API Telegram, чтобы осуществить работу будущего бота. Вы узнаете как работает любая библиотека "под капотом".
Смотреть...
Разъяснивший Python
YouTube
Разбираем Telegram Bot API
Это видео к курсу разработки ботов, где вы узнаете про то как сделать запросы к API Telegram`а, для того, чтобы осуществить работу вашего будущего бота.
---
Обновленные видео с Aiogram 3 уже на платформе, поэтому выкладываю уроки по Aiogram 2 в открытый…
---
Обновленные видео с Aiogram 3 уже на платформе, поэтому выкладываю уроки по Aiogram 2 в открытый…
Хэш-функций (ч.1)
Когда вы это делаете some_dict[5] = "Python", Python находит существующий элемент с эквивалентным ключом 5.0 -> "Ruby", перезаписывает его значение на месте и оставляет исходный ключ в покое.
Разъяснивший Python
Когда вы это делаете some_dict[5] = "Python", Python находит существующий элемент с эквивалентным ключом 5.0 -> "Ruby", перезаписывает его значение на месте и оставляет исходный ключ в покое.
Разъяснивший Python
Хэш-функций (ч.2)
Как Python нашел 5 в словаре, содержащем 5.0? Python делает это за постоянное время без необходимости сканировать каждый элемент с помощью хэш-функций. Когда Python ищет ключ foo в dict, он сначала выполняет вычисления hash(foo) (которые выполняются в постоянном времени). Поскольку в Python требуется, чтобы объекты, которые сравниваются равными, также имели одинаковое хэш-значение (docs здесь), 5, 5.0 и 5 + 0j имеют одинаковое хэш-значение.
Разъяснивший Python
Как Python нашел 5 в словаре, содержащем 5.0? Python делает это за постоянное время без необходимости сканировать каждый элемент с помощью хэш-функций. Когда Python ищет ключ foo в dict, он сначала выполняет вычисления hash(foo) (которые выполняются в постоянном времени). Поскольку в Python требуется, чтобы объекты, которые сравниваются равными, также имели одинаковое хэш-значение (docs здесь), 5, 5.0 и 5 + 0j имеют одинаковое хэш-значение.
Разъяснивший Python
Python лёгкий. Go простой. Простой != лёгкий
Существует распространённое заблуждение, будто простой и лёгкий — это одно и то же. В конце концов, если некий инструмент легко использовать, то и его внутреннее устройство должно быть просто понять, разве не так?
Читать...
Разъяснивший Python
Существует распространённое заблуждение, будто простой и лёгкий — это одно и то же. В конце концов, если некий инструмент легко использовать, то и его внутреннее устройство должно быть просто понять, разве не так?
Читать...
Разъяснивший Python
Хабр
Python лёгкий. Go простой. Простой != лёгкий
Python и Go отличаются по свойствам, и поэтому могут дополнять друг друга. Существует распространённое заблуждение, будто простой и лёгкий — это одно и то же. В конце концов, если некий...
В глубине души мы все одинаковые (ч.1)
При id вызове Python создал объект WTF класса и передал его id функции. id Функция берет его id (его ячейку памяти) и выбрасывает объект. Объект уничтожен. Когда мы делаем это дважды подряд, Python выделяет ту же ячейку памяти и для этого второго объекта.
Поскольку (в CPython) id в качестве идентификатора объекта используется ячейка памяти, идентификатор двух объектов одинаков.
Разъяснивший Python
При id вызове Python создал объект WTF класса и передал его id функции. id Функция берет его id (его ячейку памяти) и выбрасывает объект. Объект уничтожен. Когда мы делаем это дважды подряд, Python выделяет ту же ячейку памяти и для этого второго объекта.
Поскольку (в CPython) id в качестве идентификатора объекта используется ячейка памяти, идентификатор двух объектов одинаков.
Разъяснивший Python
😁1
В связи с нынешними ограничениями по работе Telegram, создали аналог канала в Max — Заметки Питониста
Если у вас возникают проблемы с загрузкой контента, переходите в наш дублированный канал — https://max.ru/pythontest_it
Если у вас возникают проблемы с загрузкой контента, переходите в наш дублированный канал — https://max.ru/pythontest_it
Осталось 24 часа, чтобы забрать 👇🏼
- доступ к бесплатному интенсиву "Первые деньги на вайбкодинге" (старт уже завтра 7.04 в 19.00)
- уроки по программированию с нейронками
- 50 бесплатных нейросетей, чтобы кодить без остановки
- «Библиотека промптов для заработка на вайбкодинге», которые помогут упаковать портфолио и общаться с клиентами так, чтобы покупали
Все бонусы уже ждут тебя в закрытом канале по вайбкодингу👇
Вступить в закрытый канал
Вступить в закрытый канал
Вступить в закрытый канал
- доступ к бесплатному интенсиву "Первые деньги на вайбкодинге" (старт уже завтра 7.04 в 19.00)
- уроки по программированию с нейронками
- 50 бесплатных нейросетей, чтобы кодить без остановки
- «Библиотека промптов для заработка на вайбкодинге», которые помогут упаковать портфолио и общаться с клиентами так, чтобы покупали
Все бонусы уже ждут тебя в закрытом канале по вайбкодингу👇
Вступить в закрытый канал
Вступить в закрытый канал
Вступить в закрытый канал
В глубине души мы все одинаковые (ч.2)
Идентификатор объекта уникален только на протяжении всего срока службы объекта. После уничтожения объекта или до его создания что-то еще может иметь тот же идентификатор.
Как вы можете заметить, порядок, в котором уничтожаются объекты, - это то, что имеет здесь решающее значение.
Разъяснивший Python
Идентификатор объекта уникален только на протяжении всего срока службы объекта. После уничтожения объекта или до его создания что-то еще может иметь тот же идентификатор.
Как вы можете заметить, порядок, в котором уничтожаются объекты, - это то, что имеет здесь решающее значение.
Разъяснивший Python