Язык Python в медицинских системах искусственного интеллекта. Ч.1. Введение в программирование на языке Python. Учебное пособие
.pdfdef wrapper(name): print("Начало функции.") func(name)
print("Конец функции.") return wrapper
@greet_decorator def greet(name):
print(f"Привет, {name}!")
greet("Анна")
#Вывод:
#Начало функции.
#Привет, Анна!
#Конец функции.
6.3Применение декораторов в практике
Декоратор для измерения времени выполнения функции: import time
def timing_decorator(func):
def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time()
print(f"Время выполнения функции
'{func.__name__}': {end_time - start_time:.4f} секунд.")
return result return wrapper
@timing_decorator
def compute_square(n):
41
return [i * i for i in range(n)]
compute_square(100000)
# Вывод:
#Время выполнения функции 'compute_square': 0.0123 секунд.
3.7.Практика
3.7.1.Теоретические вопросы
1.Что такое модуль в Python и как его использовать?
2.Объясните разницу между модулем и пакетом в Python.
3.Как работает функция open() и какие режимы открытия файлов существуют в Python?
4.Что такое исключение в Python и как используются блоки try, except, finally для их обработки?
5.Опишите понятия класса и объекта в объектно-ориентированном программировании на Python.
6.Что такое наследование в Python и как его использовать при создании классов?
7.Объясните концепцию инкапсуляции и как она реализуется в
Python.
8.Что такое генератор в Python и как работает ключевое слово yield?
9.Опишите, что такое декоратор в Python и для чего он используется.
10.Как создать и использовать собственные исключения в Python?
3.7.2.Модули и пакеты
1.Создайте собственный модуль my_math.py, содержащий функции для выполнения основных арифметических операций: сложение, вычитание, умножение и деление. Затем импортируйте этот модуль в основной файл и используйте его функции для выполнения расчетов.
2.Напишите программу, которая считывает текстовый файл sample.txt и выводит на экран количество строк, слов и символов в этом файле.
42
3.Создайте пакет geometry, который содержит модули circle.py и rectangle.py с функциями для вычисления площади и периметра круга и прямоугольника соответственно. Используйте эти функции в основном скрипте для расчета и вывода результатов.
4.Разработайте программу, которая запрашивает у пользователя список товаров и их цены, затем сохраняет эти данные в CSV-файл products.csv.
5.Создайте модуль utils.py с функцией is_prime(n), которая проверяет, является ли число простым. Импортируйте эту функцию в основной файл и используйте ее для вывода всех простых чисел в диапазоне от 1 до 100.
3.7.3.Работа с файлами
1.Напишитепрограмму,котораяоткрываетфайлdata.txtврежимезаписи и позволяет пользователю добавлять в него строки текста до тех пор, пока он не введет пустую строку. Затем программа должна закрыть файл и сообщить пользователю о завершении записи.
2.Создайте программу, которая читает данные из CSV-файла students.csv (содержит имя студента и его оценки по предметам) и вычисляет средний балл для каждого студента, выводя результаты на экран.
3.Разработайте скрипт, который считывает данные из JSON-файла config.json и выводит значения всех ключей и их соответствующих значений.
4.Напишите программу, которая копирует содержимое одного файла в другой. Пользователь должен ввести имена исходного и целевого файлов.
5.Создайте функцию read_numbers(filename), которая считывает числа из текстового файла и возвращает их список. Обработайте возможные исключения, связанные с отсутствием файла или некорректными данными.
3.7.4.Обработка исключений
1.Напишите программу, которая запрашивает у пользователя два числа и выполняет их деление. Обработайте исключение, возникающее при делении на ноль, и выведите соответствующее сообщение.
43
2.Создайте собственное исключение NegativeNumberError, которое генерируется, когда функция получает отрицательное число. Напишите функцию sqrt(n), которая вычисляет квадратный корень числа и вызывает это исключение при отрицательном аргументе.
3.Реализуйте программу, которая обрабатывает возможные исключения при преобразовании строки в число. Если преобразование невозможно, программа должна вывести сообщение об ошибке и запросить ввод снова.
4.Напишите функцию, которая открывает файл для чтения и обрабатывает исключения, возникающие при отсутствии файла или недостатке прав доступа.
5.Создайте программу, которая запрашивает у пользователя индекс элемента списка и выводит его значение. Обработайте исключение IndexError, если индекс выходит за пределы списка.
3.7.5.Объектно-ориентированное программирование
1.Создайте класс Person, имеющий атрибуты name и age. Добавьте методintroduce(),которыйвыводитсообщениевида“Привет,меня зовут [name], мне [age] лет”. Создайте объект этого класса и вызовите метод.
2.Разработайте класс Rectangle, имеющий методы для вычисления площади и периметра. Создайте несколько объектов этого класса с различными длинами и ширинами, затем выведите их площади и периметры.
3.Создайте класс Employee, наследующий от класса Person из предыдущего задания. Добавьте атрибут position и метод work(), который выводит сообщение о должности сотрудника.
4.Реализуйте класс BankAccount с инкапсулированным атрибутом __balance. Добавьте методы deposit(amount) для пополнения счета и withdraw(amount) для снятия средств с проверкой достаточности баланса.
5.Напишите программу, которая создает список объектов класса Student (имя, возраст, оценки) и сортирует их по среднему баллу.
6.Создайте класс Car с методами start(), stop() и атрибутом speed. Реализуйте несколько наследников этого класса с особенностями для разных типов автомобилей (например, ElectricCar, DieselCar).
7.Реализуйтеполиморфизмвметодеdraw()дляклассовCircle,Square
иTriangle, которые наследуются от общего класса Shape.
44
8.Создайте класс TemperatureConverter с методами для преобразования температуры между градусами Цельсия и Фаренгейта.
9.Реализуйте класс Singleton, который позволяет создавать только один экземпляр этого класса.
10.Напишите класс Logger, который с помощью декоратора записывает в файл все вызовы методов класса, включая имена методов и переданные аргументы.
3.7.6.Генераторы и итераторы
1.Создайте генератор fibonacci(n), который генерирует первые n чисел последовательности Фибоначчи. Используйте его для вывода этих чисел на экран.
2.Реализуйте итератор, который перебирает элементы списка в обратном порядке.
3.Напишите функцию-генератор prime_numbers(n), которая возвращает все простые числа до числа n.
4.Создайте генератор, который бесконечно возвращает случайные числа в заданном диапазоне. Используйте модуль random.
5.Реализуйте класс RangeIterator, который имитирует поведение встроенной функции range(), но позволяет итерироваться по дробным числам с заданным шагом.
3.7.7.Декораторы
1.Создайте декоратор timer, который измеряет время выполнения функции и выводит его на экран. Примените его к функции, выполняющей сортировку большого списка случайных чисел.
2.Реализуйте декоратор debug, который при вызове функции выводит ее имя, переданные аргументы и возвращаемое значение.
3.Напишите декоратор authenticate, который проверяет, имеет ли пользователь достаточные права для вызова функции. Предусмотрите механизм передачи уровня доступа пользователя.
4.Создайте декоратор retry, который при возникновении исключения повторяет вызов функции заданное число раз с заданным интервалом времени.
45
5. Разработайтедекораторcache, которыйкэшируетрезультаты вызовов функции для ускорения повторных вычислений. Примените его к рекурсивной функции вычисления чисел Фибоначчи.
Выполнение этих заданий поможет вам углубить понимание продвинутых концепций Python и развить навыки программирования. Рекомендуется решить как можно больше практических задач и проанализировать решения, чтобы лучше усвоить материал раздела.
46
4. РАБОТА С БИБЛИОТЕКАМИ В PYTHON
Библиотеки в Python играют ключевую роль в разработке приложений и решении различных задач. Они предоставляют готовые решения для множества задач, что позволяет разработчикам сосредоточиться на логике приложения, а не на реализации базовых функций.
Загрузка библиотек осуществляется через стандартный инструмент для установки и управления библиотеками в Python — pip. Он позволяет легко загружать и устанавливать пакеты из Python Package Index (PyPI). Чтобы установить pip, если он ещё не установлен, необходимо открыть командную строку и выполнить следующую команду:
python -m ensurepip --upgrade
После данной установки pip, становится возможным использовать его для установки библиотек. Так как pip загружает пакеты из интернета, надо проверять устойчивость соединения.
Основные команды для работы с библиотеками
В зависимости от среды, в котором пишется код, варьируется правило написания pip-команд. Например, в Google Colab может потребоваться поставить “!” перед pip, или в VS Code – “%”.
● установка библиотеки
pip install <название_библиотеки>
●обновление библиотеки до последней версии pip install --upgrade <название_библиотеки>
●удаление библиотеки
pip uninstall <название_библиотеки>
Чтобы посмотреть список уже установленных библиотек и их версий, существует команда pip list.
Если пользователь не следит за новостями об обновлении библиотек, можно выполнить проверку pip list --outdated, которая выведет список библиотек, для которых доступны новые версии.
Также существует возможность установить все библиотеки из файла, например, libs.txt, в которомони прописаны. Для этого пишется команда с указанием названия этого файла.
47
pip install -r libs.txt
pip также позволяет устанавливать конкретные версии библиотек. Это может быть полезно, если проект требует определенной версии библиотеки. Например, чтобы установить версию 2.25.1 библиотеки requests, выполните:
pip install requests==2.25.1
Возможнаустановканескольких библиотекодновременно. Для этого их перечисляют через пробел:
pip install requests numpy pandas
Способы импортирования библиотек в проект
В Python реализована гибкая система использования установленных библиотек. Классически импорт выглядит следующим образом:
import numpy
Однако, numpy – это довольно безобидное имя и сильных страданий не принесёт, если далее в проекте надо будет при обращении к библиотеке писать
numpy.command numpy.array() и т.д.
Библиотек так много под каждые виды задач, а называть их стараются по цели назначения, например, Matplotlib или pydantic-settings. Такие названия уже не столько трудно писать, сколько неудобно для чтения и понимания кода. Поэтому, традиционно импорт библиотек записывают следующим образом – переименовывают:
import numpy as np import Matplotlib as mpl import pydantic-settings as ps
Не у всех библиотек есть общепринятые сокращённые имена, но и чем-то посторонним лучше не называть, так как зачастую с кодом работает не один человек, поэтому важно, чтобы всем просматривающим было ясно, название какой библиотеки используется.
При таком импорте к любым командам из модуля придётся дописывать новое сокращённое название модуля
48
np.command
mpl.command
ps.command
Есть и другой вариант, в котором можно использовать только команду без указания модуля. Но так как в разных модулях могут быть одинаковые функции, использовать такой вариант не рекомендуется.
from numpy import *
Бывают случаи, когда в проекте нам не нужен весь потенциал библиотеки, а, например, лишь 1-3 её функции. В таком случае можно напрямую импортировать конкретные функции и дальше в коде использовать их без привязки к имени библиотеки:
from numpy import sqrt sqrt(4)
Заметьте, если бы мы написали просто import numpy (или import numpy as np и т.п.), то вызов команды sqrt(4) выглядел бы иначе –
numpy.sqrt(4) (или np.sqrt(4)).
4.1. os
Модуль os предоставляет множество функций для работы с операционной системой, причём их поведение, как правило, не зависит от ОС, поэтому программы остаются переносимыми.
Чтобы узнать имя текущей ОС, достаточно воспользоваться методом name. В зависимости от установленной платформы, он вернет ее короткое наименование в строковом представлении.
import os print(os.name)
Получить сведения, которые касаются конфигурации компьютера, можно при помощи метода environ.
print(os.environ)
49
Вызвав его через обращение к библиотеке os, пользователь получает большой словарь с переменными окружения, который выводится в консоль или строковую переменную. Таким образом, можно узнать название системного диска, адрес домашней директории, имя системы и массу другой информации.
Переменнаяos.environ фиксируетсяприпервомимпортемодуля os, во время запуска Python. Изменения в среде OS, сделанные после этого времени, не отражаются os.environ, за исключением изменений, внесенных путем непосредственного изменения os.environ.
При помощи функции getenv можно получить доступ к различным переменным среды. Чтобы сделать это, достаточно передать в качестве аргумента необходимое название переменной, как в следующем примере, где print выводит на экран сведения о TMP на дисплей в консоль.
print(os.getenv("TMP"))
Вывод: C:\Users\admin\AppData\Local\Temp
Работа с файлами и директориями
Библиотека os – инструмент для работы с операционной системой, предоставляющая разработчикам доступ к функциям, которые позволяют взаимодействовать с файловой системой и выполнять системные операции.Основноепреимуществоиспользованияos заключаетсяв том, что она абстрагирует различия между операционными системами, предоставляя универсальный интерфейс, который делает программы на Python переносимыми и гибкими. Это особенно важно при разработке кроссплатформенных приложений, где требуется учитывать различия в структуре путей, доступе к файлам и обработке системных команд.
OS позволяет получать доступ к системным переменным окружения, таким как пути к программам или настройки среды, что важно для настройки и конфигурации приложений. Возможность определять и изменять переменные окружения предоставляет разработчику дополнительные возможности для управления поведением приложений без изменения исходного кода.
Библиотека также обеспечивает взаимодействие с процессами операционной системы. С её помощью можно запускать внешние команды,
50
