From 2756a9b834162bb52e5147394e36e84474f03e30 Mon Sep 17 00:00:00 2001 From: Sergey Lemeshevsky Date: Mon, 2 Mar 2020 12:29:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=D0=B0=D0=BC=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arithmetic.ipynb | 926 ---------------- collections.ipynb | 1907 ++++++++++++++++++++++++++++++++ datatype.ipynb | 881 ++++++++++++++- fig-collections/map_1.png | Bin 0 -> 47206 bytes fig-collections/seq_1.png | Bin 0 -> 14261 bytes fig-collections/seq_2.png | Bin 0 -> 14399 bytes fig-collections/set_1.png | Bin 0 -> 57410 bytes fig-collections/set_2.png | Bin 0 -> 158397 bytes fig-datatype/example_1.png | Bin 0 -> 11461 bytes intro.ipynb | 29 +- src-datatype/csv2html.py | 80 ++ src-datatype/csv2html.py~ | 80 ++ src-datatype/print_unicode.py | 33 + src-datatype/print_unicode.py~ | 30 + src-datatype/quadratic.py | 3 +- src-datatype/quadratic.py~ | 49 + src-datatype/sample.csv | 5 + src-datatype/sample.csv~ | 5 + src-datatype/sample.html | 42 + src-datatype/sample.html~ | 42 + 20 files changed, 3162 insertions(+), 950 deletions(-) delete mode 100644 arithmetic.ipynb create mode 100644 collections.ipynb create mode 100644 fig-collections/map_1.png create mode 100644 fig-collections/seq_1.png create mode 100644 fig-collections/seq_2.png create mode 100644 fig-collections/set_1.png create mode 100644 fig-collections/set_2.png create mode 100644 fig-datatype/example_1.png create mode 100644 src-datatype/csv2html.py create mode 100644 src-datatype/csv2html.py~ create mode 100644 src-datatype/print_unicode.py create mode 100644 src-datatype/print_unicode.py~ create mode 100644 src-datatype/quadratic.py~ create mode 100644 src-datatype/sample.csv create mode 100644 src-datatype/sample.csv~ create mode 100644 src-datatype/sample.html create mode 100644 src-datatype/sample.html~ diff --git a/arithmetic.ipynb b/arithmetic.ipynb deleted file mode 100644 index ba393c2..0000000 --- a/arithmetic.ipynb +++ /dev/null @@ -1,926 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "# Арифметические операции\n", - "\n", - " \n", - "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", - "\n", - "\n", - "Язык Python , благодаря наличию огромного количества библиотек для решения\n", - "разного рода вычислительных задач, является конкурентом таким пакетам как Matlab и\n", - "Octave. Запущенный в интерактивном режиме, он, фактически, превращается в\n", - "мощный калькулятор. В этой главе речь пойдет об арифметических операциях,\n", - "доступных в данном языке.\n", - "\n", - "Как было сказано в предыдущей главе, посвященной типам и модели данных\n", - "Python, в этом языке существует три встроенных числовых типа данных:\n", - "* целые числа (`int`);\n", - "\n", - "* вещественные числа (`float`);\n", - "\n", - "* комплексные числа (`complex`).\n", - "\n", - "Если в качестве операндов некоторого арифметического выражения используются\n", - "только целые числа, то результат тоже будет целое число. Исключением является\n", - "операция деления, результатом которой является вещественное число.\n", - "При совместном использовании целочисленных и вещественных переменных, результат\n", - "будет вещественным.\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "# Арифметические операции с целыми и вещественными числами\n", - "
\n", - "\n", - "Все эксперименты будем проводить в Python, запущенном в интерактивном\n", - "режиме.\n", - "\n", - "\n", - "**Сложение.** Складывать можно непосредственно сами числа ..." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "3 + 2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "либо переменные, но они должны предварительно быть проинициализированы." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 3\n", - "b = 2\n", - "a + b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Результат операции сложения можно присвоить другой переменной..." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 3\n", - "b = 2\n", - "c = a + b\n", - "print (c)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "либо ей же самой, в таком случае можно использовать полную или сокращенную\n", - "запись, полная выглядит так:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 3\n", - "b = 2\n", - "a = a + b\n", - "print (a)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "сокращенная так:" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 3\n", - "b = 2\n", - "a += b\n", - "print (a)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Все перечисленные выше варианты использования операции сложения могут быть\n", - "применены для всех нижеследующих операций.\n", - "\n", - "**Вычитание.**" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "4 - 2" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 5\n", - "b = 7\n", - "a - b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Деление.**" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "9 / 3" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 7\n", - "b = 4\n", - "a / b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Получение целой части от деления.**" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "9 // 3" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 7\n", - "b = 4\n", - "a // b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Получение дробной части от деления.**" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "9 % 5" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 7\n", - "b = 4\n", - "a % b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Возведение в степень.**" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "5**4" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "a = 4\n", - "b = 3\n", - "a**b" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "\n", - "\n", - "# Работа с комплексными числами\n", - "
\n", - "\n", - "Для создания комплексного числа можно использовать функцию `complex(a, b)`, в\n", - "которую, в качестве первого аргумента, передается действительная часть, в качестве\n", - "второго – мнимая. Либо записать число в виде `a+bj`.\n", - "\n", - "Рассмотрим несколько примеров.\n", - "\n", - "Создание комплексного числа." - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "z = 1+2j\n", - "print(z)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x = complex(3, 2)\n", - "print(x)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Комплексные числа можно складывать, вычитать, умножать, делить и возводить в\n", - "степень." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x+z" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x-z" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x*z" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x/z" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x**z" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x**3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "У комплексного числа можно извлечь действительную и мнимую части." - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x = 3+2j\n", - "x.real" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x.imag" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Для получения комплексносопряженного число необходимо использовать метод\n", - "`conjugate()`." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "x.conjugate()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "\n", - "\n", - "# Битовые операции\n", - "
\n", - "\n", - "В Python доступны битовые операции, их можно производить над целыми числами.\n", - "\n", - "**Побитовое И (AND).**" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "p = 9\n", - "q = 3\n", - "p & q" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Побитовое ИЛИ (OR).**" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "p | q" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Побитовое Исключающее ИЛИ (XOR).**" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "p^q" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Инверсия.**" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "~p" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Сдвиг вправо и влево.**" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "p<<1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "\n", - "\n", - "# Представление чисел в других системах счисления\n", - "
\n", - "\n", - "В своей повседневной жизни мы используем десятичную систему исчисления, но\n", - "при программирования, очень часто, приходится работать с шестнадцатеричной,\n", - "двоичной и восьмеричной.\n", - "\n", - "**Представление числа в шестнадцатеричной системе.**" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "m = 124504\n", - "hex(m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Представление числа в восьмеричной системе.**" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "oct(m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Представление числа в двоичной системе.**" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "bin(m)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "\n", - "\n", - "\n", - "# Библиотека (модуль) `math`\n", - "
\n", - "\n", - "В стандартную поставку Python входит библиотека math , в которой содержится\n", - "большое количество часто используемых математических функций.\n", - "\n", - "Для работы с данным модулем его предварительно нужно импортировать." - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import math" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Рассмотрим наиболее часто используемые функции.\n", - "\n", - "**Функция `math.ceil(x)`.**\n", - "\n", - "Возвращает ближайшее целое число большее, чем `x`." - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.ceil(3.2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.fabs(x)`.**\n", - "\n", - "Возвращает абсолютное значение числа." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.fabs(-7)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.factorial(x)`.**\n", - "\n", - "Вычисляет факториал `x`." - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.factorial(5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "** Функция `math.floor(x)`.**\n", - "\n", - "Возвращает ближайшее целое число меньшее, чем `x`." - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.floor(3.2)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.exp(x)`.**\n", - "Вычисляет `e**x`." - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.exp(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.log2(x)`.**\n", - "Логарифм по основанию `2`." - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.log2(8)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.log10(x)`.**\n", - "\n", - "Логарифм по основанию 10." - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.log10(1000)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.log(x[, base])`.**\n", - "\n", - "По умолчанию вычисляет логарифм по основанию `e`, дополнительно можно указать\n", - "основание логарифма." - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.log(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.log()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.pow(x, y)`.**\n", - "\n", - "Вычисляет значение `x` в степени `y`." - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.pow(3 , 4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Функция `math.sqrt(x)`.**\n", - "\n", - "Корень квадратный от `x`." - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "math.sqrt(25)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Тригонометрические функции, их мы оставим без примера.**\n", - "\n", - "* `math.cos(x)`\n", - "\n", - "* `math.sin(x)`\n", - "\n", - "* `math.tan(x)`\n", - "\n", - "* `math.acos(x)`\n", - "\n", - "* `math.asin(x)`\n", - "\n", - "* `math.atan(x)`\n", - "\n", - "И напоследок пару констант.\n", - "* `math.pi` — число $\\pi$.\n", - "\n", - "* `math.e` — число $e$.\n", - "\n", - "Помимо перечисленных, модуль `math` содержит ещё много различных\n", - "функций, за более подробной информацией можете обратиться eна\n", - "официальный сайт ().\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "" - ] - } - ], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/collections.ipynb b/collections.ipynb new file mode 100644 index 0000000..3cd433e --- /dev/null +++ b/collections.ipynb @@ -0,0 +1,1907 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Тыпы коллекций\n", + "\n", + " \n", + "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", + "\n", + "Date: **Mar 2, 2020**\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Рассматриваются кортежи и списки, а также новые типы коллекций, включая словари и множества.\n", + "\n", + "# Последовательности\n", + "
\n", + "\n", + "Последовательности – это один из типов данных, поддерживающих\n", + "оператор проверки на вхождение (`in`), функцию определения размера\n", + "(`len()`), оператор извлечения срезов (`[]`) и возможность выполнения\n", + "итераций. В языке Python имеется пять встроенных типов\n", + "последовательностей: `bytearray`, `bytes`, `list`, `str` и\n", + "`tuple`. Ряд дополнительных типов последовательностей реализован в\n", + "стандартной библиотеке; наиболее примечательным \n", + "из них является тип `collections.namedtuple`. При выполнении итераций\n", + "все эти последовательности гарантируют строго определенный порядок\n", + "следования элементов.\n", + "\n", + "Строки мы уже рассматривали выше, а в этом разделе познакомимся с\n", + "кортежами, именованными кортежами и списками.\n", + "\n", + "## Кортежи\n", + "
\n", + "\n", + "Кортеж – это упорядоченная последовательность из нуля или более ссылок\n", + "на объекты. Кортежи поддерживают тот же синтаксис получения срезов,\n", + "что и строки. Это упрощает извлечение элементов из кортежа. Подобно\n", + "строкам, кортежи относятся к категории неизменяемых объектов, поэтому\n", + "мы не можем замещать или удалять какие-либо их элементы. Если нам\n", + "необходимо иметь возможность изменять упорядоченную\n", + "последовательность, то вместо кортежей можно просто использовать\n", + "списки или, если в программе уже используется кортеж, который\n", + "нежелательно модифицировать, можно преобразовать кортеж в список с\n", + "помощью функции преобразования `list()` и затем изменять полученный\n", + "список.\n", + "\n", + "Тип данных `tuple` может вызываться как функция `tuple()` – без\n", + "аргументов она возвращает пустой кортеж, с аргументом типа tuple\n", + "возвращает поверхностную копию аргумента; в случае, если аргумент\n", + "имеет другой тип, выполняется попытка преобразовать его в объект\n", + "типа `tuple`. Эта функция принимает не более одного аргумента. Кроме\n", + "того, кортежи могут создаваться без использования функции\n", + "`tuple()`. Пустой кортеж создается с помощью пары пустых круглых\n", + "скобок `()`, а кортеж, состоящий из одного или более элементов, может быть\n", + "создан с помощью запятых. Иногда кортежи приходится заключать в\n", + "круглые скобки, чтобы избежать синтаксической\n", + "неоднозначности. Например, чтобы передать кортеж `1, 2, 3` в функцию,\n", + "необходимо использовать такую форму записи: `function((1, 2, 3))`.\n", + "\n", + "\n", + "\n", + "
\n", + "![Позиции элементов в кортеже](fig-collections/seq_1.png)\n", + "\n", + "\n", + "На рис. [collections:seq:fig:1](#collections:seq:fig:1) показан кортеж\n", + "`t = \"venus\", – 28, \"green\", \"21\", 19.74` и индексы элементов внутри кортежа. Строки\n", + "индексируются точно так же, но, если в строках каждой позиции\n", + "соответствует единственный символ, то в кортежах каждой позиции\n", + "соответствует единственная ссылка на объект.\n", + "\n", + "Кортежи предоставляют всего два метода: `t.count(x)`, который\n", + "возвращает количество объектов `x` в кортеже `t`, и `t.index(x)`,\n", + "который возвращает индекс самого первого (слева) вхождения объекта `x`\n", + "в кортеж `t` или возбуждает исключение `ValueError`, если объект `x`\n", + "отсутствует в кортеже. (Эти методы имеются также и у списков.)\n", + "\n", + "Кроме того, кортежи могут использоваться с оператором `+`\n", + "(конкатенации), `*` (дублирования) и `[]` (получения среза), а\n", + "операторы `in` и `not in` могут применяться для проверки на\n", + "вхождение. Можно использовать также комбинированные операторы\n", + "присваивания `+=` и `*=`. Несмотря на то, что кортежи являются\n", + "неизменяемыми объектами, при выполнении этих операторов интерпретатор\n", + "Python создает за кулисами новый кортеж с результатом операции и\n", + "присваивает ссылку на него объекту, расположенному слева от оператора,\n", + "то есть используется тот же самый прием, что и со строками. Кортежи\n", + "могут сравниваться с помощью стандартных операторов сравнения (`<`,\n", + "`<=`, `==`, `!=`, `>=`, `>`), при этом сравнивание производится\n", + "поэлементно (и рекурсивно, при наличии вложенных элементов, таких как\n", + "кортежи в кортежах).\n", + "\n", + "Рассмотрим несколько примеров получения срезов, начав с извлечения\n", + "единственного элемента и группы элементов:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hair = \"black\", \"brown\", \"blonde\", \"red\"" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hair[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hair[-3:] # то же, что и hair[1:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта операция выполняется точно так же, как и в случае со строками,\n", + "списками или любыми другими последовательностями." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hair[:2], \"gray\", hair[2:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь мы попытались создать новый кортеж из 5 элементов, но в\n", + "результате получили кортеж с тремя элементами, содержащий два\n", + "двухэлементных кортежа. Это произошло потому, что мы применили\n", + "оператор запятой к трем элементам (кортеж, строка и кортеж). Чтобы\n", + "получить единый кортеж со всеми этими элементами, необходимо выполнить\n", + "конкатенацию кортежей:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "hair[:2] + (\"gray\",) + hair[2:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Чтобы создать кортеж из одного элемента, необходимо поставить запятую,\n", + "но если запятую просто добавить, будет получено исключение `TypeError`\n", + "(так как интерпретатор будет думать, что выполняется конкатенация\n", + "строки и кортежа), поэтому необходимо использовать запятую и круглые\n", + "скобки.\n", + "\n", + "Коллекции допускают возможность вложения с любой глубиной\n", + "вложенности. Оператор извлечения срезов `[]` может применяться для\n", + "доступа к вложенным коллекциям столько раз, сколько это будет\n", + "необходимо. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "things = (1, -7.5, (\"pea\", (5, \"Xyz\"), \"queue\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "things[2][1][1][2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Кортежи могут хранить элементы любых типов, включая другие коллекции,\n", + "такие как кортежи и списки, так как на самом деле кортежи хранят\n", + "ссылки на объекты. Использование сложных, вложенных структур данных,\n", + "таких, как показано ниже, легко может создавать путаницу. Одно из\n", + "решений этой проблемы состоит в том, чтобы давать значениям индексов\n", + "осмысленные имена. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "MANUFACTURER, MODEL, SEATING = (0, 1, 2)\n", + "MINIMUM, MAXIMUM = (0, 1)\n", + "aircraft = (\"Airbus\", \"A320-200\", (100, 220))\n", + "aircraft[SEATING][MAXIMUM]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В первых двух строках вышеприведенного фрагмента мы выполнили\n", + "присваивание кортежам. Когда справа от оператора присваивания\n", + "указывается последовательность (в данном случае – это кортежи),\n", + "а слева указан кортеж, мы говорим, что последовательность справа\n", + "*распаковывается*. Операция распаковывания последовательностей\n", + "может использоваться для организации обмена значений между\n", + "переменными, например:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a, b = (b, a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Именованные кортежы\n", + "
\n", + "\n", + "Именованные кортежи ведут себя точно так же, как и обычные кортежи, и\n", + "не уступают им в производительности. Отличаются они возможностью\n", + "ссылаться на элементы кортежа не только по числовому индексу, но и по\n", + "имени, что в свою очередь позволяет создавать сложные агрегаты из\n", + "элементов данных.\n", + "\n", + "В модуле `collections` имеется функция `namedtuple()`. Эта функция\n", + "используется для создания собственных типов кортежей. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import collections\n", + "Sale = collections.namedtuple(\"Sale\", \"productid customerid date quantity price\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Первый аргумент функции `collections.namedtuple()` – это имя\n", + "создаваемого кортежа. Второй аргумент – это строка имен, разделенных\n", + "пробелами, для каждого элемента, который будет присутствовать в этом\n", + "кортеже. Первый аргумент и имена во втором аргументе должны быть\n", + "допустимыми идентификаторами языка Python. Функция возвращает класс\n", + "(тип данных), который может использоваться для создания именованных\n", + "кортежей. Так, в примере выше мы можем интерпретировать имя `Sale` как\n", + "имя любого другого класса (такого как `tuple`) в языке Python и\n", + "создавать объекты типа `Sale`. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "sales = []\n", + "sales.append(Sale(432, 921, \"2008-09-14\", 3, 7.99))\n", + "sales.append(Sale(419, 874, \"2008-09-15\", 1, 18.49))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В этом примере мы создали список из двух элементов типа `Sale`, то\n", + "есть из двух именованных кортежей. Мы можем обращаться к элементам\n", + "таких кортежей по их индексам – например, обратиться к элементу\n", + "`price` в первом элементе списка `sales` можно с помощью выражения\n", + "`sales[0][-1]` (вернет значение `7.99`) – или по именам, которые\n", + "делают программный код более удобочитаемым:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "total = 0\n", + "for sale in sales:\n", + " total += sale.quantity*sale.price\n", + "print(\"Total {0:.2f}\".format(total))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Очень часто простоту и удобство, которые предоставляют именованные\n", + "кортежи, можно обратить на пользу делу. Например, ниже приводится\n", + "версия примера `aircraft` из предыдущего подраздела, имеющая более\n", + "аккуратный вид:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "Aircraft = collections.namedtuple(\"Aircraft\", \"manufacturer model seating\")\n", + "Seating = collections.namedtuple(\"Seating\", \"minimum maximum\")\n", + "aircraft = Aircraft(\"Airbus\", \"A320-200\", Seating(100, 220))\n", + "aircraft.seating.maximum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Списки\n", + "
\n", + "\n", + "Список – это упорядоченная последовательность из нуля\n", + "или более ссылок на объекты. Списки поддерживают тот\n", + "же синтаксис получения срезов, что и строки с кортежами. Это упрощает\n", + "извлечение элементов из списка. В отличие от строк и кортежей списки\n", + "относятся к категории изменяемых объектов, поэтому мы можем замещать\n", + "или удалять любые их элементы. Кроме того, существует возможность\n", + "вставлять, замещать и удалять целые срезы списков.\n", + "\n", + "Тип данных `list` может вызываться как функция `list()` –\n", + "без аргументов она возвращает пустой список, с аргументом типа `list`\n", + "возвращает поверхностную копию аргумента; в случае, если аргумент\n", + "имеет другой тип, выполняется попытка преобразовать его в объект типа\n", + "`list`. Эта функция принимает не более одного аргумента. Кроме того,\n", + "списки могут создаваться без использования функции `list()`. Пустой\n", + "список создается с помощью пары пустых квадратных скобок `[]`, а список,\n", + "состоящий из одного или более элементов, может быть создан с помощью\n", + "последовательности элементов, разделенных запятыми, заключенной в\n", + "квадратные скобки. Другой способ создания списков заключается в\n", + "использовании генераторов списков – эта тема будет рассматриваться\n", + "ниже в этом подразделе.\n", + "\n", + "Поскольку все элементы списка в действительности являются ссылками на\n", + "объекты, списки, как и кортежи, могут хранить элементы любых типов\n", + "данных, включая коллекции, такие как списки и кортежи. Списки могут\n", + "сравниваться с помощью стандартных операторов сравнения (`<`, `<=`,\n", + "`==`, `!=`, `>=`, `>`), при этом сравнивание производится поэлементно\n", + "(и рекурсивно, при наличии вложенных элементов, таких как списки или\n", + "кортежи в списках).\n", + "\n", + "В результате выполнения операции присваивания\n", + "`L = [ – 17.5, \"kilo\", 49, \"V\", [\"ram\", 5, \"echo\"], 7]` мы получим\n", + "список, как показано на рис. [collections:seq:fig:2](#collections:seq:fig:2)\n", + "\n", + "\n", + "\n", + "
\n", + "![Позиции элементов в списке](fig-collections/seq_2.png)\n", + "\n", + "\n", + "К спискам, таким как `L`, мы можем применять оператор извлечения\n", + "среза, повторяя его столько раз, сколько потребуется для доступа к\n", + "элементам в списке, как показано ниже:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "L[0] == L[-6] == -17.5\n", + "L[1] == L[-5] == 'kilo'\n", + "L[1][0] == L[-5][0] == 'k'\n", + "L[4][2] == L[4][-1] == L[-2][2] == L[-2][-1] == 'echo'\n", + "L[4][2][1] == L[4][2][-3] == L[-2][-1][1] == L[-2][-1][-3] == 'c'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Списки, как и кортежи, могут вкладываться друг в друга; допускают\n", + "выполнение итераций по их элементам и извлечение срезов. Все примеры с\n", + "кортежами, которые приводились в предыдущем подразделе, будут работать\n", + "точно так же, если вместо кортежей в них будут использованы\n", + "списки. Списки поддерживают операторы проверки на вхождение `in` и\n", + "`not in`, оператор конкатенации `+`, оператор расширения `+=` (то есть\n", + "добавляет операнд справа в конец списка) и операторы дублирования `*`\n", + "и `*=`. Списки могут также использоваться в качестве аргументов\n", + "функции `len()`.\n", + "\n", + "Кроме того, списки предоставляют методы, перечисленные в\n", + "табл. [collections:seq:tbl:1](#collections:seq:tbl:1) \n", + "\n", + "\n", + "## Таблица 1 : Методы списков
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Синтаксис Описание
L.append(x) Добавляет элемент x в конец списка L
L.count(x) Возвращает число вхождений элемента x в список L
L.extend(m) или L += m Добавляет в конец списка L все элементы итерируемого объекта m
L.index(x, start, end) Возвращает индекс самого первого (слева) вхождения элемента x в список L (или в срез start:end списка L); в противном случае возбуждает исключение ValueError
L.insert(i, x) Вставляет элемент x в список L в позицию int i
L.pop() Удаляет самый последний элемент из списка L и возвращает его в качестве результата
L.pop(i) Удаляет из списка L элемент с индексом int i и возвращает его в качестве результата
L.remove(x) Удаляет самый первый (слева) найденный элемент x из списка L или возбуждает исключение ValueError, если элемент xне будет найден
L.reverse() Переставляет в памяти элементы списка в обратном порядке
L.sort() Сортирует список в памяти. Этот метод принимает те же необязательные аргументы key и reverse что и встроенная функция sorted()`
\n", + "\n", + "\n", + "Несмотря на то, что для доступа к элементам списка можно использовать\n", + "оператор извлечения среза, тем не менее в некоторых ситуациях бывает\n", + "необходимо одновременно извлечь две или более частей списка. \n", + "Сделать это можно с помощью операции распаковывания\n", + "последовательности. Любой итерируемый объект (списки, кортежи и\n", + "другие) может быть распакован с помощью оператора распаковывания\n", + "«звездочка» (`*`). Когда слева от оператора присваивания указывается\n", + "две или более переменных, одна из которых предваряется символом `*`,\n", + "каждой переменной присваивается по одному элементу списка, а\n", + "переменной со звездочкой присваивается оставшаяся часть списка. Ниже\n", + "приводится несколько примеров выполнения распаковывания списков:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "first, *rest = [9, 2, -4, 8, 7]\n", + "first, rest" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "first, *mid, last = \"Charles Philip Arthur George Windsor\".split()\n", + "first, mid, last" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "*directories, executable = \"/usr/local/bin/gvim\".split(\"/\")\n", + "directories, executable" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Когда используется оператор распаковывания последовательности,\n", + "как в данном примере, выражение `*rest` и подобные ему называются\n", + "*выражениями со звездочкой*.\n", + "\n", + "В языке Python имеется также похожее понятие *аргументов со звездочкой*.\n", + "Например, допустим, что имеется следующая функция, принимающая три\n", + "аргумента:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def product(a, b, c):\n", + " return a * b * c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "тогда мы можем вызывать эту функцию с тремя аргументами или\n", + "использовать аргументы со звездочкой:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "product(2, 3, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "L = [2, 3, 5]\n", + "product(*L)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "product(2, *L[1:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В первом примере функция вызывается, как обычно, с тремя\n", + "аргументами. Во втором вызове использован аргумент со звездочкой; в\n", + "этом случае список из трех элементов распаковывается оператором `*`,\n", + "так что функция получает столько аргументов, сколько ей\n", + "требуется. Того же эффекта можно было бы добиться при использовании\n", + "кортежа с тремя элементами. В третьем вызове функции первый аргумент\n", + "передается традиционным способом, а другие два – посредством\n", + "применения операции распаковывания двухэлементного среза списка `L`. \n", + "\n", + "Имеется возможность выполнять итерации по элементам списка с помощью\n", + "конструкции `for item in L:`. Если в цикле потребуется изменять\n", + "элементы списка, то можно использовать следующий прием:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for i in range(len(L)):\n", + " L[i] = process(L[i])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> **Замечание.**\n", + ">\n", + "> Встроенная функция `range()` возвращает целочисленный\n", + "> итератор. С одним целочисленным аргументом, `n`, итератор `range()`\n", + "> возвращает последовательность чисел $0$, $1$, ..., $n-1$.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Этот прием можно использовать для увеличения всех элементов в списке\n", + "целых чисел. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for i in range(len(numbers)):\n", + " numbers[i] += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Генераторы списков\n", + "\n", + "
\n", + "\n", + "Небольшие списки часто создаются как литералы, но длинные списки\n", + "обычно создаются программным способом. Списки целых чисел могут\n", + "создаваться с помощью выражения `list(range(n))`; когда необходим\n", + "итератор целых чисел, достаточно функции `range()`; а для создания\n", + "списков других типов часто используется оператор цикла `for ... in`.\n", + "Предположим, например, что нам требуется получить список високосных\n", + "годов в определенном диапазоне. Для начала мы могли бы использовать\n", + "такой цикл:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "leaps = []\n", + "for year in range(1900, 1940):\n", + " if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):\n", + " leaps.append(year)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Когда функции `range()` передаются два целочисленных\n", + "аргумента `n` и `m`, итератор возвращает последовательность целых\n", + "чисел `n`, `n+1`, ..., `m–1`. \n", + "\n", + "Конечно, если диапазон известен заранее, можно было\n", + "бы использовать литерал списка, например,\n", + "`leaps = [1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936]`.\n", + "\n", + "*Генератор списков* – это выражение и цикл с дополнительным условием,\n", + "заключенное в квадратные скобки, в котором цикл используется для\n", + "создания элементов списка, а условие используется для исключения\n", + "нежелательных элементов. В простейшем виде генератор списков\n", + "записывается, как показано ниже:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " [item for item in iterable]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Это выражение вернет список всех элементов объекта `iterable` и\n", + "семантически ничем не отличается от выражения\n", + "`list(iterable)`. Интересными генераторы списков делают две\n", + "особенности – они могут использоваться как выражения и они допускают\n", + "включение условной инструкции, вследствие чего мы получаем две\n", + "типичные синтаксические конструкции использования генераторов списков:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " [expression for item in iterable]\n", + " [expression for item in iterable if condition]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Вторая форма записи эквивалентна циклу:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " temp = []\n", + " for item in iterable:\n", + " if condition:\n", + " temp.append(expression)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обычно выражение `expression` является либо самим элементом `item`,\n", + "либо некоторым выражением с его участием. Конечно, генератору\n", + "списков не требуется временная переменная `temp[]`, которая необходима\n", + "в версии с циклом `for ... in`.\n", + "\n", + "Теперь можно переписать программный код создания списка високосных\n", + "годов с использованием генератора списка. Мы сделаем это в три\n", + "этапа. Сначала создадим список, содержащий все годы в указанном\n", + "диапазоне:" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "leaps = [y for y in range(1900, 1940)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "То же самое можно было бы сделать с помощью выражения\n", + "`leaps = list(range(1900, 1940))`. Теперь добавим простое условие,\n", + "которое будет оставлять в списке только каждый четвертый год:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "leaps = [y for y in range(1900, 1940) if y % 4 == 0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "И, наконец, получаем окончательную версию:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "leaps = [y for y in range(1900, 1940)\n", + " if (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Использование генератора списков в данном случае позволило уменьшить\n", + "объем программного кода с четырех строк до двух – не так много, но в\n", + "крупных проектах суммарная экономия может оказаться весьма\n", + "существенной. \n", + "\n", + "Так как генераторы списков воспроизводят списки, то есть итерируемые\n", + "объекты, и сами генераторы списков используют итерируемые объекты,\n", + "имеется возможность вкладывать генераторы списков друг \n", + "в друга. Это эквивалентно вложению циклов `for ... in`. Например, если\n", + "бы нам потребовалось сгенерировать список всех возможных кодов одежды\n", + "для разных полов, разных размеров и расцветок, но исключая одежду для\n", + "полных женщин, нужды и чаянья которых индустрия моды нередко\n", + "игнорирует, мы могли бы использовать вложенные циклы\n", + "`for ... in`, как показано ниже:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "codes = []\n", + "for sex in \"MF\":\n", + " for size in \"SMLX\":\n", + " \tif sex == \"F\" and size\n", + "\t continue\n", + " for color in \"BGW\":\n", + "\t codes.append(sex + size + color)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Этот фрагмент воспроизводит список, содержащий 21 элемент – `['MSB',\n", + "'MSG', ..., 'FLW']`. Тот же самый список можно создать парой строк,\n", + "если воспользоваться генераторами списков:" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "codes = [s + z + c for s in \"MF\" for z in \"SMLX\" for c in \"BGW\"\n", + " if not (s == \"F\" and z == \"X\")]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь каждый элемент списка воспроизводится выражением `s + z + c`.\n", + "Кроме того, в генераторе списков несколько иначе построена логика\n", + "обхода нежелательной комбинации пол/размер – проверка выполняется в\n", + "самом внутреннем цикле, тогда как в версии с циклами `for ... in` эта\n", + "проверка выполняется в среднем цикле. Любой генератор списков можно\n", + "переписать, используя один или более циклов `for ... in`. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Множества\n", + "
\n", + "\n", + "Тип `set` – это разновидность коллекций, которая поддерживает оператор\n", + "проверки на вхождение `in`, функцию `len()` и относится к разряду\n", + "итерируемых объектов. Кроме того, множества предоставляют метод \n", + "`set.isdisjoint()` и поддерживают операторы сравнения и битовые\n", + "операторы (которые в контексте множеств используются для получения \n", + "объединения, пересечения и т. д.). В языке Python имеется два\n", + "встроенных типа множеств: изменяемый тип `set` и неизменяемый\n", + "`frozenset`. При переборе элементов множества элементы могут следовать\n", + "в произвольном порядке. \n", + "\n", + "В состав множеств могут включаться только *хешируемые*\n", + "объекты. Хешируемые объекты – это объекты, имеющие специальный метод \n", + "`__hash__()`, на протяжении всего жизненного цикла объекта всегда\n", + "возвращающий одно и то же значение, которые могут участвовать в\n", + "операциях сравнения на равенство посредством специального метода \n", + "`__eq__()`. (Специальные методы – это методы, имена которых начинаются\n", + "и оканчиваются двумя символами подчеркивания).\n", + "\n", + "Все встроенные неизменяемые типы данных, такие как `float`,\n", + "`frozenset`, `int`, `str` и `tuple`, являются хешируемыми объектами и\n", + "могут добавляться во множества. Встроенные изменяемые типы данных,\n", + "такие как `dict`, `list` и `set`, не являются хешируемыми объектами,\n", + "так как значение хеша в каждом конкретном случае зависит от\n", + "содержащихся в объекте элементов, поэтому они не могут добавляться в\n", + "множества.\n", + "\n", + "Множества могут сравниваться между собой с использованием стандартных\n", + "операторов сравнения (`<`, `<=`, `==`, `!=`, `>=`, `>`). Обратите\n", + "внимание: операторы `==` и `!=` имеют обычный смысл, и сравнение\n", + "выполняется путем поэлементного сравнения (или рекурсивно при наличии\n", + "таких вложенных элементов, как кортежи и фиксированные множества\n", + "(`frozenset`)), но остальные операторы сравнения выполняют сравнение\n", + "подмножеств и надмножеств, как вскоре будет показано. \n", + "\n", + "## Тип `set`\n", + "
\n", + "\n", + "Тип `set` – это неупорядоченная коллекция из нуля или более ссылок на\n", + "объекты, указывающих на хешируемые объекты. Множества относятся к\n", + "категории изменяемых типов, поэтому легко можно добавлять и удалять их\n", + "элементы, но, так как они являются неупорядоченными коллекциями, к ним\n", + "не применимо понятие индекса и не применима операция извлечения\n", + "среза. На рис. [collections:sets:fig:1](#collections:sets:fig:1) иллюстрируется множество,\n", + "созданное следующим фрагментом программного кода:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "S = {7, \"veil\", 0, -29, (\"x\", 11), \"sun\", frozenset({8, 4, 7}), 913}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "![Множество – это неупорядоченная коллекция уникальных элементов](fig-collections/set_1.png)\n", + "\n", + "\n", + "Тип данных `set` может вызываться как функция `set()` –\n", + "без аргументов она возвращает пустое множество; с аргументом типа\n", + "`set` возвращает поверхностную копию аргумента; в случае, если\n", + "аргумент имеет другой тип, выполняется попытка преобразовать его в\n", + "объект типа `set`. Эта функция принимает не более одного\n", + "аргумента. Кроме того, непустые множества могут создаваться без\n", + "использования функции `set()`, а пустые множества могут создаваться\n", + "только с помощью функции `set()` – их нельзя создать с помощью пары\n", + "пустых скобок. Множество, состоящее из одного или более элементов,\n", + "может быть создано с помощью последовательности элементов, разделенных\n", + "запятыми, заключенной в фигурные скобки. Другой способ создания\n", + "множеств заключается в использовании генераторов множеств. Множества\n", + "всегда содержат уникальные элементы – добавление повторяющихся\n", + "элементов возможно, но не имеет смысла. Например, следующие три\n", + "множества являются эквивалентными: `set(\"apple\")`, `set(\"aple\")` и\n", + "`{'e', 'p', 'a', 'l'}`. Благодаря этой их особенности множества часто\n", + "используются для устранения повторяющихся значений. Например, если\n", + "предположить, что `x` – это список строк, то после выполнения\n", + "инструкции `x = list(set(x))` в списке останутся только уникальные\n", + "строки, причем располагаться они могут в произвольном порядке.\n", + "\n", + "\n", + "\n", + "
\n", + "![Стандартные операторы множеств](fig-collections/set_2.png)\n", + "\n", + "\n", + "Множества поддерживают встроенную функцию `len()` и быструю проверку\n", + "на вхождение с помощью операторов `in` и `not in`. Они также предоставляют\n", + "типичный набор операторов, как показано на рис. . \n", + "Полный перечень методов и операторов, применимых к множествам,\n", + "приводится в табл. [collections:sets:tbl:1](#collections:sets:tbl:1). Все методы семейства\n", + "«update» (`set.update()`, `set.intersection_update()` и т. д.) могут принимать в качестве\n", + "аргумента любые итерируемые объекты, но эквивалентные им\n", + "комбинированные операторы присваивания (`|=`, `&=` и т. д.) требуют, чтобы\n", + "оба операнда были множествами. \n", + "\n", + "\n", + "## Таблица 2 : Методы и операторы множеств
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Синтаксис Описание
s.add(x) Добавляет элементы x во множество s, если они отсутствуют в s
s.clear() Удаляет все элементы из множества s
s.difference(t)или s-t Возвращает новое множество включающее элементы множества s, которые отсутствуют в множестве t
s.difference_update(t) или s-=t Удаляет из множества s все элементы, присутствующие в множестве t
s.discard(x) Удаляет элемент x из множества s, если он присутствует в множестве s
s.intersection(t) или s & t Возвращает новое множество, включающее элементы, присутствующие одновременно в множествах s и t
s.intersection_update(t) или s &= t Оставляет во множестве s пересечение множеств s и t
s.isdisjoint(t) Возвращает True, если множества s и t не имеют общих элементов
s.issubset(t) или s <= t Возвращает True, если множество s эквивалентно множеству t или является его подмножеством; чтобы проверить, является ли множество s только подмножеством множества t, следует использовать проверку s < t
s.issuperset(t) или s >= t Возвращает True, если множество s эквивалентно множеству t или является его надмножеством; чтобы проверить, является ли множество s только надмножеством множества t, следует использовать проверку s > t
s.pop() Возвращает и удаляет случайный элемент множества s или возбуждает исключение KeyError, если s – это пустое множество
s.remove(x) Удаляет элемент x из множества s или возбуждает исключение KeyError, если элемент x отсутствует в множестве s
s.symmetric_difference(t) или s ^ t Возвращает новое множество, включающее все элементы, присутствующие в множествах s и t, за исключением элементов, присутствующих в обоих множествах одновременно
s.symmetric_difference_update(t) или s ^= t Возвращает в множестве s результат строгой дизъюнкции множеств s и t
s.union(t) или s | t Возвращает новое множество, включающее все элементы множества s и все элементы множества t, отсутствующие в множестве s
s.update(t) или s |= t Добавляет во множество s все элементы множества t, отсутствующие в множестве s
\n", + "\n", + "\n", + "### Генераторы множеств\n", + "\n", + "
\n", + "\n", + "В дополнение к возможности создавать множества с помощью функции\n", + "`set()` или литералов, существует возможность создавать множества с\n", + "помощью *генераторов множеств*. Генератор множества – это выражение и\n", + "цикл с необязательным условием, заключенные в фигурные скобки. Подобно\n", + "генераторам списков, генераторы множеств поддерживают две формы\n", + "записи:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " {expression for item in iterable}\n", + " {expression for item in iterable if condition}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы могли бы использовать генераторы множеств для фильтрации\n", + "нежелательных элементов (когда порядок следования элементов не имеет\n", + "значения), как показано ниже:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "html = {x for x in files if x.lower().endswith((\".htm\", \".html\"))}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Если предположить, что `files` – это список имен файлов, то данный\n", + "генератор множества создает множество `html`, в котором хранятся\n", + "только имена файлов с расширениями `.htm` и `.html`, независимо от\n", + "регистра символов.\n", + "\n", + "Как и в случае с генераторами списков, в генераторах множеств\n", + "используются итерируемые объеты, которые в свою очередь могут быть\n", + "генераторами множеств (или генераторами любого другого типа), что\n", + "позволяет создавать весьма замысловатые генераторы множеств.\n", + "\n", + "## Тип `frozenset`\n", + "
\n", + "\n", + "Фиксированное множество (`frozenset`) – это множество, которое после\n", + "создания невозможно изменить. Хотя при этом мы, конечно, можем\n", + "повторно связать переменную, которая ссылалась на фиксированное\n", + "множество, с чем-то другим. Фиксированные множества могут создаваться\n", + "только в результате обращения к имени типа `frozenset` как к\n", + "функции. При вызове `frozenset()` без аргументов возвращается пустое\n", + "фиксированное множество; с аргументом типа `frozenset` возвращается\n", + "поверхностная копия аргумента; если аргумент имеет другой тип,\n", + "выполняется попытка преобразовать его в объект типа `frozenset`. Эта\n", + "функция принимает не более одного аргумента.\n", + "\n", + "Поскольку фиксированные множества относятся к категории неизменяемых\n", + "объектов, они поддерживают только те методы и операторы, которые\n", + "воспроизводят результат, не оказывая воздействия на фиксированное\n", + "множество или на множества, к которым они применяются.\n", + "\n", + "Поскольку фиксированные множества относятся к категории неизменяемых\n", + "объектов, они поддерживают только те методы и операторы, которые\n", + "воспроизводят результат, не оказывая воздействия на фиксированное\n", + "множество или на множества, к которым они применяются. \n", + "В табл. [collections:sets:tbl:1](#collections:sets:tbl:1) перечислены все методы множеств из\n", + "которых фиксированными множествами поддерживаются: `frozenset.copy()`,\n", + "`frozenset.difference()` (`-`), `frozenset.intersection()` (`&`),\n", + "`frozenset.isdis-joint()`, `frozenset.issubset()` (`<=` и `<` для\n", + "выявления подмножеств), `frozenset.issuperset()` (`>=` и `>` для\n", + "выявления надмножеств), `frozenset.union()` (`|`) и\n", + "`frozenset.symmetric_difference()` (`^`).\n", + "\n", + "Если двухместный оператор применяется ко множеству и фиксированному\n", + "множеству, тип результата будет совпадать с типом операнда, стоящего\n", + "слева от оператора. То есть если предположить, что `f` – это\n", + "фиксированное множество, а `s` – это обычное множество, то выражение\n", + "`f & s` вернет объект типа frozenset, а выражение `s & f` – объект\n", + "типа `set`. В случае операторов `==` и `!=` порядок операндов не имеет\n", + "значения, и выражение `f == s` вернет `True`, только если оба\n", + "множества содержат одни и те же элементы.\n", + "\n", + "Другое следствие неизменности фиксированных множеств заключается в\n", + "том, что они соответствуют критерию хеширования, предъявляемому к\n", + "элементам множеств, и потому множества и фиксированные множества могут\n", + "содержать другие фиксированные множества.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Отображения\n", + "
\n", + "\n", + "Отображениями называются типы данных, поддерживающие оператор проверки\n", + "на вхождение (`in`), функцию `len()` и возможность обхода элементов в\n", + "цикле. Отображения – это коллекции пар элементов «ключ-значение»,\n", + "которые предоставляют методы доступа к элементам и их ключам и\n", + "значениям. При выполнении итераций порядок следования элементов\n", + "отображений может быть произвольным. В языке Python имеется два типа\n", + "отображений: встроенный тип `dict` и тип `collections.defaultdict`,\n", + "определяемый в стандартной библиотеке. Мы будем использовать термин\n", + "словарь для ссылки на любой из этих типов, когда различия между ними\n", + "не будут иметь никакого значения." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import collections.defaultdict" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В качестве ключей словарей могут использоваться только хешируемые\n", + "объекты, поэтому в качестве ключей словаря такие неизменяемые типы,\n", + "как `float`, `frozenset`, `int`, `str` и `tuple`, использовать\n", + "допускается, а изменяемые типы, такие как `dict`, `list` и `set`, –\n", + "нет. С другой стороны, каждому ключу соответствует некоторое значение,\n", + "которое может быть ссылкой на объект любого типа, включая числа,\n", + "строки, списки, множества, словари, функции и т. д.\n", + "\n", + "Словари могут сравниваться с помощью стандартных операторов сравнения\n", + "(`<`, `<=`, `==`, `!=`, `>=`, `>`), при этом сравнивание производится\n", + "поэлементно (и рекурсивно, при наличии вложенных элементов, таких как\n", + "кортежи или словари в словарях). Пожалуй, единственными операторами\n", + "сравнения, применение которых к словарям имеет смысл, являются\n", + "операторы `==` и `!=`.\n", + "\n", + "## Словари\n", + "
\n", + "\n", + "Тип `dict` – это неупорядоченная коллекция из нуля или более пар\n", + "«ключ-значение», в которых в качестве ключей могут использоваться\n", + "ссылки на хешируемые объекты, а в качестве значений – ссылки на\n", + "объекты любого типа. Словари относятся к категории изменяемых типов,\n", + "поэтому легко можно добавлять и удалять их элементы, но так как они\n", + "являются неупорядоченными коллекциями, к ним не применимо понятие\n", + "индекса и не применима операция извлечения среза.\n", + "\n", + "Тип данных `dict` может вызываться как функция `dict()` – без\n", + "аргументов она возвращает пустой словарь; если в качестве аргумента\n", + "передается отображение, возвращается словарь, основанный на этом\n", + "отображении: например, с аргументом типа `dict` возвращается\n", + "поверхностная копия словаря. Существует возможность передавать в\n", + "качестве аргумента последовательности, если каждый элемент\n", + "последовательности в свою очередь является последовательностью из двух\n", + "объектов, первый из которых используется в качестве ключа, а второй –\n", + "в качестве значения. Как вариант, для создания словарей, в которых \n", + "ключи являются допустимыми идентификаторами языка Python, можно\n", + "использовать именованные аргументы; тогда имена аргументов будут\n", + "играть роль ключей, а значения аргументов – роль значений\n", + "ключей. Кроме того, словари могут создаваться с помощью фигурных\n", + "скобок – пустые скобки `{}` создадут пустой словарь. Непустые фигурные\n", + "скобки должны содержать один или более элементов, разделенных\n", + "запятыми, каждый из которых состоит из ключа, символа двоеточия и\n", + "значения. Еще один способ создания словарей заключается в\n", + "использовании генераторов словарей – эта тема будет рассматриваться\n", + "ниже, в соответствующем подразделе.\n", + "\n", + "Ниже приводятся несколько способов создания словарей – все они создают\n", + "один и тот же словарь:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "d1 = dict({\"id\": 1948, \"name\": \"Washer\", \"size\": 3})\n", + "d2 = dict(id=1948, name=\"Washer\", size=3)\n", + "d3 = dict([(\"id\", 1948), (\"name\", \"Washer\"), (\"size\", 3)])\n", + "d4 = dict(zip((\"id\", \"name\", \"size\"), (1948, \"Washer\", 3)))\n", + "d5 = {\"id\": 1948, \"name\": \"Washer\", \"size\": 3}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "
\n", + "![Словарь – это неупорядоченная коллекция элементов (ключ, значение) с уникальными ключами](fig-collections/map_1.png)\n", + "\n", + "\n", + "На рис. [collections:maps:fig:1](#collections:maps:fig:1) демонстрируется словарь, созданный\n", + "следующим фрагментом программного кода:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "d = {\"root\": 18, \"blue\": [75, \"R\", 2], 21: \"venus\", -14: None,\n", + " \"mars\": \"rover\", (4, 11): 18, 0: 45}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ключи словарей являются уникальными, поэтому если в словарь\n", + "добавляется пара «ключ-значение» с ключом, который уже присутствует в\n", + "словаре, в результате происходит замена значения существующего ключа\n", + "новым значением. Для доступа к отдельным элементам используются\n", + "квадратные скобки: например, выражение `d[\"root\"]` вернет `18`,\n", + "выражение `d[21]` вернет строку `\"venus\"`, а выражение `d[91]` \n", + "применительно к словарю, изображенному на\n", + "рис. [collections:maps:fig:1](#collections:maps:fig:1), возбудит исключение `KeyError`. \n", + "\n", + "Квадратные скобки могут также использоваться для добавления и удаления\n", + "элементов словаря. Чтобы добавить новый элемент, используется оператор\n", + "`=`, например, `d[\"X\"] = 59`. Для удаления элементов используется\n", + "инструкция `del`, например, инструкция `del d[\"mars\"]` удалит из \n", + "словаря элемент с ключом `\"mars\"` или возбудит исключение `KeyError`,\n", + "если элемент с указанным ключом отсутствует в словаре. Кроме того,\n", + "элементы могут удаляться (и возвращаться вызывающей программе)\n", + "методом `dict.pop()`.\n", + "\n", + "Словари поддерживают встроенную функцию `len()` и для ключей\n", + "поддерживают возможность быстрой проверки на вхождение с помощью\n", + "операторов `in` и `not in`. В табл. [collections:maps:tbl:1](#collections:maps:tbl:1)\n", + "перечислены все методы словарей.\n", + "\n", + "Так как словари содержат пары «ключ-значение», у нас может возникнуть\n", + "потребность обойти в цикле элементы словаря (ключ, значение) по\n", + "значениям или по ключам. Например, ниже приводятся два эквивалентных\n", + "способа обхода пар «ключ-значение»:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "3\n", + "8\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for key, value in d.items():\n", + " print(key, value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Таблица 3 : Методы словарей
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Синтаксис Описание
d.clear() Удаляет все элементы из словаря d
d.copy() Возвращает поверхностную копию словаря d
d.fromkeys(s, v) Возвращает словарь типа dict, ключами которого являются элементы последовательности s значениями либо None либо v, если аргумент v определен
d.get(k) Возвращает значение ключа k или None, если ключ k отсутствует в словаре
d.get(k, v) Возвращает значение ключа k или v, если ключ k отсутствует в словаре
d.items() Возвращает представление всех пар (ключ, значение) в словаре d
d.keys() Возвращает представление всех ключей словаря d
d.pop(k) Возвращает значение ключа k и удаляет из словаря элемент с ключом k или возбуждает исключение KeyError, если ключ k отсутствует в словаре
d.pop(k, v) Возвращает значение ключа k и удаляет из словаря элемент с ключом k или возвращает значение v, если ключ k отсутствует в словаре
d.popitem() Возвращает и удаляет произвольную пару (ключ, значение) из словаря d или возбуждает исключение KeyError, если словарь d пуст
d.setdefault(k, v) То же что и dict.get() за исключением того, что, если ключ k в словаре отсутствует, в словарь вставляется новый элемент с ключом k и со значением None или v, если аргумент v задан
d.update(a) Добавляет в словарь d пары (ключ, значение) из a, которые отсутствуют в словаре d а для каждого ключа который уже присутствует в словаре d выполняется замена соответствующим значением из a; a может быть словарем итерируемым объектом с парами (ключ значение) или именованными аргументами
d.values() Возвращает представление всех значений в словаре d
\n", + "\n", + "\n", + "\n", + "Обход значений в словаре выполняется похожим способом:" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for value in d.values():\n", + " print(value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Для обхода ключей в словаре можно использовать метод `dict.keys()`\n", + "или просто интерпретировать словарь как итерируемый объект и вы-\n", + "полнить итерации по его ключам, как показано в следующих двух\n", + "фрагментах:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for key in d:\n", + " print(key)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for key in d.keys():\n", + " print(key)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Если необходимо изменить значения в словаре, то можно выполнить\n", + "обход ключей словаря в цикле и изменить значения, используя оператор\n", + "квадратных скобок. Например, ниже показано, как можно было бы\n", + "увеличить все значения в словаре `d`, если предполагать, что все\n", + "значения являются числами:" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for key in d:\n", + " d[key] += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Методы `dict.items()`, `dict.keys()` и `dict.values()` возвращают\n", + "представления словарей. Представление словаря – это в действительности\n", + "итерируемый объект, доступный только для чтения и хранящий элементы,\n", + "ключи или значения словаря в зависимости от того, какое представление\n", + "было запрошено.\n", + "\n", + "### Генераторы словарей\n", + "\n", + "
\n", + "\n", + "*Генератор словарей* – это выражение и цикл с необязательным условием,\n", + "заключенное в фигурные скобки, очень напоминающее генератор\n", + "множеств. Подобно генераторам списков и множеств, генераторы словарей\n", + "поддерживают две формы записи:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " {keyexpression: valueexpression for key, value in iterable}\n", + " {keyexpression: valueexpression for key, value in iterable if condition}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ниже показано, как можно использовать генератор словарей для создания\n", + "словаря, в котором каждый ключ является именем файла в текущем\n", + "каталоге, а каждое значение – это размер файла в байтах:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " file_sizes = {name: os.path.getsize(name) for name in os.listdir(\".\")}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Функция `os.listdir()` из модуля os («operating system» – операционная\n", + "система) возвращает список файлов и каталогов в указанном каталоге, но\n", + "при этом в список никогда не включаются специальные имена каталогов\n", + "«.» или «..». Функция os.path.getsize() возвращает размер заданного\n", + "файла в байтах. Чтобы отфильтровать каталоги и другие элементы списка,\n", + "не являющиеся файлами, можно добавить дополнительное условие:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " file_sizes = {name: os.path.getsize(name) for name in os.listdir(\".\")\n", + " \t if os.path.isfile(name)}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Функция `os.path.isfile()` из модуля `os.path` возвращает `True`, если\n", + "указанный путь соответствует файлу, и `False` – в противном случае, то\n", + "есть для каталогов, ссылок и тому подобного.\n", + "\n", + "Генераторы словарей могут также использоваться для создания инвер-\n", + "тированных словарей. Например, пусть имеется словарь `d`, тогда мы\n", + "можем создать новый словарь, ключами которого будут значения словаря\n", + "`d`, а значениями – ключи словаря `d`:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```Python\n", + " inverted_d = {v: k for k, v in d.items()}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Полученный словарь можно инвертировать обратно и получить\n", + "первоначальный словарь – при условии, что все значения в\n", + "первоначальном словаре были уникальными, однако инверсия будет терпеть\n", + "неудачу, с возбуждением исключения `TypeError`, если какое-либо\n", + "значение окажется не хешируемым.\n", + "\n", + "\n", + "## Словари со значениями по умолчанию\n", + "
\n", + "\n", + "Словари со значениями по умолчанию – это обычные словари, они\n", + "поддерживают те же самые методы и операторы, что и обычные\n", + "словари. Единственное, что отличает такие словари от обычных словарей,\n", + "– это способ обработки отсутствующих ключей, но во всех остальных\n", + "отношениях они ничем не отличаются друг от друга. \n", + "\n", + "При обращении к несуществующему («отсутствующему») ключу слова-\n", + "ря возбуждается исключение `KeyError`. Это очень удобно, так как\n", + "нередко для нас бывает желательно знать об отсутствии ключа, который,\n", + "согласно нашим предположениям, может присутствовать. Но в некоторых\n", + "случаях бывает необходимо, чтобы в словаре присутствовали все ключи,\n", + "которые мы используем, даже если это означает, что элемент с заданным\n", + "ключом добавляется в словарь в момент первого обращения к нему.\n", + "\n", + "Например, допустим, что имеется словарь `d`, который не имеет элемента\n", + "с ключом m, тогда выражение `x = d[m]` возбудит исключение\n", + "`KeyError`. Если `d` – это словарь со значениями по умолчанию,\n", + "созданный соответствующим способом, а элемент с ключом m принадлежит\n", + "такому словарю, то при обращении к нему будет возвращено\n", + "соответствующее значение, как и в случае с обычным словарем. Но если в\n", + "словаре со значениями по умолчанию отсутствует ключ m, то будет создан\n", + "новый элемент словаря с ключом m и со значением по умолчанию, и будет\n", + "возвращено значение этого, вновь созданного элемента. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Обход в цикле и копирование коллекций\n", + "
\n", + "\n", + "После того как будет создана коллекция элементов данных, вполне\n", + "естественно возникает желание обойти все элементы, содержащиеся в\n", + "ней. Еще одна часто выполняемая операция – копирование коллекций. Из-за\n", + "того, что в языке Python повсеместно используются ссылки на объекты\n", + "(ради повышения эффективности), существуют некоторые особенности,\n", + "связанные с копированием.\n", + "\n", + "В этом разделе сначала мы рассмотрим итераторы языка Python, а затем\n", + "принципы копирования коллекций.\n", + "\n", + "## Итераторы, функции и операторы для работы с итерируемыми объектами\n", + "
\n", + "\n", + "*Итерируемый* тип данных – это такой тип, который может возвращать\n", + "свои элементы по одному. Любой объект, имеющий метод `__iter__()`, или\n", + "любая последовательность (то есть объект, имеющий метод\n", + "`__getitem__()`, принимающий целочисленный аргумент со значением от\n", + "`0` и выше), является итерируемым и может предоставлять\n", + "итератор. Итератор – это объект, имеющий метод `__next__()`, который\n", + "при каждом вызове возвращает очередной элемент и возбуждает исключение\n", + "`StopIteration` после исчерпания всех элементов. В\n", + "табл. [collections:iterandcopy:iterator:tbl:1](#collections:iterandcopy:iterator:tbl:1) перечислены\n", + "операторы и функции, которые могут применяться к итерируемым\n", + "объектам. \n", + "\n", + "\n", + "## Таблица 4 : Общие функции и операторы для работы с итерируемыми объектами
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Синтаксис Описание
s + t Возвращает конкатенацию последовательностей s и t
s * n Возвращает конкатенацию из int n последовательностей s
x in i Возвращает True, если элемент x присутствует в итерируемом объекте i, обратная проверка выполняется с помощью оператора not in
all(i) Возвращает True, если все элементы итерируемого объекта i в логическом контексте оцениваются как значение True
any(i) Возвращает True, если хотя бы один элемент итерируемого объекта i в логическом контексте оценивается как значение True
enumerate (i,start) Обычно используется в циклах for ... in, чтобы получить последовательность кортежей (index, item), где значения индексов начинают отсчитывать от 0 или от значения start
len(x) Возвращает «длину» объекта x. Если x – коллекция, то возвращаемое число представляет количество элементов. Если x – строка, то возвращаемое число представляет количество символов
max(i, key) Возвращает наибольший элемент в итерируемом объекте i или элемент с наибольшим значением key(item), если функция key определена
min(i, key) Возвращает наименьший элемент в итерируемом объекте i или элемент с наименьшим значением key(item), если функция key определена
range(start, stop, step) Возвращает целочисленный итератор. С одним аргументом (stop) итератор представляет последовательность целых чисел от 0 до stop-1, с двумя аргументами (start, stop) – последовательность целых чисел от start до stop-1, с тремя аргументами – последовательность целых чисел от start до stop-1 c шагом step
reversed(i) Возвращает итератор, который будет возвращать элементы итератора i в обратном порядке
sorted(i, key, reverse) Возвращает список элементов итератора i в отсортированном порядке. Аргумент key используется для выполнения сортировки DSU (Decorate, Sort, Undecorate – декорирование, сортировка, обратное декорирование). Если аргумент reverse имеет значение True, сортировка выполняется в обратном порядке
sum(i, start) Возвращает сумму элементов итерируемого объекта i, плюс ар гумент start (значение которого по умолчанию равно 0). Объект i не должен содержать строк
zip(i1, ..., iN) Возвращает итератор кортежей, используя итераторы от i1 до iN
\n", + "\n", + "\n", + "Порядок, в котором возвращаются элементы, зависит от итерируемого\n", + "объекта. В случае списков и кортежей элементы обычно возвращаются\n", + "в предопределенном порядке, начиная с первого элемента (находящегося в\n", + "позиции с индексом `0`), но другие итераторы возвращают элементы в\n", + "произвольном порядке – например, итераторы словарей и множеств.\n", + "\n", + "Встроенная функция `iter()` используется двумя совершенно различными\n", + "способами. Применяемая к коллекции или к последовательности, она\n", + "возвращает итератор для заданного объекта или возбуждает исключение\n", + "`TypeError`, если объект не является итерируемым. Такой способ часто\n", + "используется при работе с нестандартными типами коллекций \n", + "и крайне редко – в других контекстах. Во втором варианте использования\n", + "функции `iter()` ей передается вызываемый объект (функция или метод) и\n", + "специальное значение. В этом случае полученная функция или метод\n", + "вызывается на каждой итерации, а значение этой функции, если оно не\n", + "равно специальному значению, возвращается вызывающей программе; в\n", + "противном случае возбуждается исключение `StopIteration`.\n", + "\n", + "Когда в программе используется цикл `for item in iterable`,\n", + "интерпретатор Python вызывает функцию `iter(iterable)`, чтобы получить\n", + "итератор. После этого на каждой итерации вызывается метод `__next__()`\n", + "итератора, чтобы получить очередной элемент, а когда возбуждается\n", + "исключение `StopIteration`, оно перехватывается и цикл завершается.\n", + "Другой способ получить очередной элемент итератора состоит в том,\n", + "чтобы вызвать встроенную функцию `next()`. Ниже приводятся два\n", + "эквивалентных фрагмента программного кода (оба они вычисляют\n", + "произведение элементов списка), в одном из них используется цикл\n", + "`for ... in`, а во втором явно используется итератор:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "product = 1\n", + "for i in [1, 2, 4, 8]:\n", + " product *= i\n", + "print(product)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "product = 1\n", + "i = iter([1, 2, 4, 8])\n", + "while True:\n", + " try:\n", + " product *= next(i)\n", + " except StopIteration:\n", + " break\n", + "print(product)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Любой (конечный) итерируемый объект `i` может быть преобразован\n", + "в кортеж вызовом функции `tuple(i)` или в список – вызовом функции\n", + "`list(i)`.\n", + "\n", + "## Копирование коллекций\n", + "
\n", + "\n", + "Поскольку в языке Python повсюду используются ссылки на объекты, когда\n", + "выполняется оператор присваивания (`=`), никакого копирования данных\n", + "на самом деле не происходит. Если справа от оператора находится\n", + "литерал, например, строка или число, в операнд слева записывается\n", + "ссылка, которая указывает на объект в памяти, хранящий значение\n", + "литерала. Если справа находится ссылка на объект, в левый операнд\n", + "записывается ссылка, указывающая на тот же самый объект, на который\n", + "ссылается правый операнд. Вследствие этого операция присваивания\n", + "обладает чрезвычайно высокой скоростью выполнения. \n", + "\n", + "Когда выполняется присваивание крупной коллекции, такой как\n", + "длинный список, экономия времени становится более чем очевидной.\n", + "Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "songs = [\"Because\", \"Boys\", \"Carol\"]\n", + "beatles = songs\n", + "beatles, songs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь была создана новая ссылка на объект (`beatles`), и обе ссылки\n", + "указывают на один и тот же список – никакого копирования данных не\n", + "производилось. \n", + "\n", + "Поскольку списки относятся к категории изменяемых объектов, мы\n", + "можем вносить в них изменения. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "beatles[2] = \"Cayenne\"\n", + "beatles, songs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Изменения были внесены с использованием переменной `beatles`, но это\n", + "всего лишь ссылка, указывающая на тот же самый объект, что и ссылка\n", + "songs. Поэтому любые изменения, произведенные с использованием одной\n", + "ссылки, можно наблюдать с использованием другой ссылки. \n", + "Часто это именно то, что нам требуется, поскольку копирование крупных\n", + "коллекций может оказаться дорогостоящей операцией. Кроме того, это\n", + "также означает, что имеется возможность передавать списки или другие\n", + "изменяемые коллекции в виде аргументов функций, изменять эти коллекции\n", + "в функциях и пребывать в уверенности, что изменения будут доступны\n", + "после того, как функция вернет управление вызывающей программе. \n", + "\n", + "Однако в некоторых ситуациях действительно бывает необходимо создать\n", + "отдельную копию коллекции (то есть создать другой изменяемый\n", + "объект). В случае последовательностей, когда выполняется оператор\n", + "извлечения среза, например, `songs[:2]`, полученный срез – это всегда \n", + "независимая копия элементов. Поэтому скопировать последовательность\n", + "целиком можно следующим способом:" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "songs = [\"Because\", \"Boys\", \"Carol\"]\n", + "beatles = songs[:]\n", + "beatles[2] = \"Cayenne\"\n", + "beatles, songs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В случае словарей и множеств копирование можно выполнить с помощью\n", + "методов `dict.copy()` и `set.copy()`. Кроме того, в модуле copy\n", + "имеется функция copy.copy(), которая возвращает копию заданного\n", + "объекта. Другой способ копирования встроенных типов коллекций\n", + "заключается в использовании имени типа как функции, которой в качестве\n", + "аргумента передается копируемая коллекция. Например:" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "copy_of_dict_d = dict(d)\n", + "copy_of_list_L = list(L)\n", + "copy_of_set_s = set(s)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Обратите внимание, что все эти приемы копирования\n", + "создают *поверхностные копии*, то есть копируются только ссылки на\n", + "объекты, но не сами объекты. Для неизменяемых типов данных, таких как числа\n", + "и строки, это равносильно копированию (за исключением более высокой\n", + "эффективности), но для изменяемых типов данных, таких как вложенные\n", + "коллекции, это означает, что ссылки в оригинальной коллекции и в копии\n", + "будут указывать на одни и те же объекты. Эту особенность иллюстрирует\n", + "следующий пример:" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = [53, 68, [\"A\", \"B\", \"C\"]]\n", + "y = x[:] # поверхностное копирование\n", + "x, y" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "y[1] = 40\n", + "x[2][0] = 'Q'\n", + "x, y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Когда выполняется поверхностное копирование списка `x`, копируется\n", + "ссылка на вложенный список `[\"A\", \"B\", \"C\"]`. Это означает, что третий\n", + "элемент в обоих списках, `x` и `y`, ссылается на один и тот же список,\n", + "поэтому любые изменения, произведенные во вложенном списке, можно\n", + "наблюдать с помощью любой из ссылок, `x` или `y`. Если действительно\n", + "необходимо создать абсолютно независимую копию коллекции с\n", + "произвольной глубиной вложенности, необходимо выполнить глубокое \n", + "копирование:" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import copy\n", + "x = [53, 68, [\"A\", \"B\", \"C\"]]\n", + "y = copy.deepcopy(x)\n", + "y[1] = 40\n", + "x[2][0] = 'Q'\n", + "x, y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь списки `x` и `y`, а также элементы, которые они содержат,\n", + "полностью независимы. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/datatype.ipynb b/datatype.ipynb index b3fff2f..b5c5907 100644 --- a/datatype.ipynb +++ b/datatype.ipynb @@ -10,15 +10,13 @@ " \n", "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", "\n", - "Date: **Feb 24, 2020**\n", + "Date: **Feb 27, 2020**\n", "\n", "\n", "\n", "\n", "\n", "\n", - "\n", - "\n", "Здесь разберем как Python работает с переменными и определим, какие\n", "типы данных можно использовать в рамках этого языка. Подробно рассмотрим модель\n", "данных Python, а также механизмы создания и изменения значения\n", @@ -1514,7 +1512,7 @@ "Как показано в примере, мы можем также использовать комбинированный\n", "оператор присваивания с дублированием. \n", "\n", - "# Форматирование строк с помощью метода `str.format()`\n", + "## Форматирование строк с помощью метода `str.format()`\n", "
\n", "\n", "Метод `str.format()` представляет собой очень мощное и гибкое средство\n", @@ -1608,6 +1606,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "В следующем разделе мы рассмотрим применение функции `str.format()`.\n", + "\n", "\n", "\n", "\n", @@ -1615,8 +1615,195 @@ "# Примеры\n", "
\n", "\n", + "## Печать символов Юникода\n", + "
\n", "\n", + "Рассмотрим небольшой, но достаточно поучительный пример использования\n", + "метода `str.format()`, в котором мы увидим применение спецификаторов\n", + "формата в реальном контексте. Программа, состоящая всего из 25 строк\n", + "выполняемого кода, находится в файле\n", + "[print_unicode.py](src-datatype/print_unicode.py). Она импортирует\n", + "два модуля, `sys` и `unicodedata` и определяет одну функцию –\n", + "`print_unicode_table()`. Рассмотрение примера мы начнем\n", + "с запуска программы, чтобы увидеть, что она делает; затем мы\n", + "рассмотрим программный код в конце программы, где выполняется вся\n", + "фактическая работа; и в заключение рассмотрим функцию, определяемую в\n", + "программе." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%run src-datatype/print_unnicode.py Spoked" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "При запуске без аргументов программа выводит таблицу всех символов\n", + "Юникода, начиная с пробела и до символа с наибольшим возможным\n", + "кодом. При запуске с аргументом, как показано в примере, выводятся \n", + "только те строки таблицы, где в названии символов Юникода содержится\n", + "значение строки-аргумента, переведенной в нижний регистр.\n", "\n", + "Разберем исходный код программы:" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Start main script\n", + "word = None\n", + "\n", + "if len(sys.argv) > 1:\n", + " if sys.argv[1] in (\"-h\", \"--help\"):\n", + " print(\"usage: {0} [string]\".format(sys.argv[0]))\n", + " word = 0\n", + " else:\n", + " word = sys.argv[1].lower()\n", + "\n", + "if word != 0:\n", + " print_unicode_table(word)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "После инструкций импортирования и определения функции\n", + "`print_unicode_table()` выполнение достигает программного кода,\n", + "показанного выше. Сначала предположим, что пользователь не указал в\n", + "командной строке искомое слово. Если аргумент командной строки\n", + "присутствует и это `-h` или `--help`, программа выводит информацию о\n", + "порядке использования и устанавливает флаг `word` в значение `0`, указывая\n", + "тем самым, что работа завершена. В противном случае в переменную `word`\n", + "записывается копия аргумента, введенного пользователем, с\n", + "преобразованием всех символов в нижний регистр. Если значение `word` не\n", + "равно `0`, программа выводит таблицу.\n", + "\n", + "При выводе информации о порядке использования применяется спецификатор\n", + "формата, который представляет собой простое имя формата, в данном\n", + "случае – порядковый номер позиционного аргумента. Мы могли бы записать\n", + "эту строку, как показано ниже:" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(\"usage: {0[0]} [string]\".format(sys.argv))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "При таком подходе первый символ `0` соответствует порядковому номеру\n", + "позиционного аргумента, а `[0]` — это индекс элемента внутри\n", + "аргумента, и такой прием сработает, потому что `sys.argv` является\n", + "списком." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def print_unicode_table(word):\n", + " print(\"decimal hex chr {0:^40}\".format(\"name\"))\n", + " print(\"------- ----- --- {0:-<40}\".format(\"\"))\n", + "\n", + " code = ord(\" \")\n", + " end = sys.maxunicode\n", + "\n", + " while code < end:\n", + " c = chr(code)\n", + " name = unicodedata.name(c, \"*** unknown ***\")\n", + " if word is None or word in name.lower():\n", + " print(\"{0:7} {0:5X} {0:^3c} {1}\".format(code, name.title()))\n", + " code += 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Первый вызов `str.format()` выводит текст `\"name\"`, отцентрированный в\n", + "поле вывода, шириной 40 символов, а второй вызов выводит пустую строку\n", + "в поле шириной 40 символов, используя символ `-` в качестве\n", + "символа-заполнителя, с выравниванием по левому краю. \n", + "\n", + "Как вариант, вторую строку функции можно было записать, как показано ниже:" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(\"------- ----- --- {0}\".format(\"-\" * 40))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Здесь мы использовали оператор дублирования строки (`*`), чтобы\n", + "создать необходимую строку, и просто вставили ее в строку формата.\n", + "\n", + "Текущий код символа Юникода сохраняется в переменной `code`, которая\n", + "инициализируется кодом пробела (`0x20`). В переменную end записывается\n", + "максимально возможный код символа Юникода, который может принимать\n", + "разные значения в зависимости от того, какая из кодировок\n", + "использовалась при компиляции Python.\n", + "\n", + "Внутри цикла `while` с помощью функции `chr()` мы получаем символ\n", + "Юникода, соответствующий числовому коду. Функция `unicodedata.name()`\n", + "возвращает название заданного символа Юникода, во втором\n", + "необязательном аргументе передается имя, которое будет использовано в\n", + "случае, когда имя символа не определено. \n", + "\n", + "Если пользователь не указывает аргумент командной строки (`word is None`)\n", + "или аргумент был указан и он входит в состав копии имени символа\n", + "Юникода, в которой все символы приведены к нижнему регистру, то\n", + "выводится соответствующая строка таблицы. \n", + "\n", + "Мы передаем переменную `code` методу `str.format()` один раз, но в\n", + "строке формата она используется трижды. Первый раз – при выводе\n", + "значения `code` как целого числа в поле с шириной 7 символов (по\n", + "умолчанию в качестве символа-заполнителя используется пробел, поэтому\n", + "нет необходимости явно указывать его). Второй раз – при выводе\n", + "значения `code` как целого числа в шестнадцатеричном формате символами\n", + "верхнего регистра в поле шириной 5 символов. И третий раз – при выводе \n", + "символа Юникода, соответствующего значению code, с помощью\n", + "спецификатора формата `c`, отцентрированного в поле с минимальной \n", + "шириной 3 символа. Обратите внимание, что нам не потребовалось\n", + "указывать тип `d` в первом спецификаторе формата, потому что он\n", + "подразумевается по умолчанию для целых чисел. Второй аргумент –\n", + "это имя символа Юникода, которое выводится с помощью метода\n", + "`str.title()`, в результате которого первый символ каждого слова\n", + "преобразуется к верхнему регистру, а остальные символы – к нижнему. \n", "\n", "\n", "## `quadratic.py`\n", @@ -1658,17 +1845,701 @@ "С коэффициентами $1.5$, $-3$ и $6$ программа выведет (некоторые цифры\n", "обрезаны):\n", "\n", + "Теперь обратимся к программному коду, который начинается тремя инструкциями `import`:\n", + "\n", + "Нам необходимы обе математические библиотеки для работы с числами типа\n", + "`float` и `complex`, так как функции, вычисляющие квадратный \n", + "корень из вещественных и комплексных чисел, отличаются. Модуль\n", + "`sys` нам необходим, так как в нем определена константа\n", + "`sys.float_info.epsilon`, которая потребуется нам для сравнения\n", + "вещественных чисел со значением `0`.\n", + "\n", + "Нам также необходима функция, которая будет получать от пользова-\n", + "теля число с плавающей точкой:" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Start get_float\n", + "def get_float(msg, allow_zero):\n", + " x = None\n", + " while x is None:\n", + " try:\n", + " x = float(input(msg))\n", + " if not allow_zero and abs(x) < sys.float_info.epsilon:\n", + " print(\"zero is not allowed\")\n", + " x = None\n", + "\n", + " except ValueError as err:\n", + " print(err)\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция выполняет цикл, пока пользователь не введет допустимое\n", + "число с плавающей точкой (например, `0.5`, `-9`, `21`, `4.92`), и допускает\n", + "ввод значения `0`, только если аргумент `allow_zero` имеет значение `True`.\n", + "Вслед за определением функции `get_float()` выполняется оставшаяся\n", + "часть программного кода. Мы разделим его на три части и начнем со\n", + "взаимодействия с пользователем:" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Start 1st block\n", + "print(\"ax\\N{SUPERSCRIPT TWO} + bx + c = 0\")\n", + "a = get_float(\"enter a: \", False)\n", + "b = get_float(\"enter b: \", False)\n", + "c = get_float(\"enter c: \", False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Благодаря функции `get_float()` получить значения коэффициентов `a`,\n", + "`b` и `c` оказалось очень просто. Второй аргумент функции сообщает, когда\n", + "значение `0` является допустимым." + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Start 2d block\n", + "x1 = None\n", + "x2 = None\n", + "discriminant = (b ** 2) - (4 * a * c)\n", + "if discriminant == 0:\n", + " x1 = -(b / (2 * a))\n", + "else:\n", + " if discriminant > 0:\n", + " root = math.sqrt(discriminant)\n", + " else: # discriminant < 0\n", + " root = cmath.sqrt(discriminant)\n", + " x1 = (-b + root) / (2 * a)\n", + " x2 = (-b - root) / (2 * a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Программный код выглядит несколько иначе, чем формула, потому\n", + "что мы начали вычисления с определения значения дискриминанта.\n", + "Если дискриминант равен `0`, мы знаем, что уравнение имеет\n", + "единственное действительное решение и можно сразу же вычислить его. В\n", + "противном случае мы вычисляем действительный или комплексный\n", + "квадратный корень из дискриминанта и находим два корня уравнения." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Start 3d block\n", + "equation = (\"{0}x\\N{SUPERSCRIPT TWO} + {1}x + {2} = 0\"\n", + " \" \\N{RIGHTWARDS ARROW} x = {3}\").format(a, b, c, x1)\n", + "if x2 is not None:\n", + " equation += \" or x = {0}\".format(x2)\n", + "print(equation)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы не использовали сколько-нибудь сложного форматирования, поскольку\n", + "форматирование, используемое по умолчанию для чисел с плавающей точкой\n", + "в языке Python, прекрасно подходит для этого примера, но мы\n", + "использовали некоторые имена Юникода для вывода пары специальных\n", + "символов.\n", + "\n", + "## `csv2html.py`\n", + "
\n", + "\n", + "Часто бывает необходимо представить данные в формате HTML. В этом\n", + "подразделе мы разработаем программу, которая читает данные из\n", + "файла в простом формате CSV (Comma Separated Value – значения,\n", + "разделенные запятыми) и выводит таблицу HTML, содержащую эти\n", + "данные. В составе Python присутствует мощный и сложный модуль\n", + "для работы с форматом CSV и похожими на него – модуль csv, но здесь\n", + "мы будем выполнять всю обработку вручную.\n", + "\n", + "В формате CSV каждая запись располагается на одной строке, а поля\n", + "внутри записи отделяются друг от друга запятыми. Каждое поле может\n", + "быть либо строкой, либо числом. Строки должны окружаться апострофами\n", + "или кавычками, а числа не должны окружаться кавычками, если они не\n", + "содержат запятые. Внутри строк допускается присутствие запятых, и они\n", + "не должны интерпретироваться как разделители полей. Мы будем исходить\n", + "из предположения, что первая запись в файле содержит имена полей. На\n", + "выходе будет воспроизводиться таблица в формате HTML с выравниванием\n", + "текста по левому краю (по умолчанию для HTML) и с выравниванием чисел\n", + "по правому краю, по одной строке на запись и по одной ячейке на поле.\n", + "\n", + "Ниже приводится маленький фрагмент файла с данными:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \"COUNTRY\",2000,2001,2002,2003,2004\n", + " \"ANTIGUA AND BARBUDA\",0,0,0,0,0\n", + " \"ARGENTINA\",37,35,33,36,39\n", + " \"BAHAMAS, THE\",1,1,1,1,1\n", + " \"BAHRAIN\",5,6,6,6,6\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Предположим, что данные находятся в файле\n", + "\"sample.csv\": \"src-datatype/sample.csv\" и выполнена комадна" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python csv2html.py < sample.csv > sample.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "тогда файл [sample.html](src-datatype/sample.html) должен содержать\n", + "примерно следующее:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
\"Country\"20002001200220032004
\"Antigua and Barbuda\"00000
\"Argentina\"3735333639
\"Bahamas, The\"11111
\"Bahrain\"56666
\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "На рис. показано, как выглядит полученная таблица в веб-броузере.\n", + "\n", + "\n", + "\n", + "
\n", + "![Таблица, произведенная программой csv2html.py, в броузере](fig-datatype/example_1.png)\n", + "\n", + "\n", + "Теперь, когда мы увидели, как используется программа и что она делает,\n", + "можно приступать к изучению программного кода.\n", + "\n", + "Последняя инструкция в программе – это простой вызов функции:" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Хотя в языке Python не требуется явно указывать точку входа в\n", + "программу, как в некоторых других языках программирования, тем не\n", + "менее является распространенной практикой создание в программе на\n", + "языке Python функции с именем `main()`, которая вызывается для\n", + "выполнения обработки. Поскольку функция не может вызываться до того,\n", + "как она будет определена, мы должны вставлять вызов `main()` только\n", + "после того, как данная функция будет определена. Порядок следования\n", + "функций в файле (то есть порядок, в котором они создаются) не \n", + "имеет значения.\n", + "\n", + "В программе `csv2html.py` первой вызываемой функцией является функция\n", + "`main()`, которая в свою очередь вызывает функции `print_start()` и\n", + "`print_line()`. Функция `print_line()` вызывает функции\n", + "`extract_fields()` и `escape_html()`.\n", + "\n", + "Когда интерпретатор Python читает файл, он начинает делать это с\n", + "самого начала. Поэтому сначала будет выполнен импорт (если он есть),\n", + "затем будет создана функция `main()`, а затем будут созданы остальные\n", + "функции – в том порядке, в каком они следуют в файле. Когда\n", + "интерпретатор, наконец, достигнет вызова `main()` в конце файла, все\n", + "функции, которые вызываются функцией `main()` (и все функции, которые\n", + "вызываются этими функциями), будут определены. Выполнение обработки,\n", + "как и следовало ожидать, начинается в точке вызова функции `main()`.\n", + "\n", + "Рассмотрим все функции по порядку, начиная с функции `main()`." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def main():\n", + " maxwidth = 100\n", + " print_start()\n", + " count = 0\n", + " while True:\n", + " try:\n", + " line = input()\n", + " if count == 0:\n", + " color = \"lightgreen\"\n", + " elif count % 2:\n", + " color = \"white\"\n", + " else:\n", + " color = \"lightyellow\"\n", + " print_line(line, color, maxwidth)\n", + " count += 1\n", + " except EOFError:\n", + " break\n", + " print_end()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Переменная `maxwidth` используется для хранения числа символов в\n", + "ячейке. Если поле больше, чем это число, часть строки отсекается и на\n", + "место отброшенного текста добавляется многоточие. Программный код\n", + "функций `print_start()`, `print_line()` и `print_end()` будет приведен\n", + "чуть ниже. Цикл while выполняет обход всех входных строк – это могут\n", + "быть строки, вводимые пользователем с клавиатуры, но мы предполагаем,\n", + "что данные будут перенаправлены из файла. Далее выбирается цвет фона и\n", + "вызывается функция `print_line()`, которая выводит строку в виде строки\n", + "таблицы в формате HTML." + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def print_start():\n", + " print(\"\")\n", + "\n", + "def print_end():\n", + " print(\"
\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы могли бы не создавать эти две функции и просто вставить\n", + "соответствующие вызовы `print()` в функцию `main()`. Но мы предпочитаем\n", + "выделять логику, так как это делает реализацию более гибкой, хотя\n", + "в этом маленьком примере гибкость не имеет большого значения." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def print_line(line, color, maxwidth):\n", + " print(\"\".format(color))\n", + " fields = extract_fields(line)\n", + " for field in fields:\n", + " if not field:\n", + " print(\"\")\n", + " else:\n", + " number = field.replace(\",\", \"\")\n", + " try:\n", + " x = float(number)\n", + " print(\"{0:d}\".format(round(x)))\n", + " except ValueError:\n", + " field = field.title()\n", + " field = field.replace(\" And \", \" and \")\n", + " field = escape_html(field)\n", + " if len(field) <= maxwidth:\n", + " print(\"{0}\".format(field))\n", + " else:\n", + " print(\"{0:.{1}} ...\".format(field, maxwidth))\n", + " print(\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Мы не можем использовать метод `str.split(\",\")` для разбиения каждой\n", + "строки на поля, потому что запятые могут находиться внутри строк в\n", + "кавычках. Поэтому мы возложили эту обязанность на функцию\n", + "`extract_fields()`. Получив список строк полей (в виде строк без\n", + "окружающих их кавычек), мы выполняем обход списка и создаем для \n", + "каждого поля ячейку таблицы.\n", + "\n", + "Если поле пустое, мы выводим пустую ячейку. Если поле было заключено в\n", + "кавычки, это может быть строка или число в кавычках, содержащее\n", + "символы запятой, например `\"1,566\"`. Учитывая такую возможность, мы\n", + "создаем копию поля без запятых и пытаемся преобразовать ее в число\n", + "типа `float`. Если преобразование удалось, мы определяем выравнивание\n", + "в ячейке по правому краю, а значение поля округляется до ближайшего\n", + "целого, которое и выводится. Если преобразование не удалось,\n", + "следовательно, поле содержит строку. В этом случае мы с помощью метода\n", + "`str.title()` изменяем регистр символов и замещаем слово «And» на слово\n", + "«and», устраняя побочный эффект действия метода \n", + "`str.title()`. Затем выполняется экранирование специальных символов\n", + "HTML и выводится либо поле целиком, либо первые `maxwidth` символов\n", + "с добавлением многоточия. Простейшей альтернативой использованию\n", + "вложенного поля замены в строке формата является получение \n", + "среза строки, например:" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(\"{0} ...\".format(field[:maxwidth]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Еще одно преимущество такого подхода состоит в том, что он требует\n", + "меньшего объема ввода с клавиатуры." + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def extract_fields(line):\n", + " fields = []\n", + " field = \"\"\n", + " quote = None\n", + " for c in line:\n", + " if c in \"\\\"'\":\n", + " if quote is None: # начало строки в кавычках\n", + " quote = c\n", + " elif quote == c: # конец строки в кавычках\n", + " quote = None\n", + " else:\n", + " field += c\n", + " # другая кавычка внутри строки в кавычках\n", + " continue\n", + " if quote is None and c == \",\": # end of a field\n", + " fields.append(field)\n", + " field = \"\"\n", + " else:\n", + " field += c\n", + " # добавить символ в поле\n", + " if field:\n", + " fields.append(field) # добавить последнее поле в список\n", + " return fields" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция читает символы из строки один за другим и накапливает\n", + "список полей, где каждое поле – это строка без окружающих ее\n", + "кавычек. Функция способна обрабатывать поля, не заключенные в кавычки,\n", + "и поля, заключенные в кавычки или в апострофы, корректно обрабатывая\n", + "запятые и кавычки (апострофы в строках, заключенных в кавычки, и\n", + "кавычки в строках, заключенных в апострофы)." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "def escape_html(text):\n", + " text = text.replace(\"&\", \"&\")\n", + " text = text.replace(\"<\", \"<\")\n", + " text = text.replace(\">\", \">\")\n", + " return text" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта функция просто замещает каждый специальный символ HTML\n", + "соответствующей ему сущностью языка HTML. В первую очередь, конечно,\n", + "мы должны заменить символ амперсанда и угловые скобки, хотя порядок не\n", + "имеет никакого значения. \n", + "\n", "\n", "\n", "\n", "\n", + "# Упражнения\n", + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Изменение вывода символов Юникода\n", + "
\n", + "\n", + "Измените программу `print_unicode.py` так, чтобы пользователь мог\n", + "вводить в командной строке несколько разных слов и получать\n", + "только те строки из таблицы символов Юникода, в которых содержатся все\n", + "слова, указанные пользователем. Это означает, что мы сможем вводить\n", + "такие команды:" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print_unicode_ans.py greek symbol" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**Подсказка.**\n", + "Один из способов достижения поставленной цели состоит в том,\n", + "чтобы заменить переменную `word` (которая может хранить `0`, `None` \n", + "или строку) списком `words`. Не забудьте изменить информацию о порядке\n", + "использования. В результате изменений не более десяти строк\n", + "программного кода добавится и не более десяти строк изменится.\n", + "\n", + "\n", + "Имя файла: `print_unicode_ans.py`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Изменение `quadratic.py`\n", + "
\n", + "\n", + "Измените программу `quadratic.py` так, чтобы она не выводила\n", + "коэффициенты со значением `0.0`, а отрицательные коэффициенты\n", + "выводились бы как `-n`, а не `+ - n`.\n", + "Имя файла: `quadratic_ans.py`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Использование функции `escape()`\n", + "
\n", + "\n", + "Удалите функцию `escape_html()` из программы `cvs2html.py` и\n", + "используйте вместо нее функцию `xml.sax.saxutils.escape()` из модуля \n", + "`xml.sax.saxutils`.\n", + "\n", + "\n", + "\n", + "**Подсказка.**\n", + "Для этого потребуется добавить одну новую строку\n", + "(с инструкцией `import`), удалить пять строк (с ненужной функцией)\n", + "и изменить одну строку (задействовать функцию\n", + "`xml.sax.saxutils.escape()` вместо `escape_html()`).\n", + "\n", + "\n", + "Имя файла: `cvs2html_ans1.py`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "## Добавление обработки параметров командной строки в `csv2html.py`\n", + "
\n", + "\n", + "Измените программу `cvs2html.py` еще раз и добавьте в нее новую\n", + "функцию с именем `process_options()`. Эта функция должна вызываться из\n", + "функции main() и возвращать кортеж с двумя значениями: \n", + "`maxwidth` (типа `int`) и `format` (типа `str`). При вызове функция\n", + "`process_options()` должна устанавливать `maxwidth` в значение по\n", + "умолчанию `100`, а строку `format` – в значение по умолчанию `\".0f\"`,\n", + "которое будет использоваться как спецификатор формата при выводе чисел.\n", + "Если пользователь вводит в командной строке `-h` или `--help`,\n", + "должно выводиться сообщение о порядке использования и возвращаться\n", + "кортеж `(None, None)`. (В этом случае функция `main()` ничего\n", + "делать не должна.) В противном случае функция должна прочитать\n", + "аргументы командной строки и выполнить соответствующие\n", + "присваивания. Например, устанавливать значение переменной `maxwidth`,\n", + "если задан аргумент `maxwidth=n`, и точно так же устанавливать \n", + "значение переменной `format`, если задан аргумент `format=s`. Ниже\n", + "приводится сеанс работы с программой, когда пользователь затребовал\n", + "инструкцию о порядке работы:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> csv2html2_ans.py -h\n", + " usage:\n", + " csv2html.py [maxwidth=int] [format=str] < infile.csv > outfile.html\n", + " maxwidth - необязательное целое число. Если задано, определяет\n", + " максимальное число символов для строковых полей. В противном случае\n", + " используется значение по умолчанию 100.\n", + " \n", + " format - формат вывода чисел. Если не задан, по умолчанию используется\n", + " формат \".0f\".\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "А ниже приводится пример командной строки, в которой установ-\n", + "лены оба аргумента:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> csv2html2_ans.py maxwidth=20 format=0.2f < mydata.csv > mydata.html\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "**Подсказка.**\n", + "Не забудьте изменить функцию `print_line()` так, чтобы она\n", + "использовала переменную `format` при выводе чисел – для этого вам\n", + "придется передавать функции дополнительный аргумент, добавить одну \n", + "строку и изменить еще одну строку. И это немного затронет функцию\n", + "`main()`. Функция `process_options()` должна содержать порядка\n", + "двадцати пяти строк (включая девять строк с текстом сообщения о\n", + "порядке использования).\n", + "\n", + "\n", + "Имя файла: `cvs2html_ans2.py`.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "\n", "\n", "\n", "\n", - "" + "\n", + "" ] } ], diff --git a/fig-collections/map_1.png b/fig-collections/map_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c43ea029476fc103f71c4c5e388bf188f72342 GIT binary patch literal 47206 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 z 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 literal 0 HcmV?d00001 diff --git a/fig-collections/seq_1.png b/fig-collections/seq_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed06453d0e03dd6608e3eff9fa43eb99ed886c75 GIT binary patch literal 14261 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

GQWqoM{NteB=%=%`ri)aj=rD9` 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 o \n", "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", "\n", - "Date: **Feb 22, 2020**\n", + "Date: **Feb 26, 2020**\n", "\n", "\n", "\n", "\n", "\n", "\n", - "\n", - "\n", "# Установка\n", "

\n", "\n", @@ -1462,8 +1460,7 @@ "![](fig-intro/jupyter_1.png)\n", "\n", "\n", - "### Jupyter Notebook\n", - "\n", + "## Jupyter Notebook\n", "
\n", "\n", "Кроме интерактивной консоли Jupyter также предоставляет веб-приложение\n", @@ -1529,7 +1526,7 @@ "сохраняются в формате JSON со специальным разрешением `ipynb`. Файл\n", "Jupyter Notebook не является чистым кодом на Python, но при\n", "необходимости код на Python можно легко выделить из блокнота используя\n", - "либо меню «File ➤ Download as ➤ Python» или с помощью утилиты\n", + "либо меню **File | Download as | Python** или с помощью утилиты\n", "`nbconvert`.\n", "\n", "\n", @@ -1581,8 +1578,6 @@ "\n", "
\n", "\n", - "\n", - "\n", "Используя меню и панель инструментов, ячейки можно добавлять,\n", "удалять, перемещать вверх и вниз, вырезать и вставлять и т.д. Эти\n", "функции также связаны с сочетаниями клавиш, которые удобны и\n", @@ -1599,11 +1594,9 @@ "доступными через панель инструментов и меню. \n", "\n", "\n", - "\n", - "
\n", "\n", + "## Таблица 1 : Клавиши
\n", "\n", - "**Таблица 1.** \n", "\n", "\n", "\n", @@ -1624,19 +1617,19 @@ "\n", "\n", "\n", - "\n", + "\n", "\n", "\n", "\n", "\n", "
Enter Войти в режим редактирования ячейки
Escape Выйти из режима редактирования ячейки
Shift-Enter Выполнить ячейку
h Показать окно помощи со списком сочиетаний клавиш
h Показать окно помощи со списком сочетаний клавиш
0-0 Перезапустить ядро
i-i Прервать выполнение ячейки
s Сохранить блокнот
\n", - "\n", + "\n", "\n", "Во время выполнения ячейки блокнота номер ячейки обозначается\n", "звездочкой (`In [*]`), а индикатор в правом верхнем углу страницы\n", "сигнализирует о том, что ядро IPython занято. Прервать выполнение\n", - "ячейки можно через меню «Kernel ➤ Interrupt» или сочетанием клавиш\n", - "`i-i` в командном режиме (т.е., дважды нажать клавишу `i`). В таблице 1\n", + "ячейки можно через меню **Kernel | Interrupt** или сочетанием клавиш\n", + "`i-i` в командном режиме (т.е., дважды нажать клавишу `i`). В таблице [table:1](#table:1)\n", "представлены наиболее популярные сочетания клавиш командного режима\n", "Jupyter Notebook.\n", "\n", @@ -2050,7 +2043,7 @@ "\n", "Каждую панель можно настроить для отображения или скрытия в\n", "зависимости от предпочтений и потребностей пользователя, используя\n", - "меню «View ➤ Panes». \n", + "меню **View | Panes**.\n", "\n", "### Редактор исходного кода\n", "\n", @@ -2097,8 +2090,8 @@ "поскольку она позволяет исследовать значения переменных после\n", "завершения выполнения сценария. Spyder поддерживает одновременное\n", "открытие нескольких консолей Python и IPython, и, например, новую\n", - "консоль IPython можно запустить через меню «Consoles ➤ Open an IPython\n", - "console». При запуске сценария из редактора нажатием клавиши F5 или\n", + "консоль IPython можно запустить через меню **Consoles | Open an IPython\n", + "console**. При запуске сценария из редактора нажатием клавиши F5 или\n", "кнопки запуска на панели инструментов сценарий по умолчанию\n", "запускается в самой последней активированной консоли. Это позволяет\n", "поддерживать разные консоли с независимыми пространствами имен для\n", diff --git a/src-datatype/csv2html.py b/src-datatype/csv2html.py new file mode 100644 index 0000000..6043b61 --- /dev/null +++ b/src-datatype/csv2html.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +def main(): + maxwidth = 100 + print_start() + count = 0 + while True: + try: + line = input() + if count == 0: + color = "lightgreen" + elif count % 2: + color = "white" + else: + color = "lightyellow" + print_line(line, color, maxwidth) + count += 1 + except EOFError: + break + print_end() + +def print_start(): + print("") + +def print_end(): + print("
") + +def print_line(line, color, maxwidth): + print("".format(color)) + fields = extract_fields(line) + for field in fields: + if not field: + print("") + else: + number = field.replace(",", "") + try: + x = float(number) + print("{0:d}".format(round(x))) + except ValueError: + field = field.title() + field = field.replace(" And ", " and ") + field = escape_html(field) + if len(field) <= maxwidth: + print("{0}".format(field)) + else: + print("{0:.{1}} ...".format(field, maxwidth)) + print("") + +def extract_fields(line): + fields = [] + field = "" + quote = None + for c in line: + if c in "\"'": + if quote is None: # начало строки в кавычках + quote = c + elif quote == c: # конец строки в кавычках + quote = None + else: + field += c + # другая кавычка внутри строки в кавычках + continue + if quote is None and c == ",": # end of a field + fields.append(field) + field = "" + else: + field += c + # добавить символ в поле + if field: + fields.append(field) # добавить последнее поле в список + return fields + +def escape_html(text): + text = text.replace("&", "&") + text = text.replace("<", "<") + text = text.replace(">", ">") + return text + + +main() diff --git a/src-datatype/csv2html.py~ b/src-datatype/csv2html.py~ new file mode 100644 index 0000000..b4d4ce4 --- /dev/null +++ b/src-datatype/csv2html.py~ @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +def main(): + maxwidth = 100 + print_start() + count = 0 + while True: + try: + line = input() + if count == 0: + color = "lightgreen" + elif count % 2: + color = "white" + else: + color = "lightyellow" + print_line(line, color, maxwidth) + count += 1 + except EOFError: + break + print_end() + +def print_start(): + print("") + +def print_end(): + print("
") + +def print_line(line, color, maxwidth): + print("".format(color)) + fields = extract_fields(line) + for field in fields: + if not field: + print("") + else: + number = field.replace(",", "") + try: + x = float(number) + print("{0:d}".format(round(x))) + except ValueError: + field = field.title() + field = field.replace(" And ", " and ") + field = escape_html(field) + if len(field) <= maxwidth: + print("{0}".format(field)) + else: + print("{0:.{1}} ...".format(field, maxwidth)) + print("") + +def extract_fields(line): + fields = [] + field = "" + quote = None + for c in line: + if c in "\"'": + if quote is None: # начало строки в кавычках + quote = c + elif quote == c: # конец строки в кавычках + quote = None + else: + field += c + # другая кавычка внутри строки в кавычках + continue + if quote is None and c == ",": # end of a field + fields.append(field) + field = "" + else: + field += c + # добавить символ в поле + if field: + fields.append(field) # добавить последнее поле в список + return fields + +def escape_html(text): + text = text.replace("&", "&") + text = text.replace("<", "<") + text = text.replace(">", ">") + return text + +if __name__ == '__main__': + main() diff --git a/src-datatype/print_unicode.py b/src-datatype/print_unicode.py new file mode 100644 index 0000000..f69c980 --- /dev/null +++ b/src-datatype/print_unicode.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +import sys +import unicodedata + +def print_unicode_table(word): + print("decimal hex chr {0:^40}".format("name")) + print("------- ----- --- {0:-<40}".format("")) + + code = ord(" ") + end = sys.maxunicode + + while code < end: + c = chr(code) + name = unicodedata.name(c, "*** unknown ***") + if word is None or word in name.lower(): + print("{0:7} {0:5X} {0:^3c} {1}".format(code, name.title())) + code += 1 +# End print_unicode_table + +# Start main script +word = None + +if len(sys.argv) > 1: + if sys.argv[1] in ("-h", "--help"): + print("usage: {0} [string]".format(sys.argv[0])) + word = 0 + else: + word = sys.argv[1].lower() + +if word != 0: + print_unicode_table(word) + +#End main script diff --git a/src-datatype/print_unicode.py~ b/src-datatype/print_unicode.py~ new file mode 100644 index 0000000..4fbbac7 --- /dev/null +++ b/src-datatype/print_unicode.py~ @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +import sys +import unicodedata + +def print_unicode_table(word): + print("decimal hex chr {0:^40}".format("name")) + print("------- ----- --- {0:-<40}".format("")) + + code = ord(" ") + end = sys.maxunicode + + while code < end: + c = chr(code) + name = unicodedata.name(c, "*** unknown ***") + if word is None or word in name.lower(): + print("{0:7} {0:5X} {0:^3c} {1}".format(code, name.title())) + code += 1 + + +word = None + +if len(sys.argv) > 1: + if sys.argv[1] in ("-h", "--help"): + print("usage: {0} [string]".format(sys.argv[0])) + word = 0 + else: + word = sys.argv[1].lower() + +if word != 0: + print_unicode_table(word) diff --git a/src-datatype/quadratic.py b/src-datatype/quadratic.py index 505b345..77bcc69 100644 --- a/src-datatype/quadratic.py +++ b/src-datatype/quadratic.py @@ -18,6 +18,7 @@ def get_float(msg, allow_zero): return x # End get_float + # Start 1st block print("ax\N{SUPERSCRIPT TWO} + bx + c = 0") a = get_float("enter a: ", False) @@ -34,7 +35,7 @@ if discriminant == 0: else: if discriminant > 0: root = math.sqrt(discriminant) - else: # discriminant < 0 + else: # discriminant < 0 root = cmath.sqrt(discriminant) x1 = (-b + root) / (2 * a) x2 = (-b - root) / (2 * a) diff --git a/src-datatype/quadratic.py~ b/src-datatype/quadratic.py~ new file mode 100644 index 0000000..505b345 --- /dev/null +++ b/src-datatype/quadratic.py~ @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +import cmath +import math +import sys + +# Start get_float +def get_float(msg, allow_zero): + x = None + while x is None: + try: + x = float(input(msg)) + if not allow_zero and abs(x) < sys.float_info.epsilon: + print("zero is not allowed") + x = None + + except ValueError as err: + print(err) + return x +# End get_float + +# Start 1st block +print("ax\N{SUPERSCRIPT TWO} + bx + c = 0") +a = get_float("enter a: ", False) +b = get_float("enter b: ", False) +c = get_float("enter c: ", False) +# End 1st block + +# Start 2d block +x1 = None +x2 = None +discriminant = (b ** 2) - (4 * a * c) +if discriminant == 0: + x1 = -(b / (2 * a)) +else: + if discriminant > 0: + root = math.sqrt(discriminant) + else: # discriminant < 0 + root = cmath.sqrt(discriminant) + x1 = (-b + root) / (2 * a) + x2 = (-b - root) / (2 * a) +# End 2d block + +# Start 3d block +equation = ("{0}x\N{SUPERSCRIPT TWO} + {1}x + {2} = 0" + " \N{RIGHTWARDS ARROW} x = {3}").format(a, b, c, x1) +if x2 is not None: + equation += " or x = {0}".format(x2) +print(equation) +# End 3d block diff --git a/src-datatype/sample.csv b/src-datatype/sample.csv new file mode 100644 index 0000000..91c5949 --- /dev/null +++ b/src-datatype/sample.csv @@ -0,0 +1,5 @@ +"COUNTRY",2000,2001,2002,2003,2004 +"ANTIGUA AND BARBUDA",0,0,0,0,0 +"ARGENTINA",37,35,33,36,39 +"BAHAMAS, THE",1,1,1,1,1 +"BAHRAIN",5,6,6,6,6 \ No newline at end of file diff --git a/src-datatype/sample.csv~ b/src-datatype/sample.csv~ new file mode 100644 index 0000000..91c5949 --- /dev/null +++ b/src-datatype/sample.csv~ @@ -0,0 +1,5 @@ +"COUNTRY",2000,2001,2002,2003,2004 +"ANTIGUA AND BARBUDA",0,0,0,0,0 +"ARGENTINA",37,35,33,36,39 +"BAHAMAS, THE",1,1,1,1,1 +"BAHRAIN",5,6,6,6,6 \ No newline at end of file diff --git a/src-datatype/sample.html b/src-datatype/sample.html new file mode 100644 index 0000000..4f713a6 --- /dev/null +++ b/src-datatype/sample.html @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
"Country"20002001200220032004
"Antigua and Barbuda"00000
"Argentina"3735333639
"Bahamas, The"11111
"Bahrain"56666
diff --git a/src-datatype/sample.html~ b/src-datatype/sample.html~ new file mode 100644 index 0000000..4f713a6 --- /dev/null +++ b/src-datatype/sample.html~ @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
"Country"20002001200220032004
"Antigua and Barbuda"00000
"Argentina"3735333639
"Bahamas, The"11111
"Bahrain"56666

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 j!r!q6clq4Wn*5%>|4CXxLHy%=J@5Yl*|vIy literal 0 HcmV?d00001 diff --git a/fig-datatype/example_1.png b/fig-datatype/example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4e14ad0322ebded2e604b79fc6b952daf72358d7 GIT binary patch literal 11461 zcmai)1yG#bx}`td0|aXb79hC0LxKl)cXtTx7Ob%lBtUR?_u%dXcWW#-jRqh7bEoRw zb7rPyS6fx@{%ZHG?)|Ryyem>kK?(zv2o(ST3>j&06##%SeSIB>4Ey@1jFiRv`h?;n zt?dE;Z~FeZ!z3}hc?SUGfQkz-po87#g7IV2-qA7KO|VefIfRbctfT-4eB!~GFAzq4fcPGsK3?1t ztL8UDarZywVZy`Kun(z_V?`u=Ooj~-EsqZMdfme2wSB{aD7i>EqKDvx3o+;UAY`OV zFd65eBfa)Q}g@)on$e_YKQDe1^ai5qgPpc|FV(VaF z|Mig24%y4d-Vz?>z~OQwU0|$yP?OU6sOF!zR0k0W;DT%;*>Anbhq5-ab2ZYKL85GT zQQrA#z9F&EvDM+H)~RD+I}`G{%`Nu?v{zG~sr#O%9xCEiUus>TXq?tsmDTE)5~wYN=ZnF!=Rc$?8%-qza5$9C3m6=wEy|pg&#OwQY1i7-Mq%)L?JY(i0J$ z^6bpCdsxp(TTQt?N!~jQN0I+9&SE>rz?QI9!h~ zG7i};y1nbCy!qU1w-=ivY`h;=!k0JJcXOXsrW8Bt+~t>?s?u^?{RqL>HZ4!68cYZ$ zyY{E`_I(OYOQ(IgPeXWc!0%f>=PP=ub`q=_zx57>o2A=JcG&WC`ndjCr-^_7KbIvO zlO#Mz#+_FGOCK4LfVdZ(TK;Qw{2JWg8f18g02GH0_vd*WM4Jw?^ z{AWY6?ajm6ua`5E?jsvj>NR4YaA|@vaGt%-8OHp4U*c}3&!1u;se@{evzq?)w5&mfp4c4G#^W0afy#iqDPFtVl#`?Bb`OUc%)`nm zp*4T-r4a*(hAy2B!=OJnb|pj0#atovk8y{Co>=ft!6ws_oWV!4OHe;{oy|M9~H+~w`B3AIC)VVQ^e_yEeg?0D?RJ?*5|s<>M(W# z8gV;3tP*EU-T?52jQG+&M5a#7xQ`uu?RN|O3C1ccFq1$HEbrZwFcPKUETlPz^j|yX zHGDa);9c7&5}dz~e^}6jeL2rqU$;-6##?h5S=z5}jWWMhlxg}+3`1R1uHb9siui=j zZ|V@<+E&|(A*t5H6nBb`EAT*&XCHJs*X1OHwKZiru+#cSIjoC=|^X01O5bC~mz0~$;eZpPn zjF}(NF5-6R1}O-%c`Vn(=&qI4ny4++iR^p43{9<72^<+6yEA}oy`^SoHbqk(o-Rc6 z?*Go;y7-(RjmLDf(iOgFbRqlm|7i6zmqr2ru|wnYU6OTFKm_8ju`0s*+s#J~x?ro) zKFsMZ#djlwK#e2F`Mxl`(>hkSi?bXeRl)^^BupyM5S012%ZGF^ ztt2Fv2v$BcR3Bb4gi>l5RfeVw2QXLukx z9O1;i^g;IuLCp8>WL&e&tZMyKn5!om z&=QJh>NZ;9%I7lUtL~@PO2^2qtPZ{nnUx-)5z7R|rlen?5!wUHj~nxe-4BK9IUIF# z^AeK2e{6f75ndy>