Примеры использования модуля os в Python
os.chdir() и os.getcwd()
Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии.
Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE.
После этого мы изменили папки, при помощи os.chdir().
os.chdir() и os.getcwd()
Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии.
Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE.
После этого мы изменили папки, при помощи os.chdir().
🔥2👍1
Примеры использования модуля os в Python (ч. 2)
os.path.join
Метод join позволяет вам совместить несколько путей при помощи присвоенного разделителя.
К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash).
В данном примере мы совместили путь каталога и файла вместе, для получения рабочего пути. Обратите внимание на то, что метод join не указывает на то, какой результат в итоге вышел.
os.path.join
Метод join позволяет вам совместить несколько путей при помощи присвоенного разделителя.
К примеру, в Windows, в роли разделителя выступает бэкслэш (косая черта, указывающая назад), однако в Linux функция разделителя присвоена косой черте, указывающей вперед (forward slash).
В данном примере мы совместили путь каталога и файла вместе, для получения рабочего пути. Обратите внимание на то, что метод join не указывает на то, какой результат в итоге вышел.
👍2🔥1
Как обрабатывать исключения?
Обработка исключений в Пайтон – это очень просто. Потратим немного времени и напишем несколько примеров, которые их вызовут. Мы начнем с одной из самых элементарных проблем: деление на ноль.
Если мы обратимся к урокам элементарной математики, то вспомним, что на ноль делить нельзя. В Пайтоне данная операция вызовет ошибку, как мы можем видеть в примере выше. Чтобы поймать ошибку, мы завернем операцию в оператор try/except.
Обработка исключений в Пайтон – это очень просто. Потратим немного времени и напишем несколько примеров, которые их вызовут. Мы начнем с одной из самых элементарных проблем: деление на ноль.
Если мы обратимся к урокам элементарной математики, то вспомним, что на ноль делить нельзя. В Пайтоне данная операция вызовет ошибку, как мы можем видеть в примере выше. Чтобы поймать ошибку, мы завернем операцию в оператор try/except.
👍3👏1
Класс collections.deque
Класс deque реализует двухконечную очередь, которая поддерживает добавление и удаление элементов с обоих концов в течение О(1) времени.
Объекты deque представлены в виде двусвязных списков, что дает им превосходную производительность для входящих и выходящих элементов, но при этом у него плохая производительность O(n) при работе со случайно принимаемыми элементами в середине очереди.
В связи с тем, что deque поддерживает вставку и удаление элементов одинаково хорошо, они могут поддерживать и очереди и стеки. collections.deque это отличное решение, если вы ищите структуру данных очереди в Python в стандартной библиотеке.
Класс deque реализует двухконечную очередь, которая поддерживает добавление и удаление элементов с обоих концов в течение О(1) времени.
Объекты deque представлены в виде двусвязных списков, что дает им превосходную производительность для входящих и выходящих элементов, но при этом у него плохая производительность O(n) при работе со случайно принимаемыми элементами в середине очереди.
В связи с тем, что deque поддерживает вставку и удаление элементов одинаково хорошо, они могут поддерживать и очереди и стеки. collections.deque это отличное решение, если вы ищите структуру данных очереди в Python в стандартной библиотеке.
👍4
Простая обрезка изображения в Pillow
Обозначим область обрезки изображения с помощью кортежа box=(left, upper, right, lower).
Верхней левой координате соответствует (x, y) = (left, upper), а нижней правой — (x, y) = (right, lower). Область, которую нужно обрезать — left <= x <right и upper <= y <lower, а пиксели x = right и y = lower не включаются.
Не забудьте, что box используется вместе со скобками ().
Обозначим область обрезки изображения с помощью кортежа box=(left, upper, right, lower).
Верхней левой координате соответствует (x, y) = (left, upper), а нижней правой — (x, y) = (right, lower). Область, которую нужно обрезать — left <= x <right и upper <= y <lower, а пиксели x = right и y = lower не включаются.
Не забудьте, что box используется вместе со скобками ().
⚡2👍2🔥1
Разбираем модуль sys.executable
sys.executable - путь к интерпретатору Python.
Значение sys.executable – это полный путь к интерпретатору Python. Это очень полезно, когда вы используете чей-то компьютер, и вам нужно узнать, где установлен Python. В некоторых системах, данная команда не сработает, и выдаст пустую строку с надписью None.
sys.executable - путь к интерпретатору Python.
Значение sys.executable – это полный путь к интерпретатору Python. Это очень полезно, когда вы используете чей-то компьютер, и вам нужно узнать, где установлен Python. В некоторых системах, данная команда не сработает, и выдаст пустую строку с надписью None.
👍2
Показатели производительности
Мы можем быстро убедиться, что функция действительно возвращает плоский словарь, но как насчет производительности? Будет ли хорошей идеей использовать этот подход в продакшен-среде? Давайте запустим быстрый замер показателей скорости.
Здесь и во всех дальнейших замерах производительности мы будем пользоваться магической функцией IPython — timeit, а также memit из библиотеки memory_profiler.
P.S. Чтобы функция %memit заработала, сперва нужно запустить %load_ext memory_profiler.
Мы можем быстро убедиться, что функция действительно возвращает плоский словарь, но как насчет производительности? Будет ли хорошей идеей использовать этот подход в продакшен-среде? Давайте запустим быстрый замер показателей скорости.
Здесь и во всех дальнейших замерах производительности мы будем пользоваться магической функцией IPython — timeit, а также memit из библиотеки memory_profiler.
P.S. Чтобы функция %memit заработала, сперва нужно запустить %load_ext memory_profiler.
👍3
Делаем многоуровневый словарь плоским при помощи собственной рекурсивной функции
Быстрый поиск в Google приводит нас на StackOverflow. Первый же ответ предлагает рекурсивную функцию, которая перебирает словарь и возвращает «уплощенный» экземпляр. Вдохновившись этой функцией, давайте создадим немного более продвинутую версию.
Можем начать с type hinting (явного указания типов). Это улучшит читаемость и сделает код типобезопасным.
Быстрый поиск в Google приводит нас на StackOverflow. Первый же ответ предлагает рекурсивную функцию, которая перебирает словарь и возвращает «уплощенный» экземпляр. Вдохновившись этой функцией, давайте создадим немного более продвинутую версию.
Можем начать с type hinting (явного указания типов). Это улучшит читаемость и сделает код типобезопасным.
👍3❤1
Метод items()
Метод items() используется для возврата списка кортежей с парами всех ключей и значений словаря.
Синтаксис: dictionary.items()
Данный метод не принимает никаких аргументов.
Приведем пример использования данной функции.
Объявлен словарь с именем products. Ключи содержат названия продуктов, а значения — их цены. Используем для нашего словаря метод items() и сохраним в другой переменной с именем itemlist, а затем выведем на экран.
Метод items() используется для возврата списка кортежей с парами всех ключей и значений словаря.
Синтаксис: dictionary.items()
Данный метод не принимает никаких аргументов.
Приведем пример использования данной функции.
Объявлен словарь с именем products. Ключи содержат названия продуктов, а значения — их цены. Используем для нашего словаря метод items() и сохраним в другой переменной с именем itemlist, а затем выведем на экран.
👍5❤1❤🔥1
Распаковываем многоуровневый словарь, используя библиотеку flatdict (ч.1)
flatdict — это библиотека Python, создающая из вложенного словаря одноуровневый. Она доступна в Python 3.5 и выше.
Пока мы увидели, что написание собственных решений — не идеальный вариант, но и использование полнофункциональной библиотеки вроде pandas лишь для распаковки словаря — тоже не предел мечтаний.
flatdict — это библиотека Python, создающая из вложенного словаря одноуровневый. Она доступна в Python 3.5 и выше.
Пока мы увидели, что написание собственных решений — не идеальный вариант, но и использование полнофункциональной библиотеки вроде pandas лишь для распаковки словаря — тоже не предел мечтаний.
👍3❤1
Что такое метаклассы — короткий обзор
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
Самая простая реализация метакласса, которая ничего не делает, выглядит следующим образом
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
Самая простая реализация метакласса, которая ничего не делает, выглядит следующим образом
❤🔥5🔥3👍1
Нелокальная переменная во вложенной функции
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (nonlocal) переменная.
Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (enclosing scope).
В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
Прежде чем перейти к тому, что такое замыкание, мы должны сначала понять, что такое вложенная функция и нелокальная (nonlocal) переменная.
Функция, определенная внутри другой функции, называется вложенной функцией. Вложенные функции могут получать доступ к переменным из локальной области видимости объемлющих функций (enclosing scope).
В Python нелокальные переменные по умолчанию доступны только для чтения. Если нам необходимо их модифицировать, то мы должны объявить их явно как нелокальные (используя ключевое слово nonlocal).
👍2❤1🔥1
Словари (dict)
Словари — часто используемый тип данных в Python. Давайте посмотрим на их изменчивость.
Определим словарь под именем dict с тремя ключами и их значениями. Когда мы распечатаем его, отобразится все его содержимое. Можно распечатать каждое значение словаря отдельно, а также использовать ключи вместо индексов.
Словари — часто используемый тип данных в Python. Давайте посмотрим на их изменчивость.
Определим словарь под именем dict с тремя ключами и их значениями. Когда мы распечатаем его, отобразится все его содержимое. Можно распечатать каждое значение словаря отдельно, а также использовать ключи вместо индексов.
👍5❤1🔥1
Что такое *args и kwargs? (ч.1)
Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции *args и kwargs.
На самом деле названия переменных – args, kwargs – это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.
Иногда нельзя предсказать, сколько аргументов получит функция. Чтобы обработать их, используются специальные конструкции *args и kwargs.
На самом деле названия переменных – args, kwargs – это просто соглашение. Важны здесь только звездочки. Они обозначают сборку аргументов в коллекцию (список или словарь). Одна звездочка предназначена для обычных аргументов, две – для именованных.
👍5🔥2
Что такое *args и kwargs? (ч.2)
Можно заменить *args на *vars, а kwargs на options или другое слово. Программа будет работать корректно, но другие разработчики могут вас не понять.
Конструкции *args и kwargs можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg обрабатывается отдельно, а все остальные собираются в коллекцию.
Можно заменить *args на *vars, а kwargs на options или другое слово. Программа будет работать корректно, но другие разработчики могут вас не понять.
Конструкции *args и kwargs можно использовать как самостоятельно, так и в комбинации с любым количеством обычных аргументов. Например, в коде выше первый параметр farg обрабатывается отдельно, а все остальные собираются в коллекцию.
👍3🔥1
Мир регулярных выражений
Иногда непросто очистить текст с помощью определенных символов или фраз. Вместо этого нам необходимо использовать некоторые шаблоны. И здесь нам на помощь приходят регулярные выражения и соответствующий модуль Python.
Мы не будем обсуждать всю мощь регулярных выражений, а сосредоточимся на их применении — например, на разделении и замене данных.
Иногда непросто очистить текст с помощью определенных символов или фраз. Вместо этого нам необходимо использовать некоторые шаблоны. И здесь нам на помощь приходят регулярные выражения и соответствующий модуль Python.
Мы не будем обсуждать всю мощь регулярных выражений, а сосредоточимся на их применении — например, на разделении и замене данных.
👍2❤1🔥1
Удаление знаков препинания
Модуль string в Python имеет множество встроенных констант с отдельными наборами символов. string.punctuation — один из них, поэтому мы будем использовать его для очистки строки.
В Python3 string.punctuation — это предварительно инициализированная строка, используемая как строковая константа. В Python string.punctuation даст все наборы знаков препинания.
Модуль string в Python имеет множество встроенных констант с отдельными наборами символов. string.punctuation — один из них, поэтому мы будем использовать его для очистки строки.
В Python3 string.punctuation — это предварительно инициализированная строка, используемая как строковая константа. В Python string.punctuation даст все наборы знаков препинания.
👍5❤1
Translate и Replace
Первый случай — заменить или удалить некоторые символы или подстроки из текста. В Python есть встроенные функции в модуле string, которые выполняют эти задачи.
Метод translate() использует таблицу (которая строится при помощи функции maketrans) для удаления или изменения определенных символов
Первый случай — заменить или удалить некоторые символы или подстроки из текста. В Python есть встроенные функции в модуле string, которые выполняют эти задачи.
Метод translate() использует таблицу (которая строится при помощи функции maketrans) для удаления или изменения определенных символов
👍2🔥2❤1
Функция findall()
Если мы хотим найти все вхождения, в дело вступает функция findall().
Синтаксис: findall(pattern, string, flags=0[optional])
В случае успеха данная функция возвращает список, в котором в виде строк содержатся все искомые вхождения по порядку. Если вхождений нет, то эта функция возвратит пустой список.
Если мы хотим найти все вхождения, в дело вступает функция findall().
Синтаксис: findall(pattern, string, flags=0[optional])
В случае успеха данная функция возвращает список, в котором в виде строк содержатся все искомые вхождения по порядку. Если вхождений нет, то эта функция возвратит пустой список.
👍4❤2👏1