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

Ссылка: @Portal_v_IT

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

Канал на бирже: https://telega.in/c/python_pssss
Download Telegram
Экранирование

Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (про multi-line строки пока не говорим).

Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).

#теория
👍22👎3
Что это за вакханалия?

Начнём с того, что в Python код функции это отдельный объект, который находится в __code__. Напишите import types; help(types.CodeType).

__doc__ указывает на документацию, то есть на строку после определения функции. Кстати, все атрибуты функции можно найти тут в разделе User-defined functions.

#объяснение
👍211🤔1
Лямбда-функция

Слово lambda позволяет запихнуть простую функцию в одну строку. Часто используется вместе с map(), filter().

Но будьте осторожны, некоторые питонисты не любят функциональщину... Я в том числе.

#теория
👍17🔥5🙏1
Теперь разберём генератор

Это всё те же итераторы, которые используются для генерации/создания чего либо, поэтому пройтись по ним можно только 1 раз. Есть функции-генераторы, есть генераторы списков (о них чуть позже).

Они часто используются при больших вычислениях, ведь не потребляют много памяти. А ещё у генераторов есть свои методы.

#теория
👍17
Модуль dis

Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.

Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.

#модули
👍10
Модуль random

Он генерирует псевдослучайные числа. Полностью случайные числа сгенерировать сложно, поэтому создают "случайные" числа.

Кстати, по этой причине лучше использовать для генерации токенов/паролей модуль secrets, добавленный с Python 3.6. Он намного безопаснее.

#модули
👍17💩2🤯1
Рассказываю про dict

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

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

#объяснение
🔥19👍31
Немного про регулярные выражения

Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!

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

#теория
👍10🤔41🤯1
⚡️ Наследование

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

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

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

#теория
👍13🤯2🔥1
Объясняю магию

\b возвращает курсор вывода на один символ назад. А поскольку после него был ещё символ (a), то он просто перезаписался.

Постараюсь интерактивно показать, | это курсор. Первым делом вывелось a|, потом, за счёт \b, стало так: |a, и в результате получили c|.

Кстати, все такие символы можно тут найти.

#объяснение
👍35👎5🤔1
Генераторные списки

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

Кстати, генерировать можно не только списки, но и множества, словари. А можно просто передавать функциям, по типу sum().

#теория
🔥19👍8
Поговорим про del

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

Потом, если объект нигде больше не используется, сборщик мусора удалит его.

Ещё с его помощью можно убирать данные из списка, словаря.

#теория
👍30
Модуль heapq

Нас интересуют только две функции: nlargest() и nsmallest(). Они позволяют получить n самых больших/маленьких значений в iterable.

В большинстве случаев функции быстрее чем sorted(iterable)[:n]. Их использование можно заметить в Counter.most_common().

#модули
👍141
Модуль collections

Нужно посчитать кол-во элементов в списке? Импортируйте Counter! Нужно, чтобы, если ключа не существует, он создавался? Импортируйте defaultdict.

Нужен кортеж с именованными полями? Воспользуйтесь namedtuple(). Нужна очередь? from collections import deque. Документация

#модули
👍19🔥21👏1
⚡️ Парсим сайты

Нужно узнать заголовок последней новости? Отслеживать цену товара? Или автоматически находить решение на Stackoverflow? Вам поможет Beautiful soup.

Установка: pip install beautifulsoup4

Модуль может парсить HTML и XML файлы и находить на них нужную информацию. Например, найти заголовок (тег h1) или все ссылки на сайте.

Функционал довольно большой и весь список можно найти в документации.

#миниурок #bs4
👍18🤔3🔥1
Метод __call__

Позволяет вызывать класс точно так же, как и функцию. То есть вы без проблем можете написать так: MySuperClass()()()() и попасть в писхушку.

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

#теория
👍23
🔥 Почему 0.1 + 0.2 не будет 0.3

Или коротко о том, как работают числа float. Здесь вы узнаете как хранятся числа с плавающей запятой в памяти, про стандарт IEEE-754 и какие проблемы он нам принёс. Перед просмотром надо знать бинарную систему счисления.

Перейти к просмотру | #видео
🔥9👍5🥰2👏1
⚡️ Тесты в документации

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

Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).

Вы можете запускать тесты так же, как в примере, а можно с помощью терминала: python -m doctest -v example.py.

#миниурок #doctest
👍9