ЭВТЮМИЯ

Логические выражения и операторы

Основы Python | 06.01.2025
22 0

Логическими выражениями называют утверждения, которые могут быть оценены как истинные или ложные. Например, выражение «Идёт дождь» в зависимости от погоды будет истинным или ложным. Так и в Python результатом вычисления любого логического выражения всегда будет значение логического типа данных True или False.

Логические выражения в сочетании с ветвлением являются фундаментальным инструментом в программировании, позволяя выполнять различные действия в зависимости от того, выполняются ли определенные условия. С их помощью можно реализовать проверку пароля, фильтрацию данных или управление потоком выполнения программы.

Любой объект в Python обладает определенным логическим значением, которое можно получить с помощью встроенной функции bool() (от англ. boolean – булев (логический) тип данных).

Функция bool() возвращает True, если объект считается истинным, и False, если объект считается ложным.

К истинным значениям относятся любые непустые объекты и ненулевые числа:

print(bool("В саду распустились розы")) 
# Вывод: True
print(bool({"Имя": "Копатыч", "Место жительства": "Долина Смешариков"})) 
# Вывод: True
print(bool(256)) 
# Вывод: True

Индексация и срезы

Основы Python | 19.02.2025
22 0

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

По индексу можно получить отдельные элементы строк, списков и кортежей. Например, у нас есть следующие переменные:

message_str = "Как дела?"  # Строка
shopping_list = ["Еда 1", "Еда 2", "Еда 3", "Еда 4", "Еда 5"]  # Список
friends_tuple = ("Друг 1", "Друг 2", "Друг 3")  # Кортеж

Первый символ "К" строки "Как дела?" находится по индексу 0, второй символ "а" – по индексу 1, и так далее.

Перегрузка операторов контейнера

Основы Python | 17.07.2025
22 0

Возможности перегрузки операторов в Python не ограничиваются базовыми арифметическими операциями и сравнением объектов, так как существуют методы, позволяющие создать свою собственную коллекцию, то есть класс, представляющий собой контейнер элементов, как список или словарь. Объекты такого класса могут быть перебраны в цикле for, использовать оператор in и функцию len(), а также синтаксис обращения по индексу или ключу через квадратные скобки.

Методы __iter__() и __next__() лежат в основе механизма итерации в Python и позволяют перебирать объекты в цикле for или использовать их в других функциях, которые принимают итерируемый объект, например, sum() или zip(). Также эти методы можно явно вызывать с помощью функций iter() и next(), как мы уже делали для встроенных типов данных, когда рассматривали работу итерируемых объектов.

Метод __iter__() превращает объект в итератор. В простейшем случае, сам итерируемый объект часто выступает в роли своего итератора, поэтому __iter__() просто возвращает self.

Работа с JSON-файлами

Основы Python | 15.10.2025
22 0

Формат JSON (от англ. JavaScript Object Notation – нотация объектов JavaScript) – это текстовый формат, который чаще всего используется для обмена данными в современных информационных системах.

JSON был создан как способ представления структур данных в JavaScript, но быстро стал популярным благодаря своей простоте, читаемости и лёгкой интеграции практически с любым языком программирования.

JSON оперирует двумя основными структурами, которые напрямую соответствуют основным коллекциям Python: объектами и массивами.

Объекты (англ. objects) представляют собой неупорядоченный набор пар «ключ: значение» и соответствуют словарям в Python.

Операции над множествами

Основы Python | 30.03.2025
21 0

Множества в Python пришли из математики, где над ними можно совершать такие операции как объединение и пересечение, а также находить разность и симметричную разность.

Рассмотрим два множества: красные яблоки и зелёные груши. При этом оба множества содержат жёлтые яблоки и груши:

set1 = {"Красные яблоки", "Жёлтые яблоки", "Жёлтые груши"}
set2 = {"Зелёные груши", "Жёлтые груши", "Жёлтые яблоки"}

Объединение двух множеств – это новое множество, которое содержит все элементы обоих множеств. В математике объединение двух множеств A и B обозначается как A ∪ B.

Для того, чтобы наглядно представить множества и отношения между ними, используем круги Эйлера. Каждый круг представляет одно множество, а область внутри него – его элементы. Перекрывающиеся области между кругами показывают элементы, которые являются общими для этих множеств.

