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
Nan-рефлексивность (ч.2)

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

Поскольку идентификаторы x и y различны, учитываются значения, которые также различны; следовательно, сравнение возвращается False на этот раз.

#theory // Just Python
Чтение файлов и запись в них

Чтобы выполнить любую из операций чтения и записи, нам нужно сделать три основных шага:

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

#theory // Just Python
Распаковка словаря в аргументы функции

Иногда нужно передать значения из словаря в функцию — можно сделать это красиво и лаконично.

data автоматически распакует ключи словаря как имена аргументов, а значения — как аргументы функции.

Итог
Когда у тебя есть словарь с нужными данными, не передавай каждый параметр вручную — просто используй
. Это сокращает код и повышает читаемость.

#theory // Just Python
"Изменение" неизменяемого! (ч.1)

Это может показаться тривиальным, если вы знаете, как работают ссылки в Python.

Цитирую из https://docs.python.org/3/reference/datamodel.html

Неизменяемые последовательности Объект неизменяемого типа последовательности не может измениться после его создания. (Если объект содержит ссылки на другие объекты, эти другие объекты могут быть изменяемыми и могут быть изменены; однако коллекция объектов, на которые непосредственно ссылается неизменяемый объект, не может измениться.)

#theory // Just Python
"Изменение" неизменяемого! (ч.2)

+= оператор изменяет список на месте. Назначение элемента не работает, но когда возникает исключение, элемент уже был изменен на месте.

Также есть объяснение в официальном FAQ по Python.

#theory // Just Python
Исчезающая переменная из внешней области (ч.1)

Когда исключение было назначено с использованием as target, оно очищается в конце except предложения.

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

#theory // Just Python
Исчезающая переменная из внешней области (ч.2)

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

В Python 2.x имя переменной e присваивается Exception() экземпляру, поэтому при попытке печати ничего не выводится.

#theory // Just Python
Таинственное преобразование типа ключа (ч.1)

И объект, s и строка "s" имеют одинаковое значение, потому что SomeClass наследуют hash метод str класса.

SomeClass("s") == "s" вычисляется как, True потому что SomeClass также наследует eq метод от str класса.

#theory // Just Python
Таинственное преобразование типа ключа (ч.2)

Поскольку оба объекта имеют одинаковое значение и равны, они представлены одним и тем же ключом в словаре.

Для желаемого поведения мы можем переопределить eq метод в SomeClass

#theory // Just Python
Давайте посмотрим, сможете ли вы догадаться об этом? (ч.1)

Согласно справочнику по языку Python, операторы присваивания имеют вид
(target_list "=")+ (expression_list | yield_expression)

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

+ In (target_list "=")+ означает, что может быть один или более целевых списков. В данном случае целевыми списками являются a, b и a[b] (обратите внимание, что список выражений равен ровно одному, что в нашем случае и есть {}, 5).

После вычисления списка выражений его значение распаковывается в целевые списки слева направо. Итак, в нашем случае сначала {}, 5 кортеж распаковывается в a, b, и теперь у нас есть a = {} и b = 5.

a теперь присвоен {}, который является изменяемым объектом.

#theory // Just Python
Давайте посмотрим, сможете ли вы догадаться об этом? (ч.2)

Теперь мы устанавливаем ключ 5 в словаре на кортеж, ({}, 5) создающий циклическую ссылку ({...} в выходных данных ссылается на тот же объект, на который a уже ссылается). Другим более простым примером циклической ссылки может быть.

Аналогично обстоит дело в нашем примере (a[b][0] это тот же объект, что и a)

#theory // Just Python
Превышен лимит на преобразование целых строк

Этот вызов int() отлично работает в Python 3.10.6 и вызывает ошибку ValueError в Python 3.10.8. Обратите внимание, что Python все еще может работать с большими целыми числами. Ошибка возникает только при преобразовании между целыми числами и строками.

К счастью, вы можете увеличить предел допустимого количества цифр, когда ожидаете, что операция превысит его. Для этого вы можете использовать один из следующих:

Флаг командной строки -X int_max_str_digits

Функция set_int_max_str_digits() из модуля sys

Переменная среды PYTHONINTMAXSTRDIGITS

#theory // Just Python
Упрямая 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 года ждет вас по ссылке.