Python Community
12.9K subscribers
1.26K photos
37 videos
15 files
741 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
⚡️ Что такое __name__

Эта переменная хранит название модуля, который импортируется. А если это прямой запуск (python3 foo.py), то его значение будет __main__.

Теперь поговорим про __name__ == "__main__". При импорте модуля весь код выполняется. Чтобы избежать странного поведения (см. пример), стоит делать проверку.

#теория
👍3
⚡️ is vs ==

Оператор сравнения (==) вызывает метод __eq__ у объекта, который сравнивает себя с другим и возвращает True или False.

Оператор is сравнивает, является ли этот объект одним и тем же. То есть сравнивает ссылки объектов: id(a) == id(b).

Кстати, поскольку создатели некоторых классов могут неправильно реализовать __eq__, при сравнении с None рекомендуют использовать is.

#теория
🔥11👍4
⚡️ Про область видимости

Вы можете просмотреть все переменные, которые хранятся в определённой области видимости (модуль, класс, функция) с помощью функций locals() и dir().

dir(object) — возвращает список со всеми доступными именами у object. Если ничего не передано, возвращает имена в конкретной области видимости.

locals() — возвращает словарь со всеми доступными переменными и их значениями в конкретной области видимости.

#теория
👍6
⚡️ Наследование

Это один из принципов ООП, который позволяет дочернему классу перенять все возможности родителя. Или, проще говоря, мы переиспользуем код другого класса.

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

Кстати, по умолчанию все классы наследуются от object, даже если мы этого не указываем. Поэтому у класса будет всё, что есть у object.

#теория
👍12
⚡️ Распаковка

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

Также распаковка может использоваться при вызове функции. Таким образом мы передаём элементы списка как аргументы.

Для распаковки последовательностей используется одна звёздочка, а для словарей — две.

#теория
👍7
⚡️ Лямбда функции

Лямбда функциями называют те, что определены с помощью lambda. Также их называют анонимными функциями, поскольку у них нет имени.

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

Таким образом нам нужно намного меньше кода для создания простой функции. Также лямбда-функции часто используются вместе с map() и filter().

#теория
👍9
⚡️ Что за Global Interpreter Lock (GIL)

Если вы интересовались многопоточными программами, то слышали про этот термин. Это означает, что в определённый момент интерпретатором будет выполняться только один поток.

Она не особо влияет на производительность, если приложение работает с I/O-операциями (чтение, запись файла), но если оно активно использует процессор, то никакого прироста от многопоточности вы не получите.

Почему до сих пор не исправили? Есть решения, но они либо очень сложные, либо сделают только хуже. Но, не смотря на это, разработчики сильно улучшили GIL в последних версиях Python.

#теория
👍3
⚡️ Замыкание

Это возможность вложенной функции получить доступ к данным во внешней даже после того, как та выполнилась.

На его основе строится около половины алгоритмов в функциональном программировании. А ещё замыкание позволяет инкапсулировать код.

С этой штукой надо быть осторожным и без надобности не использовать, поскольку она довольно требовательная к ресурсам пк.

#теория
👍8
⚡️ Три помощника при работе с циклами

enumerate(iter, start=0) — проходится по итератору и возвращает кортеж (индекс, значение). Если задать второй параметр, то индекс сместиться на start единиц.

zip(a, b, c...) — параллельно проходит по всем объектам, возвращая по элементу с каждого.

reversed(obj) — просто переворачивает obj. Если это не возможно — возвращает ошибку.

Если вы что-то не поняли, то можете посетить документацию: enumerate, zip и reversed.

#теория
👍3
⚡️ Переопределяем поведение

Python используется магические методы (__eq__, __add__) при работе с операторами (==, +) и не только. Список действий и магических методом можно найти в operator.

Суть в том, что мы можем менять поведение операторов за счёт переопределения этих самых магических методов. Хорошим примером является pathlib с делением.

Кстати, магическими методами называют всё, что окружено двойными подчёркиваниями. Это и __init__, и __str__ и остальные.

#теория
👍1