[Конспект] Python 3
Основы
Python — интерпретируемый язык. Его можно встраивать в C/C++ программы. Официальное руководство говорит, чтобы исполняющиеся скрипты создавались посредством bash.
Затем задать права chmod a+x hello.py и добавить в PATH (PATH=$PATH:DIRNAME)
Для получения справки используется встроенная функция help.
Комментарии со знака решетки
Числа
Числа бывают целые, с плавающей точкой и комплексные с помощью j
Дробные литералы MEp, где M - мантисса, E - E, p - порядок
Двоичные объявляются через 0b. Восьмиричные объявляются с нуля и латинской буквы «o», 0o. Шестнадцатеричные объявляются через 0x. Для операций с действительной дочностью используются объекты Decimal и модуля decimal.
Для дробей используется тип Fraction из модуля fractions.
Функции преобразования int (с системой счисления), float, bin, oct, hex, round (с количеством точек после запятой), abs, pow, max, min, sum (последовательность), div (возвращает кортеж x// y, x%y).
У типа float усть методы методы is_integer, as_integer_ration — возвращает кортеж числителя и знаменателя дроби.
Строки
Строки указываются в одинарных и двойных кавычках, они никак не отличаются.
Тройные двойные или одинарные кавычки действуют как HEREDOC.
Объединить строки можно поставив их одну за одной. print(“Hello” “ “ “World”) Вывод с помощью print. Ввод с помощью input.
Точка с запятой нежелательна
Метод format позволяет составить строку на основе каких-либо данных.
А так же с уточнениями. (см. http://www.python.org/dev/peps/ pep-3101) Все строки в UTF-8. Для объявления кодировки применяется специальный комментарий
Строки позволяют работать с ними, как с коллекциями, то есть выбирать символ и брать срезы.
bytes
и bytearray
являются строковыми типами данных. Чтобы использовать несколько строк в одной, необходимо использовать слэш.
Для использования слэша в конце строки, его необходимо экранировать.
Что отлючить спецсимволы в строке, нужно перед строкой разместить модификатор r.
Если строку не передать в аргумент, то она автоматически попадет в переменную doc текущего объекта. Строка — неизменяемая последовательность, можно получить символ по индексу, но нельзя изменить. Узнать длину строки можно с помощью функции len.
Операция умножения повторяет строку, а in и not in осуществляет проверку на вхождение.
Оператор форматирования - это процент. Специальная строка имеет формат %[key][flag][width][.accuracy]<type>
.
key
— ключ словаря, тогда правым операндом должен быть передан словарь.flag
— флаг преобразования#
— восьмиричное значение0x
— количество ведущих нулей-
— выравнивание по левой границепробел
— вставляет пробел перед положительным числом+
— обязательный ввод знака для положительных и отрицательных чисел
width
— минимальная ширина поляaccuracy
— количество знаков после точки для вещественных чисел. Можно указать как * и передать значения внутри кортежа.type
- тип преобразованияs
— строкаr
— строка с помощью repra
— строка с помощью asciic
— символd
,i
— целое числоo
- восьмиричноеx
,X
- шестнадцатиричное в нижнем и верхнем регистреf
иF
— вещественное числоe
иE
— вещественное число в экспоненциальной формеg
иG
— вещественное чсило в наиболее короткой форме
В качестве альтернативы используется метод format. Для этого метода символы {} являются специальными, вместо них подставляются соответствующие аргументы.
Аргументы могут быть именованными или же являться словарем.
Внутри специальной строки можно получить доступ к элементам массива.
Через восклицательный знак можно указать функцию-обработчик.
- s
- str
- r
- repr
- a
- ascii
В конце через двоеточие можно указать форматирование в формате. - Заполнитель с выравниванием по левому (<) и правому (>) краю, или по-центру (^).
-
Минимальную ширину строки.
- Указать знак для чисел.
+
— с выводом всех знаков,-
— только отрицательных,пробел
— пробел для положительных. - Указать преобразование.
b
— двоичное число. print(““.format(100)) # 1100100c
— целое число в символ print(““.format(47)) # /d
— десятичное числоn
— как d, но учитывает настройки локалиo
— восьмиричное числоx
— шестнадцатеричное значение в нижнем регистреX
— шестнадцатеричное значение в верхнем регистреf
иF
— вещественное число в десятичном представленииe
иE
— вещественное число в экспоненциальном представленииg
иG
— f или e, что будет короче%
— преобразует в процент Строки имеют следующие методы.
expandtabs
— заменяет символы табуляции на пробелы (можно указать количество пробелов).center
- выравнивает строку по центру внутри поля указанной длины.ljust/rjust
— выравнивает строку по левому/правому краю внутри поля указанной длины.zfill
— выравнивает строку по правому краю внутри поля указанной длины, дополняя 0.strip
— удаляет символы с начала и конца строки (если аргумент не передан, то пробельные символы).lstrip
, rstrip — удаление символов слева/справа.split
— разбивает строку по указанному разделителю.rsplit
— тоже, но поиск разделителя справа-налево.splitlines
— разбивает строку на подстроки. Если передать False, то в результате будет только первая строка.partition
— находит первое вхождение символа-разделителя и возвращает кортеж из фрагмента перед разделителем, разделитель и фрагмент после.rpartition
— тоже, но поиск справа-налево.join
— преобразует последовательность в строку.upper
— в верхний регистр.lower
— в нижний регистр.swapcase
— меняет регистр местами.capitalize
— первая буква в верхний регистр.title
— первая буква каждого слова в верхний регистр.casefold
— как и lower, но преобразует диактрические знаки в латиницу.find
— ищет подстроку в строке.index
— тоже, что и find, но с исключением.rfind
— find справа-налево.rindex
— тоже для index.count
— количество вхождений подстроки в строку.startswith
— начинается ли строка с подстроки.endswith
— заканчивается ли строка с подстроки.replace
— заменяет все подстроки, входящие в строку.translate
— заменяет все символы в соответствии с таблицей символов. В качестве ключей код символа.maketrans
— статический метод, помогающий создать таблицу символов.isalnum
— проверяет, что строка собержит только буквы и цифры.isalpha
— только буквы.isdigit
— только цифры.isdecimal
— только десятичные цифры.
- Указать знак для чисел.
Определить кодировку можно с помощью метода detect модуля chardet
.
Bytes и bytearray
Эти типы данных подходят для обработки изображений. Можно создать с помощью одноименных функций, передав последовательность или челое число для инициализации последовательности переданной длины. Bytes можно создать, начав строку с b.
Есть методы append, extend, insert, pop, remove, reverse, decode. Метод decode преобразует в указанную кодировку. С помошью модуля pickle (методы dumps и loads) можно сериализовать и десериализовать объекты в последовательность байтов.
Взаимодействие с файловой системой
Открыть файл можно с помощью функции open.
Метод readline возвращает текущую строку. Метод close закрывает файл. Чтобы записать в файл используется функция print с аргументом file. Но для этого необходимо открыть файл в режиме записи (аргумент mode).
Также для записи существует метод write.
Для записи/чтения из стандартного потока используются объекты sys.stdout и sys.stdin
Типы данных
bool
- логический.NoneType
- отсутствие значение. Объявляется как None.int
- целое число. Ограничено оперативной памятью.float
- число с плавающей точкой.complex
- комплексное число.str
- строка.bytes
- неизменяемая последовательность байтов.bytearray
- изменяемая последовательность байтов.list
- список. Последовательность.tuple
- кортежи.range
- диапазон. От и до для чисел.dict
- словарь. Ассоциативный массив.set
- множество. Набор уникальных значений.frozenset
- неизменяемое множество. Набор уникальных значений. ellipsis - обозначается тремы точками.function
- функция.module
- модуль.type
- сами типы являются этим типом.
Определить тип можно с помощью функции type.
Приведение типов производится с помощью одноименной с типов функции. Чтобы проверить тип данных, нужно сравнить результат функции type и имени типа.
Преобразование типов
Преобразования к строке производится с помощью функций str
, repl
, ascii
и format
.
Преобразования с помощью методов str
, int
.
Остальное
Переменные объявляются с определения.
При присваивании в переменной хранится ссылка на объект, а не сам объект. Это необходимо учитывать при групповом присваивании.
Python кэширует малые числа и строки, так что они ссылаются на одну облать в памаяти. Чтобы узнать, что переменные ссылаются на один и тот же объект используется оператор is.
Обратной операцией является is not.
Количество ссылок можно узнать с помощью функции getrefcount модуля sys.
Как только количество ссылок равно нулю, область памяти очищается. Список ключевых слов можно найти в модуле keyword.kwlist. Встроенные идентификаторы можно переопределить. Все типы являются объектами. Логическая строка в Python — одна инструкция. По-умолчанию одна строка — одна инструкция. Чтобы разместить на одной физической строке несколькое логических используется точка с запятой. Чтобы разбить логическйю строку на физические используется обратный слэш.
Логическими типами являются True и False. В Python крайне важны отступы. Набор предложений, идущих одно за одним, с одинаковыми отступами называется блоком. Блоки высокого уровня указывают на вложенные с помощью двоеточия. Для использования пустого блока используется оператор pass.
Удаление происходит с помощью оператора del.
Регулярные выражения
Регулярные выражения лежат в модуле re. Создать регулярное выражение можно с помощью функции compile
.
Первым аргументом является регулярное выражение, а вторым флаги.
L
— учитывать настройки локали.I
— ignorecaseM
— поиск в строке, состоящей из нескольких строк.S
— включить, что точка — любой символ, ^ — начало строки, $ — конец строки.X
— пробельные символы и переноса строки будут проигнорированы. Добавляет возможность комментариев.A
— символы \w \W \d и прочие теряют свое предназначение.
Методы.
match
— проверяет соответствие с началом строки.search
— проверка на соответствие.fullmatch
— соответствие строки целиком.findall
- ищет все совпадения.findinter
— возвращает итератор.sub
— осуществляет замену.split
— разбивает по шаблону.
Эти методы возвращают объект типа Match. Он имеет полезные методы и свойства.
re
— ссылка на регулярное выражение. У регулярного выражения имеются свойства.groups
— количество групп в шаблоне.groupindex
— словарь с именами и номерами групп.pattern
— строка регулярки.flags
— флаги.
string
— переданная строка, в которой происходит поиск.pos
и endpos — значения одноименных аргументов в функциях, которые были использованы (match или search).lastindex
— номер последней совпавшей группы или None.lastgroup
— для именованных групп.group(index)
— фрагмент совпавшей группы.groupdict
— словарь с группами и их значениями.groups
— все группы.expand
— производит замену в строку.
Всем методам есть одноименные функции. Также есть функция escape
, которая экранирует переданную строку.
Операторы и выражения
Стандартные + - / * % и дополнительные ** (возведение в степень) и // (целая часть от деления)
Побитовые « » & (and) | (or) ^ (xor) ~ (not)
Логические not
or
and
Математические операции присваивания могут быть в краткой форме.
Все операторы левоассоциативны. Оператор in проверяет на вхождение в последовательность.
Оператор not in проверяет на НЕ вхождение в последовательность.
Условные операторы
Булевое значение возвращают операторы <, >, ==, != или <>, <=, =>, is, is not, in, not in Оператор if называется if-{block}.
Используется вместе с необязательными elif-{block} и else-{block}
Есть цикл while-{block} для обхода последовательностей.
Может использоваться с else-{block}. Он выполнится, если не было операции break.
Цикл for-in-{block} также может использовать else-{block}. Цикл позволяет обходить коллекции.
Для прерывания цикла используется break, а для перехода к следующей итерации continue
Функции
Именные функции
Объявляется с помощью ключевого слова def
.
Область видимости локальна. Глобальныю переменную можно указать с помощью global
.
Функции можно вкладывать друг в друга. Чтобы указать переменную как переменную из внешней фукнции используется ключевое слово nonlocal
.
Функция globals
возвращает словарь глобальных переменных, а locals
— локальных.
Значения аргументов по-умолчанию через знак равенства.
Параметры могут быть ключевыми. То есть при вызове можно указать имя параметра.
Можно определить функции с переменным числом параметров с помощью одинарной и двойной звездочки.
При этом из переменной, объявленной с одной звездочкой, будет образован кортеж, а с двумя — словарь. Чтобы объявить параметр, доступный только по ключу, его необходимо объявить после параметра со звездочкой.
Можно комбинировать все эти типы параметров. Для возвращения значения используется return
.
Функция модет возвращать кортеж для дальнейшей распаковки. Указать тип аргумента можно через двоеточие, а возвращаемый тип с помощью стрелочки после объявления функции.
Если начать функцию со строки, то она поместиться в свойство __doc__
и будет доступна при вызове help.
Функции тоже являются объектом, поэтому их можно передать.
Для того, чтобы распаковать кортеж или список в аргументы, используется звездочка.
Для того, чтобы распаковать словарь как имя аргумента и изначение используются двойные звездочки.
Анонимные функции
Анонимные функции называются лямбда-функциями. Объявляются как lambda param1..paramN: returnvalue
Как и в обычных функциях, параметры могут быть необязательными. Подобно обычным функциям могут буть многострочными.
Функции-генераторы
Функция-генератор возвращает новое вычисляемое значение для каждой итерации. Они поддерживают метод next.
Значение, которое возвращается для новой итерации стоит после ключевого слова yield
.
Из одной функции генератора можно вернуть результат другой функции-генератора с помощью yield from
.
Тогда сначала выполнится первая итерация верхней функции, а так для результата каждый из вложенной.
Декораторы функций
Python имеет встроенную поддрежку декорирования функций. Для этого необходимо объявить функцию, которая будет выступать декоратором (она принимает и возвращает декорируемую в качестве аргумента), а затем имя этой функции использовать в качестве аннотации к декорируемой.
Может быть более одной функции-декоратора. Вызов идет снизу вверх по объявленным декораторам.
Чтобы перехватить аргументы, функция декоратор должна возвращать третью функцию, которая ожидает аргументы.
Вложенные функции
Функции можно вкладывать одну в другую. Внутренняя функция имеет доступ ко всем переменным внешней, но при этом не может их изменять.
Чтобы изменять функцию, нужно указать её как nonlocal
.
Аннотации функций
Функции могут содержать аннотации. С помощью них можно указать данные какого типа принимает функция, предназначение параметров и тип возвращаемого значения.
Аннотации к аргументу ставятся через двоеточие после имени аргумента (если есть значение по-умолчанию, то оно ставится после аннотации).
Аннотации к аргументу вызываются перед вызовом функции и сохраняются в свойство __annotation__
(словарь) по ключу, который является именем функции.
Аннотация к возвращаемому значению ставится через ->
, вызываeтся перед вызовом функции и хранится по ключу return.
Модули
Модулем называется файл с функциями, который можно импортировать с помощью команды import
.
Это могут быть файлы с расширением .py
, написанные на C модули или же один из встроенных модулей Python.
Импорт модулей — дорогостоящая операция, чтобы быстро импортировать модули, то необходимо перевести их в байт-код. Такие файлы имеют расширение .pyc
.
Можно импортировать только определенные переменные, а также сразу задать им псевдонимы с помощью команды from-import-as
.
Каждый модуль имеет имя в переменной __name__
.
По-умолчанию модуль называется __name__
.
Чтобы определить собственный модуль необходимо создать файл с расширением .py
.
Модуль должен лежать в том же каталоге, где он импортируется, либо в одном из каталого sys.path
.
Чтобы импортировать все публичные методы и свойства модуля используется звездочка.
Функция dir
возвращает список всех идентификаторов для аргумента.
Без аргументов возьмется текущий модуль.
Пакетом называется каталог с модулями и специальным файлом __init__.py
, который сообщает Python, что каталог является пакетом.
Доступ к модулям пакета осуществляются с помощью точек package1.package2.module
.
Чтобы импортировать модуль, который расположен в том же каталоге, необходимо имя модуля начать с точки.
Чтобы обратиться к родительсткому пакету используется две точки.
Файл __init__.py
должен быть либо пустым, либо иметь код, который будет выполнятся при первом импорте из пакета.
Он может содержать.
- Переменную __all__
, которая является списком имен модулей, которые можно загрузить с помощью from package import *
.
- Можно использовать импорты, которые будут доступны как from package import *
.
Чтобы повторно загрузить модуль необходимо воспользоваться функцией reload
из модуля imp
.
Структуры данных
Последовательности
К последовательностям относятся str
, list
, tuple
, range
, bytes
и bytearray
.
Python поддерживает позиционное присваивание.
С его помощью можно поменять значения местами.
На самом деле правая часть позиционного присваивания неявно приводится к кортежу. По обе стороны могут находится любые последовательности. Чтобы передать в переменную несколько значений сразу используется звездочка, чтобы проигнорировать значение — нижнее подчеркивание.
Все указанные последовательности и строки обладают дополнительными свойствами сабскрипта. Отрицательный индекс берет значения с конца.
Брать срезы слева-направо, справа-налево с помощью двоеточия. Указать можно от начала или до конца.
При этом правое значение является не включительным.
Можно указать шаг через еще одно двоеточие.
При полной вырезке создается копия, а не ссылка. При присваивании же создается ссылка.
При итерировании последовательностей используется метод __next__
или функция next
. Для всех последовательностей возвращается значение. А для словаря — значение ключа, так как словарь является отображением, а не последовательностью. Функция enumerate
возвращает итератор, который на каждый вызов next возвращает кортеж ключ/значение.
Для объединения последовательностей одного типа используется оператор +
.
Функция map
принимает функцию и последовательность, потом применяет функцию к каждому элементу.
Функция zip
на каждой итерации возвращает кортеж элементов переданных последовательностей, которые находятся на одинаковом смещении.
Функция filter
принимает функцию и последовательность, потом фильтрует последовательность с учетом переданной функции. Функция reduce принимает функцию и последовательность и/или начальное значение, потом сводит последовательность к единому значению с помощью переданной функции.
Существуют методы append
, extend
, insert
, pop
, remove
, clear
, index
, count
, reverse
, reversed
, shuffle
, sort
, join
.
Функции min
, max
, any
.
Список
Список — содержит упорядоченный набор элементов. Задается с помощью квадратных скобок.
Метод append
добавляет элемент в конец списка.
Метод insert
добавляет элемент на указанную позицию.
Метод sort
сортирует список.
Получить элемент можно с помощью сабскрипта из квадратных скобок.
Чтобы создать пустой список используются пустые скобки или фукнция list
.
Создать список можно также из генератора списков.
Кортеж
Кортежи похожи на списки, но при этом они неизменяемы. Отличие так же в том, что объявляется в круглых скобках.
Python распознает кортежи, даже если они не залючены в скобки.
Кортеж можно распаковать в несколько переменных.
Чтобы получить кортеж с одним элементом нужно поставить после него запятую, иначе Python распознает просто скобки.
Range
Для цикла используется тип range
. Но он создает все элементы сразу, так что для тонких мест следует использовать xrange
, который создает поток.
Диапазон имеет методы index
, который возвращает индекс указанного элемента или возбуждает исключение ValueError, а также count
, который возвращает количество элементов с переданным значением.
Множество
Чтобы использовать математические операции над множествами используется класс set
.
Значения в множестве неупорядочены, но они не могут повторяться.
Для таких множеств определены операции & | и ^ -.
Проверить вхождение ключа можно с помощью оператора in
.
Для добавления одного элемента используется метод add
, а для добавления списка метод update
.
Можно применять функции сравнения ==
равенство, <=
левое подмножество правого, < > >=.
Метод isdisjoint
проверяет, что пересечение множеств пусто.
Неизменяемое множество — frozenset
.
Словарь
Словарь — ассоциативный массив, указывается в фигурных скобках, ключ и значение через двоеточие.
Для обхода в цикле с использованием ключей, необходимо указать ключи и значение через запятую с вызовом метода .items()
.
Чтобы создать пустой словарь используются пустые скобки или фукнция dict
.
Наличие элемента проверяется с помощью оператора in.
Для получения списка ключей используется преобразование в список.
Функия dict создает словарь из кортежа двух элементов. Статический метод dict.fromkeys
создаст словарь с ключами и значениями None.
Метод copy
копирует словарь, а не копирует ссылку при присвоении.
Метод get
поддерживает значение по-умолчанию.
Метод keys
возвращает все ключи.
Метод values
возвращает все значения.
Метод items
возвращает все ключи и значения в виде массива кортежей.
Метод popitem
удаляет и возвращает произвольный кортеж из ключа и значения.
Генераторы списков
Для создания списков, заполненных по более сложным формулам можно использовать генераторы — выражения, позволяющие заполнить список по формуле.
Создать список с одинаковыми элементами можно умножив последовательность с одним элементом на желаемую длину.
Генератор списков имеет вид [выражение for переменная in последовательность]
.
Здесь обходится последовательность, к каждой переменной применяется значение и записывается в результирующую последовательность.
После последовательности можно добавить ограничитель if
, который позволит добавить элемент только в случае выполнения условия.
Если разместить генератор списков внутри круглых скобок, то вернется итератор.
В фигурных скобках будет создано множество.
В фигурных скобках, когда выражение через двоеточие будет создан словарь.
ООП
Основы
Класс создается с помощью ключевого слова class
.
Класс тоже может иметь описание.
Методы класса обязаны иметь в качестве первого аргумента слово self
. При этом передавать его не нужно, это автоматически сделает Python.
Создается новый экземпляр через вызов имени класса.
Self является указателем на экземпляр внутри класса.
Подобно функциям, классы можно задекорировать с помощью функций декораторов.
Конструктор и деструктор
За инициализацию отвечает метод __init__
. В нем мы можем присваивать значения необъявленным свойствам, таким образом объявляя их.
Деструктором является метод __del__
.
Методы класса и объекта
Статический метод можно создать с помощью декоратора @staticmethod или вызова одноименной функции в теле класса.
Существует две области видимости для методов и свойств. Публичные — по-умолчанию и приватные — начинаются с двойного знака подчеркивания.
Наследование
Для наследования указывается родительский класс в скобках после имени текущего класса.
Поддерживается множественное наследование.
Поиск методов начинается с базового класса, переходя к родительским в порядке их объявления.
Обратиться к родительскому классу можно с помощью метода super
, по имени родительского класса.
Базовые классы хранятся в статическом свойстве __bases__
.
Цепочка наследования хранятся в статическом свойстве __mro__
. На основании множественного наследования используется механизм примесей mixin. Используется как трейты.
Специальные методы
__call__
— вызов объекта как вызов функции.__getattribute__
— аналог одноименной функции. Перехватывает обращение к атрибутам.__setattr__
— аналог одноименной функции. Перехватывает обращение к атрибутам.__delattr__
— аналог одноименной функции. Перехватывает обращение к атрибутам.__len__
— вызывается при вызове функции len на объекте или вместо bool, если она не определена.__bool__
— вызывается при вызове функции bool.__int__
— вызывается при вызове функции int.__float__
— вызывается при вызове функции float.__complex__
— вызывается при вызове функции complex.__round__
— вызывается при вызове функции round.__index__
— вызывается при вызове функций bin, hex, oct.__repr__
и__str__
— вызывается при вызове функций repr и str.__hash__
— используется, если класс участвует в качестве ключа словаря.__add__
— вызывается при сложении.__radd__
— вызывается при сложении, когда экземпляр справа.__iadd__
— вызывается при присваивании +=.__sub__
,__rsub__
,__isub__
— вызывается при операциях вычитания.__mul__
,__rmul__
,__imul__
— вызывается при операциях умножения.__truediv__
,__rtruediv__
,__itruediv__
— вызывается при операциях деления.__floordiv__
,__rfloordiv__
,__ifloordiv__
— вызывается при операциях деления с округлением.__mod__
,__rmod__
,__imod__
— вызывается при операции нахождения остатка от деления.__pow__
,__rpow__
,__ipow__
— вызывается при операции возведения в степень.__neg__
— унарный минус.__pos__
— унарный плюс.__abs__
— вызывается при вызове функции abs.__invert__
— двоичная инверсия ~.__and__
,__rand__
,__iand__
— двоичное И &.__or__
,__ror__
,__ior__
— двоичное ИЛИ &.__xor__
,__rxor__
,__ixor__
— двоичное исключающее ИЛИ ^.__lshift__
,__rlshift__
,__ilshift__
— сдвиг влево «.__rshift__
,__rrshift__
,__irshift__
— сдвиг вправо ».__eq__
— сравнение на равенство ==.__ne__
— сравнение на неравенство !=.__lt__
— сравнение на меньше <.__gt__
— сравнение на больше >.__le__
— сравнение на меньше или равно <=.__ge__
— сравнение на больше или равно >=.__contains__
— проверка на вхождение in.
Абстрактные методы
Единственный способ сделать метод абстрактным — это бросать в нем исключение.
Можно задекорировать метод и использовать аннотацию.
Это уже сделано в модуле abc
с помощью функции-декоратора abstractmethod
.
Доступ к свойствам
В конструкторе объявляются свойства экземпляра. А в классе переменные принадлежат всему классу (статические свойства).
Для доступа к атрибутам (свойствам) могут использоваться функции.
getattr
- получить атрибут объекта или значение по-умолчанию.
setattr
- установить значение для атрибута объекта, возможно несуществующего.
delattr
- удалить значение для атрибута объекта.
hasattr
- проверить атрибут объекта на существование.
Можно объявить сеттер, геттер и удалитель одной функцией property
.
Или заменить это все функциями-декораторами var_name.getter, var_name.setter и var_name.deleter.
Данные свойства можно объявить абстрактными.
Исключения
Обработка исключений производится с помощью оператора try-except-else
. Можно обработать любую ошибку, кроме синтаксической.
Блок else выполняется если ошибки не происходит.
Можно обработать несколько типов исключений сразу, перечислив их в скобках.
Можно определить исключение в переменную с помощью оператора as
.
Чтобы создать собственный тип исключения, нужно отнаследоваться от класса Exception.
Чтобы бросить исключение используется оператор raise
.
Блок finally выполняется всегда.
Получить информацию об исключении можно с помощью функции exc_info
модуля sys
.
Для удобного чтения полученного кортежа можно воспользоваться модулем traceback
.
Если в блоке except не указать тип исключения, то блок перехватывает все исключения.
Менеджеры контекста
Python поддерживает протокол менеджеров контекста. Протокол гарантирует выполнение завершающих действий.
Для работы с протоколом следует использовать инструкцию with-as
.
Формат:
В начале вычисляется выражение, которое должно возвращать объект с методами __enter__
и __exit__
.
__enter__
вызывается после создания объекта, возвращает значение, которое присваивается в переменную.- Потом вызывается блок внутри with.
- При возникновении исключения, вызывается
__exit__
с теми же аргументами, что возвращает функцияexc_info
модуля sys. Если исключение обработано, то возвращает True, иначе False и исключение передается вышестоящему обработчику. __exit__
вызывается в любом случае, только в случае успеха все аргументы равны None.
Инструкция assert
бросает AssertionError
, если выражение справа не равно True.
Итераторы, контейнеры и перечисления
Итераторы
Это классы, которые могут выступать как последовательности. Для того, чтобы определить итератор, необходимо определить в классе два метода.
__iter__
— говорит о том, что класс является итератором, должен вовращать сам экземпляр класса и выполнять все необходимые предустановки.__next__
— вызывается при каждой итерации, должен возвращать очередное значение из последовательности, пока не возникнет исключение StopIteration.
Контейнеры
Классы, которые могут выступать как последовательности или отображения (словари).
__getitem__
— получение элемента по индексу или ключу (для отображений).__setitem__
— присваивание элемента по индексу или ключу (для отображений).__delitem__
— удаление элемента по индексу или ключу (для отображений).__contains__
— вызывается при проверке на существование значения или ключа (для отображений) с помощью in и not in.
Перечисление
Чтобы создать перечисление (enumeration) с целыми величинами необходимо наследовать класс от IntEnum
из модуля enum
.
Чтобы создать перечисление (enumeration) со скалярными величинами необходимо наследовать класс от Enum
из модуля enum
.
Перечисления обязаны хранить атрибуты, названные по разному, но значения могут быть неуникальными.
Чтобы утвердить, что значения уникальны используется декоратор класса @unique
.
Для того, чтобы создать экземпляр необходимо либо передать идентификатор в конструктор, либо использовать одно из значений.
Это делается благодаря базовому классу EnumMeta, в котором объявлена логика.
Кроме того, можно создать экземпляр с помощью синтаксиса словарей.
Из типа перечисления можно создать список его значение, обернув в list.
IntEnum можно использовать как число.
Получить имя можно с помощью свойства name. Оно совпадает с именем переменной.
Получить значение с помощью value.
Некоторые модули
Модуль Math
pi
— возвращает число Пи.e
- значение числа Эйлера.- Есть функции
sin
,cos
,tan
,asin
,acos
,atan
.degress
— преобразует радианы в градусы.radians
— преобразует градусы в радианы. exp
- экспонента (e ** x).log
— логарифм числа по основанию.log10
— логарифм числа по основанию 10.log2
— логарифм числа по основанию 2.sqrt
— квадратный корень.ceil
— округление до большего.floor
— округление до меньшего.fmod
— остатотк от деления.fabs
— модуль.factorial
— факториал числа.fsum
- точная сумма переданных чисел.
Модуль random
random
— случайное число от 0 до 1.seed
— настройка генератора случайных чисел. Если первый параметр одинаковый, то при random число будет тоже.uniform
— число в диапазоне от и до.randint
— целое число в диапазоне от и до.randrange
— случайное число из последовательности. Аргументы как у range.choice
— случайное число из переданной последовательности. shuffle - перемешивает последовательность.sample
— возвращает список из указанного количества элементов переданной последовательности.
Модуль locale
Модуль используется для настройки локализации.
Функция setlocale
устанавливает локализацию для категории.
В качестве категории выступают константы.
- locale.LC_ALL
— все режимы.
- locale.LC_COLLATE
— сравнение строк.
- locale.LC_CTYPE
— перевод символов в нижний/верхний регистр.
- locale.LC_MONETARY
— отображение денежных единиц.
- locale.LC_NUMERIC
— форматирование чисел.
- locale.LC_TIME
— форматирование вывода даты и времени
Функция getlocale
получает текущую локализацию для режима.
Настройки локали можно получить с помощью функции localeconv
.
Модуль hashlib
Модуль используется для хеширования строк.
Есть функции md5
, sha1
, sha224
, sha256
, sha384
и sha512
. Все они принимают последовательность байт.
Чтобы получить зашифрованную последовательность байт используются методы digest
и hexdigest
.
Передать последовательность можно с помощью метода update
.
Для создания устойчивого к взлому пароля используется функция pbkdf2_hmac
.
Модуль itertools
Модуль содержит функции для работы с последовательностями.
count
— создает бесконечную, монотонно-изменяющуюся последовательность.
cycle
- бесконечно по кругу перебирает последовательность.repeat
— возвращает объект заданое количество раз.
combinations
— возвращает итератор с различными комбинациями элементов коллекции (как кортежи).
combinations_with_replacement
— возвращает итератор с различными комбинациями элементов коллекции (как кортежи), но здесь элемент может быть в кортеже с собой.
permutations
— аналог combinations.product
— кортеж из комбинации элементов одной или несколькоих последовательностей.filterfalse
— как функция filter, но ожидает значения false.dropwhile
— возвращает элементы, начиная с элемента, для которого функция вернет false.takewhile
— возвращает элементы, включая до элемента, для которого функция вернет false.compress
— фильтрует последовательность в соответствии с булевым значением из второй последовательности.islice
— возвращает итератор, для которого можно задать границы и шаг.startmap
— аналог map, но каждый элемент должен быть последовательностью.zip_longest
— аналог zip, но обходит все элементы, добавляя значение по-умолчанию.accumulate
— аналог reduce.chain
— принимает несколько последовательностей, при итерации поочередно возвращает их элементы.chain.from_iterable
— возвращает итератор последовательности, все элементы которой тоже являются последовательностью.
Модули для работы с датой и временем
Модуль time
time
— timestamp с 1.01.1970г.gmtime
— возвращает struct_time объект переданного timestamp или текущего времени, если параметр не передан.localtime
— возвращает struct_time в локальном времени.strftime
— принимает формат и struct_time и возвращает строковое представление.strptime
— разбирает строку в указанном формате и возвращает объект struct_time.asctime
— возвращает сроку в формате ascii, принимает struct_time.ctime
— возвращает сроку в формате ascii, принимает timestamp.sleep
— используется для задержки скрипта (использует секунды).mktime
— принимает struct_time, а возвращает timestamp.
Объект struct_time
имеет свойства.
tm_year
— годtm_mon
— месяцtm_mday
— день месяцаtm_hour
— часtm_min
— минутыtm_sec
— секундыtm_wday
— день недели (число)tm_yday
— день годаtm_isdst
— флаг коррекции летнего времени
Модуль datetime
Модуль позволяет оперировать датой и временем.
timedelta
— класс, дата в виде количества дней, секунд и микросекунд. Экземпляр можно складывать с date и datetime.
Над классом можно проводить арифметические операции + - / // : * и получать абсолютное значение с помощью abs
.
Можно использовать операторы сравнения.
date
— класс, представление даты.
Конструктор принимает год, месяц и день. Статический метод today
возвращает текущую дату.
Статический метод fromtimestamp
возвращает дату для timestamp.
Статический метод fromordinal
возвращает дату, соответствующую количеству дней с первого года.
Есть методы replace
, strftime
, isotime
, ctime
, timetuple
, toordinal
, weekday
, isoweekday
, isocalendar
.
time
— класс, представление времени.
Коструктор принимает час, минута, секунда, микросекунда, tzinfo.
datetime
— класс, представление даты и времени.
Есть методы now, utcnow, fromtimestamp, utcfromtimestamp, fromordinal, combine, strptime, date, time, timetz, timestamp, replace, timetuple, utctimetuple, toordinal, weekday, isoweekday, isoformat, ctime, strftime.
tzinfo
— абстрактный класс, отвечает за временную зону.
Модуль calendar
Модуль формирует календарь в определенном виде.
Calendar
— базовый класс, который принимает в качестве аргумента номер первого дня недели.
TextCalendar
— выводит календать в виде текста.
LocaleTextCalendar
— выводит календать в виде текста с учетом локали.
Имеют методы:
formatmonth
— возвращает указанный месяц.
prmonth
— выводит указанный месяц.formatyear
— возвращает указанный год.pryear
— выводит указанный год.HTMLCalendar
— выводит календать в виде HTML.LocaleHTMLCalendar
— выводит календать в виде HTML с учетом локали.
Дополнительно имеют метод formatyearpage
.
Модуль timeit
Модуль используется для измерения времени выполнения программы или кода.
Измерения проводятся с помощью класса Timer.
В конструктор он принимает код, который будет исполнятся в качестве строки, код, который будт выполнен перед запуском таймера и необязательную функцию-таймер.
Получить время выполнения можно с помощью метода timeit, который принимает количество повторений.
Метод repeat
запускает метод timeit указанное количество раз и возвращает результат.
Работа с файловой системой
Работа с файлами
open
— открывает файл.- Первый аргумент принимает путь к файлу. Поддерживаются относительные и абсолютные пути. Слэши обрабатываются в соответствие с os.path.sep.
- Второй параметр необязателен — mode. Он задает режим открытия.
r
— только чтение (по-умолчанию). После открытия указатель в начале файла. Если файл не существует, возбуждается FileNotFoundError.r+
— чтение и запись. Указатель в начале файла. FileNotFoundError.w
— только запись. Указатель в начале файла. Если файла нет, то он создается, иначе перезаписывается.w+
— чтение и запись. Указатель в начале файла. Если файла нет, то он создается, иначе перезаписывается.a
— только запись. Указатель в конце файла. Если файла нет, то он создается.a+
— чтение и запись. Указатель в конце файла. Если файла нет, то он создается.x
— создание файла для записи. Если есть, то FileExistsError.x+
— создание файла для записи и чтения. Если есть, то FileExistsError.b
— файл будет открыт в бинарном режиме. Методы будут принимать и возвращать объекты типа bytes.t
— файл будет открыт в бинарном режиме. Методы будут принимать и возвращать объекты типа str. По-умолчанию.
- При записи данных, информация записывается в буфер. Из буфера в файл данные будут записаны только после вызова метода
flush
или после закрытия файла. Третьим аргументомbuffering
можно указать размер буфера. Если будет 0, то данные в файл будут записаны сразу (только для бинарного режима).- Если будет 1, то данные в файл будут записаны построчно (только для тесктового режима).
- Четвертым аргументом encoding можно указать кодировку.
- Пятым аргументом error можно указать уровень обработки ошибок.
strict
— при ошибке возбуждается исключение (по-умолчанию).replace
— неизвестный символ заменяется символом вопроса или символом с кодом \ufffd.ignore
— неизвестный символ будет проигнорирован.xmlcharrefreplace
— неизвестный символ заменяется последовательностью &#xxxx;.backslashreplace
— неизвестный символ заменяется последовательностью \uxxxx;.
- Шестым аргументом
newline
задается режим обработки конца строк.None
— выполняется стандартная обрабока (для Windows при чтении \r\n преобразуется в \n, при записи наоборот).“”
— пустая строка. Обработка не осуществляется.“<symbol>”
— указанный символ считается концом строки.
После открытия файла функция open возвращает объект-дескриптор файла.
- Метод
close
— закрывает файл. - Метод
write
— записывает переданную последовательность (str или bytes) в файл. - Метод
writelines
— записывает переданную последовательность (str или bytes) в файл. - Метод
writable
— проверка возможности записи. - Метод
read
— чтение данных. Можно передать количество считываемых данных. - Метод
readline
— считывает из файла одну строку при каждом вызове. - Метод
readlines
— считывает из файла все строки в список. - Метод
__next__
— считывает из файла одну строку при каждом вызове. - Метод
flush
— принудительно записывает данные в файл. - Метод
fileno
— возвращает целочисленный дескриптор файла. 0 — stdin, 1 — stdout, 2 — stderr. - Метод
truncate
— обрезает файл до указанного количества символов или байт (для бинарного режима). - Метод
tell
— возвращает позицию указателя относительно начала файла. - Метод
seek
— устанавливает позицию, имеющую смещение (первый аргумент) относительно позиции (второй). Из модуля io доступны позиции:SEEK_SET
— начало файлаSEEK_CUR
— текущая позицияSEEK_END
— конец файла.
- Метод
seekable
— проверка на возможность перемещения указателя.
Помимо методов есть некоторые атрибуты.
name
— имя файлаmode
— режим открытияclosed
— True, есть файл закрытencoding
— кодировкаbuffer
— доступ к буферу. Можно, например, записать в буфер
Модуль os
Модуль содержит низкоуровневые операции для работы с файлами.
Функциональность зависит от операционной системы.
Получить название можно из атрибута name.
Функция open
открывает файл:
- Путь к файлу.
- Режим открытия, можно комбинировать несколько через бинарное ИЛИ.
os.O_RDONLY
— чтение.os.O_WRONLY
— запись.os.O_RDWR
— чтение и запись.os.O_APPEND
— добавление в конец.os.O_CREAT
— создать файл, если он не существует.os.O_EXCL
— говорит, что изначально файл не должен существовать.os.O_TEMPORARY
— файл будет удален после закрытия.os.O_SHORT_LIVED
— что и os.O_TEMPORARY, но будет храниться в оперативной памяти.os.O_TRUNC
— очистить содержимое.os.O_BINARY
— бинарный режим.os.O_TEXT
— текстовый режим.
mode
— восьмиричное число от 0o000 до 0o777.
- Режим открытия, можно комбинировать несколько через бинарное ИЛИ.
Функция read
читает из файла указанное число байт.
Функция write
пишет из файл последовательность байт.
Функция close
закрывает файл.
Функция lseek
устанавливает указатель в позицию, возвращает новую позицию.
Функция dup
возвращает дубликат файлового дескриптора.
Функция fdopen
возвращает файл по дескриптору.
Класс StringIO
позволяет работать со строкой как с файловым объектом. Все операции хранятся в оперативной памяти.
Методы подобны методам файла, имеется метод getvalue
, который возвращает значение.
Для аналогичной работы с байтами используется класс BytesIO
.
Функция getcwd
возвращает текущий каталог (каталог, где находится файл).
Функция chdir
— переходит в каталог.
Функция mkdir
— создает каталог с правами доступа, указанными во втором аргументе с помощью восьмиричного значения.
Функция rmdir
— удаляет пустой каталог.
Функция listdir
— возвращает список файлов в каталоге.
Чтобы использовать специальные символы *, ? и [] используется функция glob из модуля glob.
Функция walk
— возвращает итератор файлов в каталоге (может рекурсивно).
Чтобы удалить непустую папку используется функция rmtree
из модуля shutil
.
Функция normcase
— преобразует переданный путь в тот вид, в котором используется в системе.
Для определения прав используется функция access
, на принимает путь и режим. Возвращает True, если проверка успешна, иначе False.
- os.F_OK
— проверка наличия.
- os.R_OK
— проверка на права чтения.
- os.W_OK
— проверка на права записи.
- os.X_OK
— проверка на исполняемость.
Права можно изменить с помощью функции chmod
. Она принимает путь и восьмиричные права.
Модуль shutil
имеет методы для манипулирования файлами.
Функция copyfile
— копирует файл.
Функция copy
— копирует файл вместе с правами доступа. Функция copy2 — копирует файл вместе с метаданными. Функция move — перемещает файл.
Функция rename
— переименовывает файл.
Функции remove
и unlink
— удаляет файл.
Модуль os.path также имеет методы для манипулирования файлами.
Функция exists
— проверка на существование.
Функция getsize
— размер в байт.
Функция getatime
— время последнего доступа, возвращает timestamp в секундах.
Функция getctime
— время создания, возвращает timestamp в секундах.
Функция getmtime
— время последнего изменения, возвращает timestamp в секундах.
Функция utime
— обновить время последнего доступа и изменения, возвращает timestamp в секундах.
Функция abspath
— вернет абсолютный путь.
Функция isabs
— проверка, что путь — абсолютный.
Функция basename
— вернет имя файла без пути до него.
Функция dirname
— вернет путь до файла.
Функция split
— вернет кортеж из пути и имени файла.
Функция splitdrive
— вернет кортеж из пути до файла с именем и диска, на котором он лежит.
Функция splittext
— вернет кортеж из имени файла и его расширения.
Функция join
— объединяет в путь.
Функция isdir
— проверяет, что строка ведет на каталог.
Функция isfile
— проверяет, что строка ведет на файл.
Функция islink
— проверяет, что строка ведет на ссылку.
Ввод и вывод
Функция print
напрямую поддерживает перенаправление вывода с помощью аргумента f.
Чтобы перенаправить ввод и вывод используются атрибуты модуля sys stdout, stdin, stderr.
Чтобы проверить, ссылается ли на стандартный ввод на терминал, применяется метод stdin.isatty
.
Сохранение объектов
Сохранить объекты в файл могут модули pickle
и shelve
.
pickle.dump
— сохраняет объект (предустановленные в Python) в файл, открытый в бинарном режиме.
pickle.load
— загружает объект (предустановленные в Python) из файла, открытого в бинарном режиме.
pickle.dumps
— преобразует объект строку.
pickle.loads
— преобразует строку, созданную с помощью pickle.dumps в объект.
Тоже самое делает объект типа Pickler
методами dump
, load
, dumps
, loads
.
shelve.open
— открывает файл для хранения объектов. Возвращается отображение с объектами DbfilenameShelf
. Можно указать режим открытия.
r
- чтение.w
- чтение и запись.c
- если файл не существует, то будет создан (по- умолчанию).n
- если файл существует, то будет перезаписан.
shelve.DbfilenameShelf.close
— закрывает файл.
shelve.DbfilenameShelf.keys
— получить ключи.
shelve.DbfilenameShelf.values
— получить значения.
shelve.DbfilenameShelf.items
— возвращает итератор с кортежем из ключа и значения.
shelve.DbfilenameShelf.get
— получить значение по ключу или по-умолчанию.
shelve.DbfilenameShelf.setdefault
— получить значение по ключу или установить.
shelve.DbfilenameShelf.pop
— удаляет элемент и возвращает его.
shelve.DbfilenameShelf.popitem
— удаляет произвольный элемент и возвращает кортеж из ключа и значения.
shelve.DbfilenameShelf.clear
— удаляет все элементы.
shelve.DbfilenameShelf.update
— обновляет файл.
Работа с SQLite
DB-API
Работать с базой данных SQLite можно с помощью модуля sqlite3
. Чтобы писать модули для взаимодействия с БД необходимо придерживаться DB-API.
Модуль sqlite имеет полезныем атрибуты apilevel (версия DB- API), sqlite_version или sqlite_version_info (версия модуля).
Последовательность работы с базой данных согласно DB-API 2.0:
- Подлючение производится с помощью функции
connect
. Она должна возвращать объект соединения. - Создается объект-курсор.
- Выполняются запросы, обрабатываются результаты.
- Перед первым запросом запускается транзакция.
- Завершается транзакция.
- Закрывается объект-курсор.
- Закрывается соединение.
С помощью функции set_trace_callback
можно выполнить трассировку. Она принимает ссылку на функцию, которая принимать строку с SQL командой.
Создание и открытие БД
Для создания и открытия служит функция connect, первым аргументом будет путь до базы данных.
Можно указать значение memory:
, тогда база будет создана в оперативной памяти.
Чтобы передать параметры при открытии используется синтаксис, как в GET запросе.
- С помощью аргумента
mode
можно указать режим доступа.ro
— только чтениеrw
— чтение и записьrwc
— чтение, запись и создание БД.memory
— аналог :memory:.
- С помощью аргумента
immutable
отключаются все механизм транзакций, остается исключительно чтение.
Если база не существует, то она будет создана. Базу всегда нужно закрывать командой close.
Выполнение запросов
Согласно DB-API необходимо создать объект курсор, а все запросы пускать через него.
Создать объект курсор можно с помощью метода cursor объекта-соединения.
Чтобы выполнить несколько запросов, применяется метод executescript
объекта-курсора.
По окончанию автоматически делает commit.
Чтобы выполнить один запрос, но при этом использовать биндинг применяется метод execute
объекта-курсора.
Автоматически commit не делает.
Первым параметром передается запрос.
Все значения, которые нужно забиндить указываются как ?
, если второй аргумент будет кортежем.
Указываются каr :<key>
, если это будет словарь.
Чтобы завершить транзакцию нужно вызвать commit
у объекта соединения.
Чтобы забиндить множественные параметры используется метод executemany
объекта-курсора.
Автоматически commit не делает.
Объект соединения также имеет методы executescript
, execute
и executemany
, но эти методы не входят в DB-API.
Объект-курсор имеет атрибуты lastrowid
(индекс вставленной последней записи), rowcount (количество добавленных или удаленных методов), description (содержит кортеж кортежей с именем поля).
Обработка результата запроса
Метод fetchone
при каждом вызове возвращает одну запись из результат запроса в виде кортежа и передвигает указатель на следующую запись.
Сам курсор является итератором, так что результаты можно обойти с помощью цикла.
Метод fetchmany
возвращает переданное количество записей (по-умолчанию равно cursor.arraysize
).
Метод fetchall
возвращает список всех полученных записей.
Объект-курсор имеет свойство row_factory
. Этому свойству можно задать функцию обработчик, которая принимает объект-курсор первым аргументом и запись вторым.
Атрибуту row_factory также можно присвоить ссылку на объект типа Row
.
Объект типа Row поддерживает итерации, доступ по индексу и метод keys, который возвращает список с названиями полей.
Управление транзакциями
Управлять транзакциями можно с помощью параметра isolation_level
функции connect. DEFERRED, IMMEDIATE, EXCLUSIVE — запустит транзакцию с соответствующим урованем.
None — транзакция запущена не будет.
Откатить изменения транзакции можно с помощью метода rollback
объекта-соединения.
Свойство класса-соединения in_transaction
передает информацию о том, осуществляется ли сейчас транзакция.
Пользовательские функции
С помощью метода create_collation
объекта-соединения можно создать пользовательскую функцию сортировки.
Функция должна принимать две строки, возвращать -1, если первая больше, 0 при равенстве и 1, если больше правая.
Метод create_collation принимает первым аргументом название в SQL, вторым ссылку на функцию.
С помощью метода create_function
объекта-соединения можно создать пользовательскую функцию.
Она принимает название функции, количество параметров и ссылку на функцию.
С помощью метода create_aggregate
объекта-соединения можно создать пользовательскую агрегатную функцию.
Она принимает имя функции, количество параметров и сслыку на класс.
Класс должен реализовывать два метода step
и finalize
.
step
— вызывается для каждой обрабатываемой записи, ему передаются параметры, колическтво которых задано.finalize
— возвращает результат выполнения
Преобразование типов
Каждому типу SQLite соответствует тип Python.
NULL
- NoneINTEGER
— intREAL
— floatTEXT
— str-
BLOB
— bytesЕсли необходимо сохранить в таблице данные, которые не поддеживаются SQLite, следует преобразовать тип самостоятельно.
Для этого с помощью функции register_adapter
необходимо зарегистрировать пользовательскую функцию, которая будет вызываться при попытке вставке объекта в SQL.
Эта функция принимает в качестве аргументов тип данных и ссылку на функцию.
Чтобы восстановить объект из записи, используется функция register_converter
.
Первым аргументом является тип, используемый в SQLite, а вторым функция преобразования.
По умолчанию тип данных определяется при создании таблицы в параметре тип.
Определение типа данных задается при создании подключения с помощью аргумента detect_types
.
PARSE_COLNAMES
— смотри на имена полей, если указано как <real_field> as ‘<alias> [<required_type>]'
.
PARSE_DECLTYPES
— по-умолчанию, с помощью имени типа при создании таблицы.
Для даты и времени из модуля datetime уже предусмотрены преобразователи данных.
Разработка с серверными БД
Основные отличия
- Используются специальные модули, которые реализуют DB-API.
- При подключении указываются специальные параметры.
Взаимодействие с интернетом
URL
Манипулировать URL адресом можно с помощью модуля urllib.parse
.
- URL —
:// : / ; ? # . - FTP —
:// : @
Разобрать URL можно с помощью функции urlparse
.
Вторым указывается протокол, который дут использован, есть в URL его нет.
Метод geturl
объекта ParseResult
возвращает строку с исходным URL.
Собрать URL из кортежа можно с помощью функции urlunoparse
.
Вместо urlparse
можно воспользоваться функцией urlsplit
. Помимо всего прочего, она не выделяет параметры.
Чтобы декодировать строку запроса нужно воспользоваться функцией parse_qs
.
Она принимает строку запроса, параметр keep_blank_values указать, что пустые значения тоже возвращать.
Функция parse_qsl делает тоже самое, но возвращает не словарь, список кортежей пар.
Функция urlencode делает обратную операцию.
Если поставить параметр doseq
в True, то для одного параметра можно будет добавить несколько значений.
Функция quote
кодирует строку.
Функция quote_pluse
кодирует строку, но ставит + для пробела.
Функция quote_from_bytes
кодирует последовательность байт. Функция unquote
, unquote_plus
, unquote_to_bytes
декодирует строку.
Преобразовать относительную ссылку в абсолютную можно с помощью функции urljoin
.
Она преобразует ссылку относительно текущего контекста подобно файловой системе, если бы хост был бы корневым каталогом.
HTML
Чтобы экранировать специальные символы HTML используется функция escape
из модуля xml.sax.saxutils
. Дополнительно ей можно передать словарь, по которому будут производится замены.
Обратная ей функция — unescape
.
Обмен данными
Модуль http.client
позволяет взаимодействовать по HTTP(s) методами GET, HEAD и POST.
За создание соединения ответственен класс HTTPConnection
. Его конструктор принимает хост, порт и таймаут.
Закрыть соединение можно с помощью метода close
.
Метод request
отправляет запрос. Он принимает метод, путь, тело запроса и заголовки,
Метод getresponse
возвращет результат в виде объекта типа HTTPResponse.
Метод read
возвращает тело ответа.
Метод getheader
возвращает запрошенный заголовок ответа или значение по-умолчанию.
Метод getheaders
возвращает все заголовки ответа. Свойство status статус в виде числа.
Свойство reason
статус в виде текста.
Свойство version
содержит версию протокола HTTP.
Свойство msg
содержит объект сообщение.
Модуль urllib.request также предоставляет методы для работы с интернет.
Для выполнения запроса используется функция urlopen
. Она принимает Url, данные, таймаут. В качестве URL может выступать объект Request. Если данные переданы, то это будет POST, иначе GET. Функция возвращает объект типа HTTPRequest.
HTTPResponse
имеет метод read
, который возвращает ответ.
Метод readline
считывает одну строку на каждый вызов.
Метод readlines
возвращает список.
HTTPResponse является итератором.
Метод info
возвращает список заголовков.
Свойство code
содержит код ответа.
Свойство msg
содержит текстовый код ответа.