Just Python
10.2K subscribers
4.39K photos
11 videos
4.38K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

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

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Экранирование

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

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

#theory // Just Python
Лямбда-функция

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

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

#theory // Just Python
Модуль dis

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

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

#modules // Just Python
Теперь разберём генератор

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

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

#theory // Just Python
Рассказываю про dict

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

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

#theory // Just Python
Немного про регулярные выражения

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

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

#theory // Just Python
Объясняю магию

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

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

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

#theory // Just Python
Генераторные списки

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

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

#theory // Just Python
Модуль heapq

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

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

#modules // Just Python
Поговорим про del

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

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

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

#theory // Just Python
Парсим сайты

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

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

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

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

#theory // Just Python
Фокус с type

Все мы знаем, что type позволяет определять тип данных (строка это или, может, список). Но у него есть другая функция — создание типа.

Таким образом мы можем во время выполнения создать новый класс и пользоваться им.

#theory // Just Python
Тесты в документации

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

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

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

#theory // Just Python
isdecimal() vs isdigit() vs isnumeric()

Эти три метода str используются для определения, является ли строка числом, но у них есть небольшие отличия:

str.isdecimal() — проверяет, является ли строка только набором цифр (1-9). В то время как:

· str.isdigit() вернёт True, даже если в строке есть надстрочные и подстрочные цифры (² или u00B2).

· str.isnumeric() вернёт True, даже если это дробь (½ или u00BD).

#theory // Just Python
Правила документации

class Post:
"""На первой строке краткое описание объекта. После идёт пустая строка (это обязательно).

После идёт подробное объяснение. Кто он,
что он делает и какие параметры принимает.
Документировать можно в несколько абзацев.
Писать доки можно для всего: функции, класса, модуля.
Но если вы мне не доверяете, можете почитать PEP257,
там разработчики рассказывают, как объяснять код.
"""

#useful // Just Python
Несколько фишек Python

1. Мы можем передать кортеж функции isinstance, тогда она будет проверять, относится ли x к одному из этих типов.

2. round может округлять в обратную сторону. То есть не только до дестых, но и до десяток.

3. В один except можно записывать несколько ошибок на обработку.

#theory // Just Python
0x6e 0x75 0x6d 0x65 0x72 0x61 0x6c 0x20 0x73 0x79 0x73 0x74 0x65 0x6d

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

0x для шестнадцатеричной, 0o для восьмеричной и 0b для двоичной системы счисления.

#theory // Just Python
Перейдём к основам-основам

В Python есть два типа типов: изменяемые (list, set, dict) и неизменяемые (bool, int, float, complex, tuple, str, frozenset).

Зачем такие сложности? Неизменяемые типы сохраняют данные, не позволяя другим объектам на них повлиять.

#theory // Just Python
Готовы к взрыву мозга?

Когда вызывается id(Ok()), создаётся экземпляр класса, функция получает адрес в памяти и выкидывает объект (то есть удаляет его).

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

#theory // Just Python
Почему так на***?

reversed(x) позволяет пройтись по объекту в обратном порядке. То есть в нашем случае — 3, 2, 1. Но это итератор, а значит пройтись по нему можно только 1 раз.

Если попробовать получить значения ещё раз, то генератор просто ничего не вернёт. Вызывается sorted([3, 2, 1]) == sorted([]) и, понятное дело, мы получаем False.

#theory // Just Python
Про десятичные числа

В Python3 к цифрам относится всё, что можно считать цифрами, поэтому код с теста не выдал ошибки.

Это, например, '٠' (арабская ноль). Зачем их добавили? На эту тему есть интересная история, связанная с интернетом.

#theory // Just Python