⚡️ Типы функций
Всего в python можно выделить три функции: статические, функции класса (методы) и обычные.
• Обычные — те, что мы создаём, используя обычный def. Они ничем особым не выделяются.
• Методы — создаются внутри классов с помощью того же def. Их особенностью является то, что первым параметром они принимают свой класс. Чаще всего можно заметить их в виде self.
• Статические функции — обычные методы, которые просто относятся к какому либо классу. Они не принимают self или что-то подобное. Определяются используя staticmethod.
Всего в python можно выделить три функции: статические, функции класса (методы) и обычные.
• Обычные — те, что мы создаём, используя обычный def. Они ничем особым не выделяются.
• Методы — создаются внутри классов с помощью того же def. Их особенностью является то, что первым параметром они принимают свой класс. Чаще всего можно заметить их в виде self.
• Статические функции — обычные методы, которые просто относятся к какому либо классу. Они не принимают self или что-то подобное. Определяются используя staticmethod.
⚡️ Простой пример бота на Python Telegram Bot
Ранее уже упоминалась эта библиотека как самая хорошая для новичков, ведь освоить её сможет практически каждый.
Этот пример выполняет те же функции, что и бот на telebot, но здесь вместо декораторов используются обычные методы.
Так, в библиотеке есть некий updater, который контролирует бота.
dispatcher позволяет настроить события и реакции на них, а selector — выбирает, какую функцию нужно вызывать на основе нажатой кнопки.
💾 Скачать пример бота
Ранее уже упоминалась эта библиотека как самая хорошая для новичков, ведь освоить её сможет практически каждый.
Этот пример выполняет те же функции, что и бот на telebot, но здесь вместо декораторов используются обычные методы.
Так, в библиотеке есть некий updater, который контролирует бота.
dispatcher позволяет настроить события и реакции на них, а selector — выбирает, какую функцию нужно вызывать на основе нажатой кнопки.
💾 Скачать пример бота
⚡️ Модуль logging
Без багов в жизни программиста — никуда, поэтому важно уметь их вовремя находить и исправлять.
Для этого существует много способов, но самый удобный из них — логирование. В python с этим поможет модуль logging.
По умолчанию, библиотека выводит все записи в консоль, но можно настроить вывод и в файл.
Для этого воспользуйтесь logging.basicConfig(filename="sample.log", level=logging.INFO).
Теперь, с помощью getLogger("name") можно выделить логи для специальных приложений/действий.
Также, команда logger.setLevel(type) позволяет настроить уровень записи, например logging.DEBUG.
Без багов в жизни программиста — никуда, поэтому важно уметь их вовремя находить и исправлять.
Для этого существует много способов, но самый удобный из них — логирование. В python с этим поможет модуль logging.
По умолчанию, библиотека выводит все записи в консоль, но можно настроить вывод и в файл.
Для этого воспользуйтесь logging.basicConfig(filename="sample.log", level=logging.INFO).
Теперь, с помощью getLogger("name") можно выделить логи для специальных приложений/действий.
Также, команда logger.setLevel(type) позволяет настроить уровень записи, например logging.DEBUG.
⚡️ Взаимодействие с окружением
Довольно часто при работе над проектами у нас используются секретные данные, которым лучше не попадать в интернет.
Мы воспользовались импортированием собственного модуля, но есть ещё один интересный способ — environment.
• Environment — это окружение ОС, внутри которого находятся различные данные. Используется при настройке программ и передачи каких либо значений.
Для получения значений окружения используют os.environ.
Это словарь, из которого можно получить данные с помощью ['some_value'].
Также, вы можете воспользоваться методом os.getenv(key, default), позволяющий настроить значение по умолчанию.
Довольно часто при работе над проектами у нас используются секретные данные, которым лучше не попадать в интернет.
Мы воспользовались импортированием собственного модуля, но есть ещё один интересный способ — environment.
• Environment — это окружение ОС, внутри которого находятся различные данные. Используется при настройке программ и передачи каких либо значений.
Для получения значений окружения используют os.environ.
Это словарь, из которого можно получить данные с помощью ['some_value'].
Также, вы можете воспользоваться методом os.getenv(key, default), позволяющий настроить значение по умолчанию.
⚡️ Flask — простой веб-фреймворк
Flask является очень популярным фреймворком, который даже обгоняет Django по количеству использований.
Его преимущество в том, что он позволяет легко и быстро начать работу без дополнительных настроек, не говоря уже об огромном количестве расширений, которые существуют для него.
Код, доступный по ссылке ниже создаёт небольшую страницу с просьбой перейти на /hi, которая выводит Hello world.
Для запуска приложения нужно вписать в консоль
Скачать фреймворк можно с помощью
💾 Скачать пример кода
Flask является очень популярным фреймворком, который даже обгоняет Django по количеству использований.
Его преимущество в том, что он позволяет легко и быстро начать работу без дополнительных настроек, не говоря уже об огромном количестве расширений, которые существуют для него.
Код, доступный по ссылке ниже создаёт небольшую страницу с просьбой перейти на /hi, которая выводит Hello world.
Для запуска приложения нужно вписать в консоль
flask run
, не забыв выставить FLASK_APP с названием файла. Скачать фреймворк можно с помощью
pip3 install flask
.💾 Скачать пример кода
⚡️ Регулярные выражения
regex (или — Regular expressions) — это строка, которая задаёт шаблон поиска подстрок в тексте.
Её очень часто используют для проверки почт, номеров, ip-адресов и т.д.
Немного про синтаксис регулярных выражений:
\d — любая цифра, а \D — любой символ, кроме цифры.
\s — пробел, \w — любая буква и цифра, а _. [...] — выбор одного из символов внутри квадратных скобок или диапазона.
regex (или — Regular expressions) — это строка, которая задаёт шаблон поиска подстрок в тексте.
Её очень часто используют для проверки почт, номеров, ip-адресов и т.д.
Немного про синтаксис регулярных выражений:
\d — любая цифра, а \D — любой символ, кроме цифры.
\s — пробел, \w — любая буква и цифра, а _. [...] — выбор одного из символов внутри квадратных скобок или диапазона.
⚡️ Хэширование и с чем его едят
Хэш функция нужна для того, чтобы с помощью специального алгоритма превратить массив любого размера в строку на основе элементов.
Например, его довольно часто можно встретить при скачивании файлов или просмотре баз данных.
Также, эту возможность можно использовать для хранения паролей или, например, для быстрого сравнения двух массивов.
| В общем, возможностей — масса.
Одной из таких функций является md5. Выходная строка равна 128 битам или 16 символам, но чаще всего хэши отображаются в шестнадцатеричной системе исчисления, так что вы увидите 32 символа.
Для работы с хэшированием используйте библиотеку hashlib, которая, помимо md5, поддерживает и SHA.
Хэш функция нужна для того, чтобы с помощью специального алгоритма превратить массив любого размера в строку на основе элементов.
Например, его довольно часто можно встретить при скачивании файлов или просмотре баз данных.
Также, эту возможность можно использовать для хранения паролей или, например, для быстрого сравнения двух массивов.
| В общем, возможностей — масса.
Одной из таких функций является md5. Выходная строка равна 128 битам или 16 символам, но чаще всего хэши отображаются в шестнадцатеричной системе исчисления, так что вы увидите 32 символа.
Для работы с хэшированием используйте библиотеку hashlib, которая, помимо md5, поддерживает и SHA.
⚡️ База данных MySql
Если вкратце, то данные с базы данных записываются на диск, а значит — они сохраняются даже после перезагрузки устройства.
Поэтому, чтобы ей воспользоваться, первым делом необходимо установить модуль:
Теперь нужно создать соединение с помощью connect (host, user, password ).
Вы также можете создать пул соединений с помощью pooling.MySQLConnectionPool(), что позволит базе данных работать с многопоточным приложением.
Для взаимодействия с базой данных потребуется использовать курсор: conn.cursor, а выполнение следующих команд выполняется с помощью execute ("Команда")
Если вкратце, то данные с базы данных записываются на диск, а значит — они сохраняются даже после перезагрузки устройства.
Поэтому, чтобы ей воспользоваться, первым делом необходимо установить модуль:
pip install mysql-connector-python
Несмотря на на название библиотеки, импортировать мы будем mysql.connectorТеперь нужно создать соединение с помощью connect (host, user, password ).
Вы также можете создать пул соединений с помощью pooling.MySQLConnectionPool(), что позволит базе данных работать с многопоточным приложением.
Для взаимодействия с базой данных потребуется использовать курсор: conn.cursor, а выполнение следующих команд выполняется с помощью execute ("Команда")
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Модуль progress
Показать пользователю, что программа выполняет работу и сколько ещё осталось до конца — жизненно необходимо.
Сделать это можно с помощью строк прогресса, и в Python есть для этого целая библиотека — progress.
Чтобы её установить, нужно выполнить эту команду:
Показать пользователю, что программа выполняет работу и сколько ещё осталось до конца — жизненно необходимо.
Сделать это можно с помощью строк прогресса, и в Python есть для этого целая библиотека — progress.
Чтобы её установить, нужно выполнить эту команду:
pip install progress
Сам модуль очень легко настраивается, так что вы, при желании, сможете настроить собственную строку прогресса.⚡️ Графики в консоле
Это очень полезно для тех, кто хочет изучать нейронные сети. К примеру, вы можете использовать консоль для построения графика ошибки.
В этом нам поможет библиотека bashplotlib, установив её с помощью этой команды:
• plot_scatter — создаёт двухмерный график. То есть, он принимает x и y. Также эти два метода могут принимать путь к файлу для получения данных
Не стоит забывать и про консольные команды этой библиотеки — scatter и hist. Они очень помогут в поиске ошибки.
Это очень полезно для тех, кто хочет изучать нейронные сети. К примеру, вы можете использовать консоль для построения графика ошибки.
В этом нам поможет библиотека bashplotlib, установив её с помощью этой команды:
pip install bashplotlib
• plot_hist — позволит создать одномерный график. Принимает в себя массив значений. • plot_scatter — создаёт двухмерный график. То есть, он принимает x и y. Также эти два метода могут принимать путь к файлу для получения данных
Не стоит забывать и про консольные команды этой библиотеки — scatter и hist. Они очень помогут в поиске ошибки.
⚡️ Модуль inspect
Всегда было интересно, что происходит «за кулисами» в python? Тогда эта библиотека вам поможет.
Модуль уже установлен в вашей системе, так что его достаточно просто импортировать, без дополнительной установки.
Самые интересные методы в этой библиотеке:
getsource(object) — возвращает исходный код преданного элемента или, если это невозможно, выбрасывает IOError.
signature(object) — возвращает класс Signature, с помощью которого можно исследовать объект. Если перевести его в строку, то можно увидеть аргументы переданного элемента.
ismodule, isclass, etc... — позволяет проверить объект и уточнить, модуль это, класс или что либо другое.
Всегда было интересно, что происходит «за кулисами» в python? Тогда эта библиотека вам поможет.
Модуль уже установлен в вашей системе, так что его достаточно просто импортировать, без дополнительной установки.
Самые интересные методы в этой библиотеке:
getsource(object) — возвращает исходный код преданного элемента или, если это невозможно, выбрасывает IOError.
signature(object) — возвращает класс Signature, с помощью которого можно исследовать объект. Если перевести его в строку, то можно увидеть аргументы переданного элемента.
ismodule, isclass, etc... — позволяет проверить объект и уточнить, модуль это, класс или что либо другое.
⚡️ Переменные аргументы
*args или **kwargs — один из примеров переменных аргументов. Их используют, если разработчик изначально не знает, сколько параметров будет передано функции.
*args — позиционные аргументы, получившие массив для работы. При вызове это выглядит так: func(1,2,3,4).
**kwargs — именованый аргумент. При вызове это выглядит так: func(snake="python", inter="python3"). Учтите, что для своей работы функции нужен словарь.
*args или **kwargs — один из примеров переменных аргументов. Их используют, если разработчик изначально не знает, сколько параметров будет передано функции.
*args — позиционные аргументы, получившие массив для работы. При вызове это выглядит так: func(1,2,3,4).
**kwargs — именованый аргумент. При вызове это выглядит так: func(snake="python", inter="python3"). Учтите, что для своей работы функции нужен словарь.
⚡️ Неявное сравнение строк
Человеческий фактор — неотъемлемая часть при использовании программы пользователем.
Чтобы минимизировать его негативное влияние, воспользуемся библиотекой fuzzywuzzy.
Установка:
ratio(a, b) — обычное сравнение. При изменение символов шанс совпадения упадёт.
partial_ratio(a, b) — частичное сравнение, поиск строки a внутри b. Также чуствительна к регистру.
WRatio(a, b) — продвинутое сравнение. Оно не учитывает знаки препенания, не делящие строку, и регистр букв.
Человеческий фактор — неотъемлемая часть при использовании программы пользователем.
Чтобы минимизировать его негативное влияние, воспользуемся библиотекой fuzzywuzzy.
Установка:
pip install fuzzywuzzy
Вот некоторые полезные функции модуля fuzz:ratio(a, b) — обычное сравнение. При изменение символов шанс совпадения упадёт.
partial_ratio(a, b) — частичное сравнение, поиск строки a внутри b. Также чуствительна к регистру.
WRatio(a, b) — продвинутое сравнение. Оно не учитывает знаки препенания, не делящие строку, и регистр букв.
⚡️Модуль process от fuzzywuzzy
Этот модуль используют для не явного сравнения строк в списке, о чём мы и рассказывали в этом посте.
Полезные функции этого модуля:
extract(a, arr ) — Ищет внутри arr переменную a и возвращает варианты с лучшим совпадением.
extractOne(a, arr) — Делает тоже самое, что и extract, но возвращает только один элемент с лучшим совпадением.
Также вы можете задать limit — кол-во возвращаемых элементов, с самым высоким совпадением.
Этот модуль используют для не явного сравнения строк в списке, о чём мы и рассказывали в этом посте.
Полезные функции этого модуля:
extract(a, arr ) — Ищет внутри arr переменную a и возвращает варианты с лучшим совпадением.
extractOne(a, arr) — Делает тоже самое, что и extract, но возвращает только один элемент с лучшим совпадением.
Также вы можете задать limit — кол-во возвращаемых элементов, с самым высоким совпадением.
⚡️ Генераторы списка
Иногда можно встретится с задачей, в которой нужно сгенерировать массив или обновить значения на основе имеющихся значений. Что ж, в python, как обычно, существует несколько способов это сделать.
Первый способ, он же самый простой, — использовать цикл for и метод append. Но, он считается медленным и переменная остаётся даже после окончания цикла.
Второй способ — использование map. У него нет никаких «побочных эффектов» и работает он очень быстро.
На вход принимает функцию или лямбду и начальный массив. Далее — проходит через каждый элемент, передаёт его функции и сохраняет результат.
Третий — цикл внутри списка. Это позволяет задать значения прямо во время инициализации списка. Первым делом пишем действия, которые будем совершать над элеметами, а дальше — просто вписываем структуру цикла.
Иногда можно встретится с задачей, в которой нужно сгенерировать массив или обновить значения на основе имеющихся значений. Что ж, в python, как обычно, существует несколько способов это сделать.
Первый способ, он же самый простой, — использовать цикл for и метод append. Но, он считается медленным и переменная остаётся даже после окончания цикла.
Второй способ — использование map. У него нет никаких «побочных эффектов» и работает он очень быстро.
На вход принимает функцию или лямбду и начальный массив. Далее — проходит через каждый элемент, передаёт его функции и сохраняет результат.
Третий — цикл внутри списка. Это позволяет задать значения прямо во время инициализации списка. Первым делом пишем действия, которые будем совершать над элеметами, а дальше — просто вписываем структуру цикла.
⚡️Данные о системе
Батарея, количество ядер процессора, виртуальная память — всё это может быть полезно при создании программы или, например, для системных администраторов.
Для получения всех этих значений воспользуемся командой psutil. Скачать такую библиотеку можно с помощью команды:
virtual_memory() — поможет узнать кол-во доступной оперативной памяти
disk_usage(path) — сколько места занято или свободно в папке path
Помимо этого, в библиотеке есть данные об интернете, сенсорах и о нескольких других параметрах.
Батарея, количество ядер процессора, виртуальная память — всё это может быть полезно при создании программы или, например, для системных администраторов.
Для получения всех этих значений воспользуемся командой psutil. Скачать такую библиотеку можно с помощью команды:
pip install psutil
cpu_count() и cpu_freq() — методы, которые позволяют узнать кол-во ядер процессора и частоту.virtual_memory() — поможет узнать кол-во доступной оперативной памяти
disk_usage(path) — сколько места занято или свободно в папке path
Помимо этого, в библиотеке есть данные об интернете, сенсорах и о нескольких других параметрах.
⚡️ map() и filter()
Map мы уже использования для генерации списка. Что map, что filter — это функции для создания нового итератора из списка или словаря.
Map — более производительная замена циклу for для прохода по элементам массива или списка.
Filter — немного быстрее, чем map. В маленьких массивах это тяжело заметить, но при работе с большими данными разница существенна.
Первый аргумент — функция, которая выполняет определённые действия с элементами.
Второй — сам итерируемый объект. Чаще всего это список или словарь.
Map мы уже использования для генерации списка. Что map, что filter — это функции для создания нового итератора из списка или словаря.
Map — более производительная замена циклу for для прохода по элементам массива или списка.
Filter — немного быстрее, чем map. В маленьких массивах это тяжело заметить, но при работе с большими данными разница существенна.
Первый аргумент — функция, которая выполняет определённые действия с элементами.
Второй — сам итерируемый объект. Чаще всего это список или словарь.
⚡️ Перегрузка операторов сравнения
Перегрузка — это создание собственных методов для реализации какого-либо действия. В данном случае, мы собираемся перегрузить операторы сравнения.
Когда вы пишите x > y, то на самом деле вызывается x.__gt__(y). Для каждого оператора есть свой метод сравнения.
При создании класса мы можем переопределить эти методы. В примере выше мы сравниваем не два класса, а числа внутри их.
Стоит отметить, что при переопределении __eq__, (оператор сравнения ==) два разных экземпляра с одинаковыми значениями будут равны. Если это не то, что вам нужно, тогда используйте is.
Перегрузка — это создание собственных методов для реализации какого-либо действия. В данном случае, мы собираемся перегрузить операторы сравнения.
Когда вы пишите x > y, то на самом деле вызывается x.__gt__(y). Для каждого оператора есть свой метод сравнения.
При создании класса мы можем переопределить эти методы. В примере выше мы сравниваем не два класса, а числа внутри их.
Стоит отметить, что при переопределении __eq__, (оператор сравнения ==) два разных экземпляра с одинаковыми значениями будут равны. Если это не то, что вам нужно, тогда используйте is.
⚡️ all() и any()
all и any — это встроенные фунцкии в python. Их используют, чтобы проверить каждый элемент в итерируемом типе (чаще всего это список) на True.
all(list) — проверяет, все ли элементы равны True. Помимо обычного массива с элементами True/False, вы можете передавать и списки с строками, числами и т.д. Пустой список всегда вернёт True.
any(list) — проверяет, есть ли хотя бы один элемент равный True. Также, как и all может работать со строками или числами. Пустой список, в данном случае, вернёт False.
Пустая строка, 0, всегда равна False.
all и any — это встроенные фунцкии в python. Их используют, чтобы проверить каждый элемент в итерируемом типе (чаще всего это список) на True.
all(list) — проверяет, все ли элементы равны True. Помимо обычного массива с элементами True/False, вы можете передавать и списки с строками, числами и т.д. Пустой список всегда вернёт True.
any(list) — проверяет, есть ли хотя бы один элемент равный True. Также, как и all может работать со строками или числами. Пустой список, в данном случае, вернёт False.
Пустая строка, 0, всегда равна False.
⚡️ Модуль collections, класс — Counter
Counter — разновиность словаря, который позваляет считать количество элементов (чаще всего — строк).
elements() — возврашает итератор, который выводит все элементы то же количество раз, что и внутри Counter.
most_common() — возвращает кол-во наиболее повторяющихся элементов в виде массива или кортежей. Если необязательный параметр не задан, то вернётся список всех элементов.
Вы также можете добавлять (+), вычитать (-) или выбирать минимальные значения из двух Counter`ов (&).
Стоит отметить, что значения меньше или равные нулю игнорируются.
Counter — разновиность словаря, который позваляет считать количество элементов (чаще всего — строк).
elements() — возврашает итератор, который выводит все элементы то же количество раз, что и внутри Counter.
most_common() — возвращает кол-во наиболее повторяющихся элементов в виде массива или кортежей. Если необязательный параметр не задан, то вернётся список всех элементов.
Вы также можете добавлять (+), вычитать (-) или выбирать минимальные значения из двух Counter`ов (&).
Стоит отметить, что значения меньше или равные нулю игнорируются.
⚡️ Модуль collections, класс — deque
deque — это оередь из итерируемого объекта (список, например). Очень схож на список, за исключением того, что добавлять и удалять элементы можно только в конце или начале.
append(x) и appendleft(x) — Добавляет x в конец и начало соответственно.
extend(x) и extendleft(x) — добавляет x в конец и начало, но, в отличие от append(x), итерируемый объект здесь x. Учтите, что extendleft начинает добавлять с последнего элемента.
pop() и popleft() — удаляет последний элемент или первый соответственно и возвращает его.
remove(val) — удаляет val из очереди.
reverse() — разворачивает список
rotate(n) — переносит n элементов из начала в конец. Если n < 0, то с конца в начало.
deque — это оередь из итерируемого объекта (список, например). Очень схож на список, за исключением того, что добавлять и удалять элементы можно только в конце или начале.
append(x) и appendleft(x) — Добавляет x в конец и начало соответственно.
extend(x) и extendleft(x) — добавляет x в конец и начало, но, в отличие от append(x), итерируемый объект здесь x. Учтите, что extendleft начинает добавлять с последнего элемента.
pop() и popleft() — удаляет последний элемент или первый соответственно и возвращает его.
remove(val) — удаляет val из очереди.
reverse() — разворачивает список
rotate(n) — переносит n элементов из начала в конец. Если n < 0, то с конца в начало.