{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Стандартная библиотека" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Стандартная библиотека Python представляет собой множество пакетов и модулей, доступных для использования любой программе на языке Python. Эта библиотека является такой же неотъемлемой частью языка Python, как и его интерпретатор, о чем свидетельствует тот факт, что она полностью описана в самом стандарте языка." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В этой лекции мы рассмотрим несколько важнейших модулей стандартной библиотеки, однако это будет лишь небольшая ее часть. Практически любую задачу на языке Python можно легко решить средствами, предоставляемыми стандартной библиотекой, поэтому когда вам понадобится какая-то функция (или класс), не спешите самостоятельно ее реализовывать - для начала лучше поищите аналог в документации [стандартной библиотеки](https://docs.python.org/3/library/index.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Стоит также отметить, что в сети можно найти огромное количество других библиотек, не включенных в состав стандартной, которые можно легко добавить к своей конфигурации Python и использовать в программах." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Содержание лекции" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* [Введение](#Введение)\n", "* [Модуль builtins](#Модуль-builtins)\n", "* [Модули math и random](#Модули-math-и-random)\n", "* [Модуль datetime](#Модуль-datetime)\n", "* [Модуль threading](#Модуль-threading)\n", "* [Задание](#Задание)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Введение" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Перед тем, как начать изучение стандратной библиотеки, хотелось бы рассказать о двух функциях, которые очень помогут в этом деле. С одной мы уже встречались - речь идет о функции `dir`, возвращающей все имена из указанного пространства имен (например, из модуля или класса). Вторая называется `help`, и используется для того, чтобы получить справочную информацию, связанную с некоторым именем." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вместе эти функции неплохо заменяют традиционную документацию: достаточно с помощью `dir` узнать, какие функции и классы есть в модуле, а затем с помощью `help` получить информацию о том, как их использовать. Пусть, например, нам нужна функция, которая вычисляет логарифм. Логично предположить, что она может быть в модуле `math` (подробнее о нем чуть ниже). Выяснить это можно с помощью функции `dir`:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']\n" ] } ], "source": [ "import math\n", "print(dir(math))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Судя по имени, функция, которая нам нужна - это `log`. Теперь осталось прочитать о том, как ее правильно использовать:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function log in module math:\n", "\n", "log(...)\n", " log(x[, base])\n", " \n", " Return the logarithm of x to the given base.\n", " If the base not specified, returns the natural logarithm (base e) of x.\n", "\n" ] } ], "source": [ "help(math.log)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В этой лекции при описании функций и методов мы используем следующее соглашение:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Все обязательные параметры функций и методов указываются всегда.\n", "2. Необязательные параметры выделяются курсивом и для них указывается значение по умолчанию.\n", "3. Некоторые необязательные параметры могут быть опущены, чтобы описание функции оставалось коротким. Об этом сигнализирует последовательность \"...\" в списке параметров. Для получения полной информации обращайтесь к справочному руководству или функции `help`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Модуль builtins" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Этот модуль предоставляет базовую функциональность всем программам на языке Python. Он отличается от всех остальных тем, что импортируется автоматически самим интерпретатором при старте программы, при этом все имена из него попадают во встроенное пространство имен, а значит к ним можно обращаться без указания имени модуля." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В следующей таблице собраны функции для различных преобразований значений одного типа к значениям другого:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|
\n", "with expression as variable:\n", " code_block\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Инструкция `with` используется для создания **менеджера контекста** - объекта, который реализует специальные методы `__enter__` и `__exit__`. Метод `__enter__` вызывается, когда менеджер контекста создается с помощью выражения *expression*, а метод `__exit__` - когда прекращается выполнение *code_block* (в том, числе, из-за возникшего исключения)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Объекты, возвращаемые функций `open`, являются менеджерами контекста, причем в своей реализации метода `__exit__` они закрывают файл, для которого были созданы. Это позволяет переписать предыдущую версию программы без блока `finally`:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Error occurred\n" ] } ], "source": [ "try:\n", " with open('test3.txt', 'w') as file:\n", " file.write('line1\\n')\n", " file.write('line2')\n", " some_processing()\n", "except:\n", " print('Error occurred')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Мы рекомендуем использовать такой подход для работы с файлами, потому что получающийся в результате код короче, чем дла подхода с блоком `finally`, и столь же безопасен." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Модули math и random" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Модуль `math` предоставляет различные математические функции и константы." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|