Области видимости переменных

Основы Python | 30.04.2025
21 0

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

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

Для определения, где Python ищет имя переменной или другого объекта, используется правило LEGB. Это аббревиатура определяет порядок поиска имен. Python ищет имя, начиная с самой внутренней (локальной) области и двигаясь наружу. Если имя найдено, поиск прекращается. Если оно не найдено ни в одной из областей, возникает исключение NameError.

Замыкание и декораторы

Основы Python | 30.05.2025
21 0

В Python всё является объектом, поэтому функции могут принимать, и возвращать другие функции, а также одна функция может содержать другую. Всё вместе это лежит в основе таких понятий, как замыкание и декораторы, позволяющие расширять возможности функций.

Вложенная функция всегда имеет доступ к переменным, определенным в её внешней функции. И этот доступ – не просто временная передача значений, а постоянная ссылка на ячейки памяти, где эти значения хранятся.

Ключевой момент, который превращает этот механизм в замыкание, происходит, когда внешняя функция завершает свою работу. В обычной ситуации, когда функция заканчивает выполняться, все её локальные переменные уничтожаются. Однако это не происходит, если выполняются следующие ключевые условия:

  • Внутренняя функция использует переменные внешней функции.
  • Внешняя функция возвращает внутреннюю функцию.

В таком случае Python понимает, что вложенная функция всё ещё нуждается в переменных из внешней области, и эти переменные «замыкаются» вместе с вложенной функцией. Они не являются копией, а представляют собой прямую связь с исходными данными.

Функции высшего порядка

Основы Python | 12.05.2025
20 0

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

И если функция делает хотя бы одно из двух:

  • принимает одну или несколько других функций в качестве аргументов;
  • возвращает функцию как результат своей работы.

То такая функция называется функцией высшего порядка.

Одной из таких функций является функция sorted(), с которой мы познакомились, когда говорили о сортировке списков. Ей можно передать функцию, которая будет применяться к каждому элементу итерируемого объекта перед сортировкой:

vegetables = ["Баклажан", "Щавель", "Тыква", "Сельдерей", "Спаржа"]
print(sorted(vegetables, key=len))  # Сортировка по длине строки
# Вывод: ['Тыква', 'Щавель', 'Спаржа', 'Баклажан', 'Сельдерей']

Поэтому функция sorted() является функцией высшего порядка. Кроме неё в Python представлены функции map() и filter().

Анонимные функции

Основы Python | 17.05.2025
20 0

Помимо обычных функций, которые мы создаём с помощью ключевого слова def, в Python существуют так называемые анонимные функции, которые не имеют имени и представляют собой небольшие однострочные функции. По-другому их называют лямбда-функциями (от англ. lambda functions) из-за их связи с лямбда-исчислением, разработанным американским логиком и математиком Алонзо Чёрчем в 1930-х годах.

В этой системе функция представляется в виде выражения, которое начинается с греческой буквы лямбда λ. Например, функция, которая удваивает число, в лямбда-исчислении записывается как λx * 2, где:

  • λ – указывает на начало определения функции;
  • x – аргумент функции;
  • 2 * x – тело функции.

Многие языки программирования, включая Python или JavaScript, заимствовали эту концепцию для создания небольших одноразовых функций.

Перегрузка арифметических операторов и операторов сравнения

Основы Python | 12.07.2025
20 0

Встроенные типы данных поддерживают множество стандартных операций. Например, числа поддерживают все арифметические операции, а строки мы можем складывать и умножать на число.

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

Например, давайте вспомним, что в математике есть такое понятие как вектор – направленный отрезок, соединяющий две точки. Тогда координатами вектора AB с началом в точке A с координатами (x1; y1) и концом в точке B с координатами (x2; y2) является разность соответствующих координат конца и начала, то есть (x2 - x1; y2 - y1). Поэтому при создании класса вектора Vector мы можем инициализировать его координатами x и y, представляющими собой его смещение относительно начала координат:

class Vector:
    def __init__(self, x: int | float, y: int | float):
        self.x = x
        self.y = y
        
    def __repr__(self) -> str:
        return f"Vector(x={self.x}, y={self.y})"