Разъяснивший Python
8.18K subscribers
2.43K photos
40 videos
30 files
2.28K links
Твой проводник в омут Python'а

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/python_pssss
Download Telegram
Дикий импорт (ч.1)

Часто рекомендуется не использовать импорт подстановочных знаков. Первая очевидная причина этого заключается в том, что при импорте подстановочных знаков имена с начальным подчеркиванием не импортируются. Это может привести к ошибкам во время выполнения.

Разъяснивший Python
Дикий импорт (ч.2)

Если бы мы использовали from ... import a, b, c синтаксис, прошлого NameError не произошло бы.

Разъяснивший Python
Дикий импорт (ч.3)

Если вы действительно хотите использовать импорт по шаблону, то вам нужно будет определить список all в вашем модуле, который будет содержать список общедоступных объектов, которые будут доступны, когда мы выполним импорт по шаблону.

Разъяснивший Python
Полуночного времени не существует?

До Python 3.5 логическое значение для datetime.time объекта считалось равным False, если оно представляло полночь по UTC. Он подвержен ошибкам при использовании if obj: синтаксиса для проверки, является ли obj нулевым или каким-либо эквивалентом "пустого".

Разъяснивший Python
Заморозить словарь: types.MappingProxyType

Иногда нужно передать неизменяемый словарь, чтобы никто не мог случайно его изменить. Для этого есть
MappingProxyType из модуля types.

Сам original можно изменять, а frozen — нет.

Итог:
MappingProxyType — способ создать защищённый от изменений "словарь-обёртку", полезный в API и конфигурациях.

Разъяснивший Python
Все разобрано? (ч.1)

Sorted Метод всегда возвращает список, а сравнение списков и кортежей всегда возвращает False результат на Python.

В отличие от этого, sortedметод reversed возвращает итератор. Почему? Потому что сортировка требует, чтобы итератор был либо изменен на месте, либо использовал дополнительный контейнер (список), тогда как реверсирование может просто работать путем повторения от последнего индекса к первому.

Разъяснивший Python
Получение имени текущей функции: inspect.currentframe()

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

Итог:
С помощью inspect.currentframe().f_code.co_name можно динамически получить имя текущей функции. Отлично подходит для логирования и отладки.

Разъяснивший Python
Объединение нескольких словарей без update()

Обычно для объединения словарей используют .update(), но с Python 3.9 можно делать это удобнее и читаемее — с помощью оператора |.

Итог:
Оператор | — лаконичный способ объединять словари. Второй словарь переопределяет ключи первого.

Разъяснивший Python
Приготовьтесь!

future Модуль обычно используется для предоставления функций из будущих версий Python. Однако "будущее" в этом конкретном контексте звучит иронично.

Это пасхальное яйцо, посвященное чувствам сообщества по этому вопросу.

Код на самом деле присутствует здесь, в future.c файле.

Когда компилятор CPython сталкивается с инструкцией future, он сначала запускает соответствующий код в future.c, прежде чем рассматривать его как обычную инструкцию import .

Разъяснивший Python
Давайте познакомимся с дружелюбным дядей по языку на всю жизнь

Это относится к PEP-401, выпущенному 1 апреля 2009 года (теперь вы знаете, что это значит).

Цитирую из PEP-401

Учитывая, что оператор неравенства != в Python 3.0 был ужасной ошибкой, вызывающей боль в пальцах, FLUFL восстанавливает оператор <> diamond в качестве единственного написания.

Разъяснивший Python
Сколько времени может работать код

Вы не задумывались, сколько именно времени занимает работа кода в рамках одной ячейки?

Магическая команда time позволяет получить всю необходимую информацию о времени.

Разъяснивший Python
Виртуальные среды

И так к нашему счастью, в Python есть поддержка виртуальных сред, которые позволяют взять лучшее от двух миров.

Так же вы теперь можете иметь разные независимые версии Python на одной машине

Разъяснивший Python
Давно хотели просмотреть содержимое внешнего файла?

Часто вам может понадобиться скопировать в свой код несколько строк кода из внешнего файла. Команда %pycat избавит вас от долгой процедуры извлечения определенных данных из файла и их копирования в другой файл. Она позволяет просматривать содержимое любого файла в любом каталоге.

Разъяснивший Python
Как скопировать всё содержимое внешнего файла?

В большинстве случаев возникает необходимость скопировать содержимое вашей ячейки в скрипт python или текстовый файл непосредственно из вашего блокнота Jupyter.

Вместо того чтобы копировать все и создавать новый файл, вы можете напрямую экспортировать свои данные, добавив команду writefile в ячейку перед кодом.

Разъяснивший Python
else - Предложение для циклов

Наверняка вы знаете, что в пайтоне для циклов for и while предусмотрен блок else. И с этим блоком возникает много путаницы, потому что его действие на первый взгляд неинтуитивно. Но с этим легко справиться.

else Предложение после цикла выполняется только тогда, когда после всех итераций нет явного break. Вы можете думать об этом как о предложении "nobreak".

Разъяснивший Python
Многоточие

В Python Ellipsis это глобально доступный встроенный объект, который эквивалентен ... .

>>> ...
Ellipsis

В основном многоточие используются для нескольких целей,

1) В качестве заполнителя для кода, который еще не был написан (точно так же, как pass инструкция)
2) В синтаксисе нарезки для представления полных фрагментов в оставшемся направлении

Разъяснивший Python
Inpinity

Как можно представить бесконечное число в python? Независимо от того, какое число вы вводите в программу, ни одно число не должно быть больше этого представления бесконечности.

Это возможно реализовать с помощью inpinity.

При этом хэш бесконечности равен 10⁵ x π. Интересно, что хэш float('-inf') в Python 3 равен "-10⁵ x π", тогда как в Python 2 "-10⁵ x e".

Разъяснивший Python
Давайте переделаем (ч.1)

Искажение имен используется, чтобы избежать конфликтов именования между различными пространствами имен.

В Python интерпретатор изменяет (искажает) имена членов класса, начинающиеся с __ (двойное подчеркивание, также известное как "dunder") и не заканчивающиеся более чем одним завершающим подчеркиванием, добавляя _NameOfTheClass впереди.

Разъяснивший Python
👍1
Давайте переделаем (ч.2)

Итак, чтобы получить доступ к атрибуту __honey в первом фрагменте, нам пришлось добавить _Yo в начало, что предотвратило бы конфликты с атрибутом того же имени, определенным в любом другом классе.

Но тогда почему это не сработало во втором фрагменте? Потому что искажение имен исключает имена, заканчивающиеся двойным подчеркиванием.

Разъяснивший Python
👍1
Открываем локально поисковую строку Google

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

Разъяснивший Python
🔥1