Определение литеральных типов
Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval() из модуля ast.
Данная функция поможет безопасно определить литеральный тип, а в случае если был передан не литерал, то выбросит исключение. Это можно использовать для оценки выражений из внешних источников при парсинге файлов, либо пользовательского ввода.
Подписывайтесь на канал 👉@pythonofff
Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval() из модуля ast.
Данная функция поможет безопасно определить литеральный тип, а в случае если был передан не литерал, то выбросит исключение. Это можно использовать для оценки выражений из внешних источников при парсинге файлов, либо пользовательского ввода.
Подписывайтесь на канал 👉@pythonofff
👍1
Использование метода float()
Если входная строка имеет аргументы за пределами диапазона чисел с плавающей запятой, вы получите ошибку OverflowError.
Для реализации следующих скриптов на Python установите сам Python, а также подходящую IDE (Pycharm, Jupiter, Spyder и т.д.). Создайте новый файл, вставьте туда код и запустите его.
Подписывайтесь на канал 👉@pythonofff
Если входная строка имеет аргументы за пределами диапазона чисел с плавающей запятой, вы получите ошибку OverflowError.
Для реализации следующих скриптов на Python установите сам Python, а также подходящую IDE (Pycharm, Jupiter, Spyder и т.д.). Создайте новый файл, вставьте туда код и запустите его.
Подписывайтесь на канал 👉@pythonofff
👍1
Генераторы
Функции-генераторы выглядят как и обычные, но вместо return содержат выражения с ключевым словом yield для последовательного генерирования значений.
Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции next или циклом for.
Если генератору больше нечего возвращать, то будет вызвано исключение StopIteration. В целом, генератор — это особый, более изящный случай итератора.
Подписывайтесь на канал 👉@pythonofff
Функции-генераторы выглядят как и обычные, но вместо return содержат выражения с ключевым словом yield для последовательного генерирования значений.
Вызов подобной функции вернёт не значение, а объект генератора. Далее из этого объекта можно получать значения, например, с помощью функции next или циклом for.
Если генератору больше нечего возвращать, то будет вызвано исключение StopIteration. В целом, генератор — это особый, более изящный случай итератора.
Подписывайтесь на канал 👉@pythonofff
👍2
Как перевернуть список в Python с помощью функции reversed()
Функция reversed() принимает список в качестве аргумента и возвращает нам исходные элементы, только в обратном порядке.
Если вы хотите сохранить возвращаемое значение из функции reversed() для дальнейшего использования, то нужно преобразовать результат в список с помощью функции list(). Далее необходимо присвоить получившееся выражение переменной, в нашем случае my_new_list.
Подписывайтесь на канал 👉@pythonofff
Функция reversed() принимает список в качестве аргумента и возвращает нам исходные элементы, только в обратном порядке.
Если вы хотите сохранить возвращаемое значение из функции reversed() для дальнейшего использования, то нужно преобразовать результат в список с помощью функции list(). Далее необходимо присвоить получившееся выражение переменной, в нашем случае my_new_list.
Подписывайтесь на канал 👉@pythonofff
👍4
Корутины
Некой противоположностью генераторов являются корутины. Для примера напишем функцию, которая будет в бесконечном цикле подставлять значение и выводить строку.
Обратите внимание на то, как было использовано ключевое слово yield. При таком написании создаётся не генератор, а корутина, что позволяет не просто генерировать значения, но и принимать их.
Функция работает так: при отправке значения через метод send локальная переменная name принимает его, а далее значение подставляется в строку и выводится на экран.
Подписывайтесь на канал 👉@pythonofff
Некой противоположностью генераторов являются корутины. Для примера напишем функцию, которая будет в бесконечном цикле подставлять значение и выводить строку.
Обратите внимание на то, как было использовано ключевое слово yield. При таком написании создаётся не генератор, а корутина, что позволяет не просто генерировать значения, но и принимать их.
Функция работает так: при отправке значения через метод send локальная переменная name принимает его, а далее значение подставляется в строку и выводится на экран.
Подписывайтесь на канал 👉@pythonofff
👍10
Функции reversed()
Важно! Не путайте функцию reversed() с методом .reverse()!
Встроенная функция reversed() меняет порядок элементов списка на противоположный и позволяет нам обращаться к каждому элементу по отдельности.
Подписывайтесь на канал 👉@pythonofff
Важно! Не путайте функцию reversed() с методом .reverse()!
Встроенная функция reversed() меняет порядок элементов списка на противоположный и позволяет нам обращаться к каждому элементу по отдельности.
Подписывайтесь на канал 👉@pythonofff
👍5❤1
Хэширование
Для создания хэш-значений в python существует удобный модуль hashlib, реализующий общий интерфейс для ряда популярных хэш функций и также может использовать функции доступные в системе, предоставляемые с установленным OpenSSL.
Использование очень простое, в модуле существует ряд конструкторов, соответствующих названиям хэш-функций. В конструктор мы можем передать байт-строку, хэш которой мы хотим получить, на выходе мы получим объект хэша. Объект хэша мы можем обновить методом update, сконкатенировав тем самым строки, а также можем можем вывести полученное значение с помощью методов digest и hexdigest. Первый возвращает байт-строку, второй - в шестнадцатеричном формате.
Подписывайтесь на канал 👉@pythonofff
Для создания хэш-значений в python существует удобный модуль hashlib, реализующий общий интерфейс для ряда популярных хэш функций и также может использовать функции доступные в системе, предоставляемые с установленным OpenSSL.
Использование очень простое, в модуле существует ряд конструкторов, соответствующих названиям хэш-функций. В конструктор мы можем передать байт-строку, хэш которой мы хотим получить, на выходе мы получим объект хэша. Объект хэша мы можем обновить методом update, сконкатенировав тем самым строки, а также можем можем вывести полученное значение с помощью методов digest и hexdigest. Первый возвращает байт-строку, второй - в шестнадцатеричном формате.
Подписывайтесь на канал 👉@pythonofff
👍2😐2
Упрощение создания операторов сравнения
Декоратор functools.total_ordering используется здесь для упрощения процесса реализации упорядочения экземпляров класса. Для обеспечения его работы нужно лишь чтобы были объявлены операторы сравнения lt и eq. Это — тот минимум, который нужен декоратору для конструирования остальных операторов сравнения.
Подписывайтесь на канал 👉@pythonofff
Декоратор functools.total_ordering используется здесь для упрощения процесса реализации упорядочения экземпляров класса. Для обеспечения его работы нужно лишь чтобы были объявлены операторы сравнения lt и eq. Это — тот минимум, который нужен декоратору для конструирования остальных операторов сравнения.
Подписывайтесь на канал 👉@pythonofff
👍4
Нижнее подчеркивание
В Python имя переменной может состоять из одного подчеркивания. Хотя такое имя не достаточно описательно и не должно использоваться, есть по крайней мере три случая, когда _ имеет общепринятый смысл.
Первое, _ используется, когда вам нужно придумать имена для значений, которые вам не нужны — например, в циклах for.
Второе, интерактивный режим использует _ для хранения результата последнего выполненного выражения.
Третье, документация модуля gettext рекомендует псевдоним _() для функции gettext(), чтобы минимизировать загромождение вашего кода.
Подписывайтесь на канал 👉@pythonofff
В Python имя переменной может состоять из одного подчеркивания. Хотя такое имя не достаточно описательно и не должно использоваться, есть по крайней мере три случая, когда _ имеет общепринятый смысл.
Первое, _ используется, когда вам нужно придумать имена для значений, которые вам не нужны — например, в циклах for.
Второе, интерактивный режим использует _ для хранения результата последнего выполненного выражения.
Третье, документация модуля gettext рекомендует псевдоним _() для функции gettext(), чтобы минимизировать загромождение вашего кода.
Подписывайтесь на канал 👉@pythonofff
👍2
Операторы сравнения
Существует немало операторов сравнения. Например — lt, le, gt, ge. Мало кому понравится перспектива их реализации для некоего класса. Можно ли как-то упростить эту скучную задачу? Да, можно — с помощь декоратора functools.total_ordering
Подписывайтесь на канал 👉@pythonofff
Существует немало операторов сравнения. Например — lt, le, gt, ge. Мало кому понравится перспектива их реализации для некоего класса. Можно ли как-то упростить эту скучную задачу? Да, можно — с помощь декоратора functools.total_ordering
Подписывайтесь на канал 👉@pythonofff
👍2
Ключевое слово global
Изначально мы не можем изменять значение переменной в другой области видимости, но мы можем это сделать, переопределив область видимости на глобальную, с помощью ключевого слова global.
Мы даже можем определить новую глобальную переменную внутри функции, но не нужно этим злоупотреблять, т.к. это будет засорять глобальную область и приводить к нежелательным ошибкам
Подписывайтесь на канал 👉@pythonofff
Изначально мы не можем изменять значение переменной в другой области видимости, но мы можем это сделать, переопределив область видимости на глобальную, с помощью ключевого слова global.
Мы даже можем определить новую глобальную переменную внутри функции, но не нужно этим злоупотреблять, т.к. это будет засорять глобальную область и приводить к нежелательным ошибкам
Подписывайтесь на канал 👉@pythonofff
Имитация
В вышеприведённом примере экспортирована будет лишь функция bar. А если оставить атрибут all пустым, то из модуля не будет экспортироваться вообще ничего. При попытке импорта чего-либо из такого модуля будет выдана ошибка AttributeError.
Подписывайтесь на канал 👉@pythonofff
В вышеприведённом примере экспортирована будет лишь функция bar. А если оставить атрибут all пустым, то из модуля не будет экспортироваться вообще ничего. При попытке импорта чего-либо из такого модуля будет выдана ошибка AttributeError.
Подписывайтесь на канал 👉@pythonofff
👍2
Ключевое слово nonlocal
Похожее по функционалу на global, ключевое слово nonlocal позволяет обращаться к переменным из нелокальной области видимости.
Поведение nonlocal заключается в том, что интерпретатор ищет переменную в ближайшей области видимости.
Основное различие с global в том, что с помощью nonlocal нельзя получить переменные из глобальной области видимости.
Подписывайтесь на канал 👉@pythonofff
Похожее по функционалу на global, ключевое слово nonlocal позволяет обращаться к переменным из нелокальной области видимости.
Поведение nonlocal заключается в том, что интерпретатор ищет переменную в ближайшей области видимости.
Основное различие с global в том, что с помощью nonlocal нельзя получить переменные из глобальной области видимости.
Подписывайтесь на канал 👉@pythonofff
👍5❤2
Управление тем, что может быть импортировано из модуля, а что — нет
В некоторых языках имеются предельно чёткие механизмы экспорта из модулей переменных, методов, интерфейсов. Например — в Golang экспортируются лишь сущности, имена которых начинаются с большой буквы. В Python же экспортируется всё. Но лишь до тех пор, пока не используется атрибут all
Подписывайтесь на канал 👉@pythonofff
В некоторых языках имеются предельно чёткие механизмы экспорта из модулей переменных, методов, интерфейсов. Например — в Golang экспортируются лишь сущности, имена которых начинаются с большой буквы. В Python же экспортируется всё. Но лишь до тех пор, пока не используется атрибут all
Подписывайтесь на канал 👉@pythonofff
👍2
Создаем словарь из набора ключей
Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).
Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.
Подписывайтесь на канал 👉@pythonofff
Для создания словаря из известного набора ключей и одинаковых значений часто используют генераторы словарей (dict comprehensions).
Однако класс dict имеет удобный метод fromkeys, который был создан специально для таких случаев.
Подписывайтесь на канал 👉@pythonofff
👍2
Экономия памяти с помощью slots
Эта функция хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом slots
Подписывайтесь на канал 👉@pythonofff
Эта функция хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом slots
Подписывайтесь на канал 👉@pythonofff
👍3
Пакеты
Пакет — это, грубо говоря, папка с Python модулями. Помимо разделения проекта по частям, пакеты нужны для создания пространства имен, чтобы работать с модулями через точку, как в примере на картинке.
При импорте from package import * будут подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py.
Еще примечателен файл __init__.py, который раньше был обязателен для создания пакетов. Но с версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
Подписывайтесь на канал 👉@pythonofff
Пакет — это, грубо говоря, папка с Python модулями. Помимо разделения проекта по частям, пакеты нужны для создания пространства имен, чтобы работать с модулями через точку, как в примере на картинке.
При импорте from package import * будут подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py.
Еще примечателен файл __init__.py, который раньше был обязателен для создания пакетов. Но с версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.
Подписывайтесь на канал 👉@pythonofff
👍3
Функция slots
Если вы когда-нибудь писали программы, которые создают по-настоящему большие количества экземпляров некоего класса, то вы могли заметить, что таким программам неожиданно может понадобиться очень много памяти. Происходит это из-за того, что Python использует словари для представления атрибутов экземпляров классов.
Подписывайтесь на канал 👉@pythonofff
Если вы когда-нибудь писали программы, которые создают по-настоящему большие количества экземпляров некоего класса, то вы могли заметить, что таким программам неожиданно может понадобиться очень много памяти. Происходит это из-за того, что Python использует словари для представления атрибутов экземпляров классов.
Подписывайтесь на канал 👉@pythonofff
🔥3
Оператор объединения словарей
В Python есть много разных способов объединить несколько словарей. Мне, например, больше всего нравилась распаковка словарей в один новый.
Но в одном из последних обновлений добавили специальный оператор |, с помощью которого можно это делать ещё проще.
Подписывайтесь на канал 👉@pythonofff
В Python есть много разных способов объединить несколько словарей. Мне, например, больше всего нравилась распаковка словарей в один новый.
Но в одном из последних обновлений добавили специальный оператор |, с помощью которого можно это делать ещё проще.
Подписывайтесь на канал 👉@pythonofff
👍3
Итерация по Списку в Python С Помощью Метода Enumerate
Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Подписывайтесь на канал 👉@pythonofff
Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Подписывайтесь на канал 👉@pythonofff
👍1