изменяемая последовательность с упорядоченными элементами.
iterable : Последовательность или объект, поддерживающий итерирование (включая генераторы).
Элементами списков могут выступать любые объекты.
Действия
Объявление
В коде списки могут быть объявлены при помощи квадратных скобок — [] — внутри скобок через запятую перечисляются элементы в нужной последовательности.
Кроме того, можно объявить их при помощи конструктора list().
Замена элементов
Для замены значений используется обращение по индексу с последующим присвоением нового значения.
Удаление элементов
Для удаления из списка одиночных элементов и срезов может использоваться инструкция del:
При удалении списка (например, с помощью del, или сборщика мусора), его опустошенный объект кешируется и используется в последующем для создания нового списка. См. пример ниже.
Сравнение
Два списка сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:
Порядок элементов
Элементы в списках упорядочены по очередности их добавления.
array.array
Неизменяемая последовательность, позволяющая компактно хранить объекты одного из базовых типов.
set
Свойства
Изменяемое множество.
set([iterable])
iterable : Объект, поддерживающий итерирование, элементы которого должны стать элементами множества. Если не указан, будет создано пустое множество.
Множества могут быть созданы литералом при помощи фигурных скобок {, } с указанием элементов в них:
Помните, что конструкция {} создаст не пустое множество, а пустой словарь. Пустое множество создаётся при помощи set() (см. выше).
Для создания множества множеств, требуется чтобы внутренние множества были статичными (frozenset).
элементы дедублицируются
discard
Удаляет указанный элемент из множества, если он там присутствует.
set.discard(el)
el : Элемент, который требуется убрать из множества.
У множеств существует схожий метод set.remove(), возбуждающий исключение при попытке удаления отсутствующего элемента.
dict
Словарь — изменяемый объект-отображение.
dict([obj, ][**kwargs])
obj : Первым необязательным позиционным аргументом может являться отображение или итерирующийся объект (при этом каждый его элемент должен быть тоже итерирующемся и содержать ровно два объекта).
**kwargs : Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.
Ключи
Ключами словаря могут являться только объекты, поддерживающие хеширование. Таким образом, использовать в качестве ключей списки, словари и другие изменяемые типы не получится.
Если в словарь будут добавлены несколько значений с одним и тем же ключом, словарь сохранит последнее.
Операции
Объявление
В коде словари могут быть объявлены при помощи фигурных скобок — {} .
Кроме того, можно объявить их при помощи конструктора dict().
Получение значений
Доступ к значениям производится при помощи ключей.
Установка значений
Кроме установки значений при создании словаря, можно дополнять его по мере надобности.
in
Определение наличия/отсутствия элемента
2.2 Определить, присутствует ли ключ в словаре можно при помощи конструкции in.
2.2 Определить, отсутствует ли ключ в словаре можно при помощи антонимичной конструкции not in.
обновление элемента
players['So'] = 2781 #update
Количество элементов в словаре
Количество элементов можно получить, используя функцию len().
преобразование ключей в список
list
list(players.keys())
for
for k, v in players.items():
print(k, v)
При сравнении не учитывается порядок элементов
Исключение: OrderedDict
from collections import OrderedDict
d1 = OrderedDict()
сохраняет заданный порядок
методы
get
Возвращает значение из словаря по указанному ключу.
dict.get(key[, default]) -> Значение по ключу, либо default.
key : Ключ, значение по которому требуется получить.
default : Значение, которое следует вернуть, если в словаре не окажется указанного ключа. По умолчанию — None.
Таким образом, исключение KeyError при использование данного метода не возбуждается никогда.
del
удаление элемента
del players['So']
update
Обновляет данные словаря, заменяя значения при совпадении ключей.
dict.update([other], **kwargs) -> None
other : Необязательный аргумент. Другой словарь. 2.4 Либо итерируемый объект с парами ключ, значение (кортеж, либо другой итерируемый объект с двумя элементами) .
2.4 **kwargs : Необязательный аргумент. Именованные аргументы значениями которых требуется обновить словарь. Если используется вместе с other, значения из именованных аргументов имеют приоритет.
keys
получение ключей
players.keys()
ключи
Python 3
Для обхода ключей создаётся представление ключей словаря, по сути являющееся генератором. Копия данных не создаётся.
{'a': 1, 'b': 2}.keys() # dict_keys(['a', 'b'])
Python 2
Для обхода ключей создаётся копия данных словаря.
{'a': 1, 'b': 2}.keys() # ['a', 'b']
clear
Удаляет из словаря все элементы.
dict.clear()
Метод очищает словарь, удаляя из него все элементы. При этом объект словаря остаётся прежним.
copy
Возвращает поверхностную копию словаря.
dict.copy() -> dict Поверхностная копия словаря
setdefault
Возвращает значение по ключу, инициализируя элемент словаря, если необходимо, указанным значением.
dict.setdefault(key[, default]) -> Значение по ключу, либо default
key : Ключ, значение по которому следует получить, если таковое имеется в словаре, либо создать.
default=None : Значение, которое будет использовано при добавлении нового элемента в словарь.
items
Возвращает пары (ключ, значение) для каждого элемента словаря.
dict.items() -> Представление элементов словаря. До 3.0 — список пар (ключ, значение).
Порядок элементов
Ключи значения хранятся в словарях в произвольном (но неслучайном) порядке, зависящем от реализации Питона. Если требуется обход элементов в порядке их добавления, следует использовать collections.OrderedDict().
Python 3
Для обхода элементов создаётся представление элементов словаря, по сути являющееся генератором. Копия данных не создаётся.
Python 2
Для обхода элементов создаётся копия данных словаря.
pop
Возвращает значение по указанному ключу и убирает элемент из словаря.
dict.pop(key[, default])
key : Ключ, значение по которому следует добыть
default : Значение, которое следует вернуть, если указанный ключ отсутствует в словаре. Если не указано, при отсутствии ключа возбуждается исключение KeyError.
popitem
Возвращает произвольную пару (ключ, значение), удаляя её из словаря.
dict.popitem() -> tuple Кортеж вида (ключ, значение)
values
Возвращает значения словаря.
dict.values() -> .3.0 Список значений словаря. 3.0 Представление значений словаря.
Python 3
Для обхода значений создаётся представление словаря, по сути являющееся генератором. Копия данных не создаётся.
Python 2
Для обхода значений создаётся копия данных словаря. Значения преставляются в виде списка.
получить список значений
vals = list(players.values())
сортировать список значений
sorted(players.values())
базовые
__contains__
Позволяет определить механизм проверки наличия элемента в объекте-контейнере.
object.__contains__(self, item) -> bool
self : Ссылка на объект.
item : Элемент, наличие которого в объекте требуется определить.
__iter__
Позволяет определить механизм прохода (итерирования) по элементам объекта.
object.__iter__() -> iterator
неизменяемые
tuple
Свойства
Кортеж — неизменяемая последовательность с упорядоченными элементами.
Элементами кортежей могут выступать любые объекты.
Пустой кортеж — это глобально уникальный объект. Таким образом, все пустые кортежи — это один и тот же объект, а значит и адрес в памяти у таких кортежей один.
При удалении кортежа (например, с помощью del, или сборщика мусора) небольшой длины (не более 19 элементов), он не удалется сразу, а перемещается в очередь удаления. Эта очередь имеет 20 групп, в каждую из которых помещаются удалённые кортежи соответствующей длины, причём в первой группе хранится пустой кортеж.
Действия
Объявление
В коде кортежи могут быть объявлены при помощи скобок — () — внутри скобок через запятую перечисляются элементы в нужной последовательности. Если кортеж состоит из одного элемента при объявлении требуется поставить запятую после этого элемента.
Кроме того, можно объявить их при помощи конструктора tuple(), в качестве аргумента которому можно передать последовательность или объект, поддерживающий итерирование (включая генераторы). Если аргументом указан кортеж, то он и будет возвращён без изменений.
Сравнение
Два картежа сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:
nametuple
кортеж с проименованными элементами
from collections import namedtuple
Player = namedtuple('Player', 'name age rating')
range
str, unicode
capitalize
Возвращает копию строки, делая первую букву заглавной
str.capitalize() -> str
casefold
Возвращает копию строки в сложенном регистре.
str.casefold() -> str
Преобразование в сложенный регистр похоже на преобразование к нижнему регистру, однако более агрессивно.
Например: буква «ß» в нижнем регистре в немецком языке соотвествует сочетанию «ss», однако, ввиду того, что символ «ß» уже имеет нижний регистр, метод .lower() ни к чему не приведёт, в то время как casefold() приведёт символ к «ss».
center
Позиционирует по центру указанную строку, дополняя её справа и слева до указанной длины указанным символом.
str.center(width[, fillchar]) -> str
width : Желаемая минимальная длина результирующей строки.
fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
Символ добавляется к строке циклично сначала справа, затем слева.
Чтобы позиционировать строку вправо используйте str.rjust().
Чтобы позиционировать строку влево используйте str.ljust().
count
Для строки возвращает количество непересекающихся вхождений в неё указанной подстроки.
str.count(sub[, start[, end]]) -> int
sub : Подстрока, количество вхождений которой следует вычислить.
start=0 : Позиция в строке, с которой следует начать вычислять количество вхождений подстроки.
end=None : Позиция в строке, на которой следует завершить вычислять количество вхождений подстроки.
encode
Кодирует строку в байты/байтстроку, используя зарегистрированный кодек.
str.encode([encoding[, errors]]) -> bytes в Python 3 / str в Python 2
encoding : Название кодировки. По умолчанию — системная кодировка, доступная из sys.getdefaultencoding().
2.3 errors=strict : Наименование схемы обработки ошибок. По умолчанию — strict.
expandtabs
Возвращает копию строки, в которой символы табуляций заменены пробелами.
str.expandtabs([tabsize])
tabsize=8 : Максимальное количество пробелов на которое может быть заменена табуляция.
find
Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.
str.find(sub[, start[, end]]) -> int
sub : Подстрока, начальный индекс размещения которой требуется определить.
start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
Если подстрока не найдена, возвращает -1.
Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.
Метод должен использоваться только в случае необходимости найти индекс начала подстроки. Для обычного определения вхождения подстроки используйте оператор in:
Форматирует строку, используя данные из указанного отображения.
str.format_map(mapping)
mapping : Отображение, которое следует использовать для форматирования строки.
index
Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.
str.index(sub[, start[, end]]) -> int
sub : Подстрока, начальный индекс размещения которой требуется определить.
start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
Работа данного метода аналогична работе str.find(), однако, если подстрока не найдена, возбуждается исключение ValueError.
Булевые проверки
isalnum
Возвращает флаг, указывающий на то, содержит ли строка только цифры и/или буквы.
str.isalnum() -> bool
Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами и/или буквами, иначе — False.
isalpha
Возвращает флаг, указывающий на то, содержит ли строка только буквы.
str. isalpha() -> bool
Вернёт True, если в строке хотя бы один символ и все символы строки являются буквами, иначе — False.
isdecimal
Возвращает флаг, указывающий на то, содержит ли строка число в десятичной системе исчисления.
str.isdecimal() -> bool
Возвращает True если в строка содержит число в десятичной системе исчисления и в ней есть хотя бы один символ. Иначе возвращает False.
isdigit
Возвращает флаг, указывающий на то, содержит ли строка только цифры.
str. isdigit() -> bool
Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами, иначе — False.
isidentifier
Возвращает флаг, указывающий на то, является ли строка идентификатором.
str.isidentifier() -> bool
Речь идёт об идентификаторах языка. Более подробная информация об идентификаторах и ключевых словах Питона содержится в разделе оригинальной документации Identifiers and keywords.
islower
Возвращает флаг, указывающий на то, содержит ли строка символы только нижнего регистра.
str.islower() -> bool
Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к нижнему, иначе — False.
isnumeric
Возвращает флаг, указывающий на то, содержит ли строка только числа.
str.isnumeric() -> bool
Вернёт True, если в строке есть символы и все они присущи числам.
isprintable
Возвращает флаг, указывающий на то, все ли символы строки являются печатаемыми.
str.isprintable() -> bool
Вернёт True, если строка пустая, либо если все её символы могут быть выведены на печать.
isspace
Возвращает флаг, указывающий на то, содержит ли строка только пробельные символы.
str. isspace() -> bool
Вернёт True, если в строке есть символы и все они являются пробельными, иначе — False.
istitle
Возвращает флаг, указывающий на то, начинается ли каждое из «слов» строки с заглавной буквы.
str. istitle() -> bool
Вернёт True, если в строке хотя бы один символ или все «слова» в строке начинаются с заглавных букв, иначе — False.
isupper
Возвращает флаг, указывающий не то, содержит ли строка символы только верхнего регистра.
str.isupper() -> bool
Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к верхнему, иначе — False.
str.isupper() может возвращать False, например, если строка содержит только символы не поддерживающие приведение к регистру:
endswith
Возвращает флаг, указывающий на то, заканчивается ли строка указанным постфиксом.
str.endswith(suffix[, start[, end]]) -> bool
suffix : Строка-постфикс ( 2.5 либо кортеж строк), в наличии которой требуется удостовериться.
start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.
end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.
Для определения наличия префикса в строке используйте str.startswith().
startswith
Возвращает флаг, указывающий на то, начинается ли строка с указанного префикса.
str.startswith(prefix[, start[, end]]) -> bool
prefix : Строка-префикс ( 2.5 либо кортеж строк), в наличии которой требуется удостовериться.
start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.
end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.
join
Возвращает строку, собранную из элементов указанного объекта, поддерживающего итерирование.
str.join(iterable) -> str
iterable : Объект со строками, поддерживающий итерирование.
В качестве соединительного элемента между указанными элементами используется объект строки, у которого и вызывается данный метод.
Ожидается, что итерируемый объект выдаёт строки. Для массового приведения к строке можно воспользоваться функцией map(): dots.join(map(str, [100, 200])) # '100..200'
ljust
Позиционирует влево указанную строку, дополняя её справа до указанной длины указанным символом.
str.ljust(width[, fillchar]) -> str
width : Желаемая минимальная длина результирующей строки.
fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
lower
Возвращает копию исходной строки с символами приведёнными к нижнему регистру.
str.lower() -> str
str.lower().islower() может возвращать False, если строка содержит только символы не поддерживающие приведение к регистру: '12'.lower().islower() # False
lstrip
Возвращает копию указанной строки, с начала (слева l — left) которой устранены указанные символы.
str.lstrip([chars]) -> str
Смотрите также: strip() и rstrip().
partition
Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: слева направо.
str.partition(sep) -> tuple
sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.
Возвращает кортеж из трёх элементов.
В случаях, когда требуется, чтобы разбиение строки происходило справа налево, используйте str.rpartition.
Когда требуется разбить строку на множество составляющих, используйте str.split.
replace
Возвращает копию строки, в которой заменены все вхождения указанной строки указанным значением.
str.replace(old, new[, maxcount]) -> str
old : Искомая подстрока, которую следует заменить.
new : Подстрока, на которую следует заменить искомую.
maxcount=None : Максимальное требуемое количество замен. Если не указано, будут заменены все вхождения искомой строки.
Обратные (справа-налево)
rfind
Возвращает наибольший индекс, по которому обнаруживается конец указанной подстроки в исходной.
str.rfind(sub[, start[, end]]) -> int
sub : Подстрока, конечный индекс размещения которой требуется определить.
start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
Если подстрока не найдена, возвращает -1.
Поиск подстроки производится справа налево (отсюда и префикс r в названии метода rfind)
rindex
Возвращает наибольший индекс, по которому обнаруживается конец указанной подстроки в исходной.
str.rindex(sub[, start[, end]]) -> int
sub : Подстрока, конечный индекс размещения которой требуется определить.
start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
Работа данного метода аналогична работе str.rfind(), однако, если подстрока не найдена, возбуждается исключение ValueError.
rjust
Позиционирует вправо указанную строку, дополняя её слева до указанной длины указанным символом.
str.rjust(width[, fillchar]) -> str
width : Желаемая минимальная длина результирующей строки.
fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
rpartition
Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: справа налево.
str.rpartition(sep) -> tuple
sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.
Возвращает кортеж из трёх элементов.
Поведение метода аналогично поведению str.partition за исключением направления разбиения строки.
rsplit
Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: справа налево.
str.rsplit(sep[, maxsplit]) -> list
sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.
maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
Поведение метода аналогично поведению str.split за исключением направления разбиения строки.
Когда требуется разбить строку на три составляющие (начало, разделитель, конец), используйте str.rpartition.
rstrip
Возвращает копию указанной строки, с конца которой устранены указанные символы.
str.rstrip([chars]) -> str
2.2.3 chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.
split
Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: слева направо.
str.split(sep[, maxsplit]) -> list
sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.
maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
Если указан разделитель, разбиение пустой строки вернёт список с единственным элементом — пустой строкой: [''].
splitlines
Разбивает строку на множество строк, возвращая их списком.
str.splitlines([keepends]) -> list
keepends=False — Флаг, указывающий на то следует ли оставлять в результирующем списке символы переноса строк. По умолчанию символы удаляются.
Разбиение строки на подстроки производится в местах, где встречаются символы переноса строк.
В отличие от split(), которому можно передать символ-разделитель, данный метод для пустой строки вернёт пустой список, а символ переноса строки в конце не добавит в список дополнительного элемента.
strip
Возвращает копию указанной строки, с обоих концов которой устранены указанные символы.
str.strip([chars]) -> str
2.2.3 chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.
swapcase
Возвращает копию строки, в которой каждая буква будет иметь противоположный регистр.
str.swapcase() -> str
В ходе смены регистра, буквы в нижнем регистре преобразуются в верхний, а буквы в верхнем преобразуются в нижний.
title
Возвращает копию строки, в которой каждое новое слово начинается с заглавной буквы и продолжается строчными.
str.title() -> str
В результирующей строке первая буква каждого нового слова становится заглавной, в то время как остальные становятся строчными. Такое написание характерно для заголовков в английском языке.
upper
Возвращает копию исходной строки с символами приведёнными к верхнему регистру.
str.upper() -> str
Для приведения символов строки к нижнему регистру используйте метод lower().
Для проверки того, содержит ли строка только символы в верхнем регистре используйте isupper().
zfill
Дополняет указанную строку нулями слева до указанной минимальной длины.
str.zfill(width) -> str
width : Желаемая минимальная длина результирующей строки.
Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
В ходе компоновки результирующей строки ведущие знаки *+* и *-* сохраняют своё место в её начале.
Условно сходного результата можно также добиться при использовании метода str.rjust(), передав 0 в качестве второго аргумента.
Условным антонимом функции, добавляющим нули справа можно считать str.ljust(), передав 0 в качестве второго аргумента.
Форматирование при помощи %
Форматирование строк в стиле printf при помощи оператора интерполяции %.
Строки и unicode реализуют поддержку оператора % (деление по модулю; оператор интерполяции строки), который используется для форматирования строк.
Оператор заменяет маркеры в строке значениями из форматируемого объекта. Подход похож на использование sprintf() в языке Си.
Форматные строки (f-string)
Форматированные строковые литералы также известны как f-строки или форматные строки.
Форматированные строковые литералы — это литералы-строки с префиксом f или F.
Попытка использования обратных косых черт (слешей) в форматной строке (например, \n) приведёт к исключению SyntaxError.
translate
Возвращает копию строки, в которой каждый символ будет заменен через заданную таблицу перевода.
str.translate(table) -> str
Можно использовать str.maketrans() для создания таблицы посимвольного перевода
maketrans
статический метод, который возвращает таблицу для перевода для метода str.translate
str.maketrans(x[, y[, z]])
frozenset
Свойства
Статичное (неизменяемое) множество.
frozenset([iterable])
iterable : Объект, поддерживающий итерирование, элементы которого должны стать элементами статичного множества. Если не указан, будет создано пустое статичное множество.
Специально для sets
difference()
Возвращает разницу — из элементов данного множества удаляются элементы, присутствующие в указанных объектах.
sets.difference(*others) -> set/frozenset
*others : Объекты, с элементами которых требуется обнаружить разницу. До 2.6 можно было указать только один объект.
intersection()
Возвращает пересечение — элементы данного множества, также присутствующие в указанных объектах.
sets.intersection(*others) -> set/frozenset
*others : Объекты, с элементами которых требуется обнаружить пересечение.
Помимо вызова метода, для тех же целей можно использовать оператор амперсанд — &.
При использовании & все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
isdisjoint()
Производит проверку, не пересекается ли рассматриваемое множество с заданным.
sets.isdisjoint(iterable) -> bool
iterable : Объект поддерживающий итерирование, элементы которого следует проверить на пересекаемость с элементами рассматриваемого.
issubset()
Производит проверку, является ли рассматриваемое множество подмножеством заданного.
sets.issubset(iterable) -> bool
iterable : Объект поддерживающий итерирование, элементы которого будут сравнены с элементами рассматриваемого.
Как видно из примера выше, для проверки на подмножество можно использовать как метод, так и математический оператор <=. При этом метод может принимать любой объект, поддерживающий итерирование, но операторы требуют множеств по обе стороны.
Проверка на правильное подмножество реализуется при помощи оператора <.
issuperset
Производит проверку, является ли рассматриваемое множество надмножеством заданного.
sets.issuperset(iterable) -> bool
iterable : Объект поддерживающий итерирование, элементы которого будут сравнены с элементами рассматриваемого.
Как видно из примера выше, для проверки на надмножество можно использовать как метод, так и математический оператор >=. При этом метод может принимать любой объект, поддерживающий итерирование, но операторы требуют множеств по обе стороны.
Проверка на правильное надмножество реализуется при помощи оператора > .
symmetric_difference
Возвращает симметричную разницу — только те элементы, которые есть либо в одном, либо в другом, но не в обоих множествах.
sets.symmetric_difference(other) -> set/frozenset
other : Объект, с элементами которого требуется обнаружить симметричную разницу.
Помимо вызова метода, для тех же целей можно использовать оператор «карет» — ^.
При использовании ^ все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
union()
Возвращает объединение — элементы данного множества дополняются элементами, присутствующими в указанных объектах.
sets.union(*others) -> set/frozenset
*others : Объекты, с элементами которых требуется создать объединение. До 2.6 можно было указать только один объект.
Результирующее множество будет содержать уникальные элементы.
Помимо вызова метода, для тех же целей можно использовать оператор вертикальную черту (она же «труба», «пайп») — |.
При использовании | все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
Операции
Сравнение
При сравнение используется лексикографический порядок, сравниваются два элемента, идущих друг за другом, начиная с первого. Вложенные последовательности одинакового типа сравниваются рекурсивно. Последовательности равны, если их элементы равны.
for
проход по элементам
len
количество элементов
+
конкатенация
*
повторение
методы
append()
добавляет элемент в конец списка
list.append(x) -> None
count()
считает количество вхождений значения в список
list.count(val)
extend()
дополняет список элементами из указанного обхъекта
list.extend(it) -> None
index()
Ищет указанное значение в последовательности.
sequence.index(val[, start[, finish]]) -> int — индекс элемента
val : Искомое значение.
start=0 : Позиция, начиная с которой следует произвести поиск.
finish=len(sequence) : Позиция перед которой следует завершить поиск.
Метод возвращает первую из позиций (индексов), на которой в последовательности обнаруживается искомое значение.
indsert()
Добавляет указанный элемент в список на указанную позицию.
list.insert(idx, x) -> None
idx : Позиция (индекс), на которую требуется поместить элемент. Нумерация ведётся с нуля. Поддерживается отрицательная индексация.
x : Элемент, который требуется поместить в список.
pop()
Возвращает элемент [на указанной позиции], удаляя его из списка.
list.pop([i])
i=None : Позиция искомого элемента в списке (целое число). Если не указана, считается что имеется в виду последний элемент списка. Отрицательные числа поддерживаются.
remove()
Удаляет из списка указанный элемент.
list.remove(x) -> None
x : Элемент, который требуется удалить из списка. Если элемент отсутствует в списке, возбуждается ValueError.
reverse()
Перестраивает элементы списка в обратном порядке.
list.reverse() -> None
sort()
list.sort(key=None, reverse=False) -> None
3.0 cmp=None : Функция, принимающая аргументами два стоящих рядом элемента, которая должна вернуть отрицательное число (если первый меньше второго), нуль (если равны) и положительное (если первый больше второго).
key=None : Функция, принимающая аргументом элемент, используемая для получения из этого элемента значения для сравнения его с другими.
reverse=False : Флаг, указывающий следует ли производить сортировку в обратном порядке.
Данный метод модифицирует исходный объект на месте, возвращая при этом None.
copy()
копирует список
numbers.copy()
при изменении элементов в исходном контейнере они сохранятся и в копии
clear()
очищает список
numbers.clear()
базовые
object.__contains__(self, item) -> bool
Позволяет определить механизм проверки наличия элемента в объекте-контейнере.
self : Ссылка на объект.
item : Элемент, наличие которого в объекте требуется определить.
object.__iter__() -> iterator
Позволяет определить механизм прохода (итерирования) по элементам объекта.
При помощи метода можно описать механизм прохода, который будет задействован в for in.
Дополнительно
list comprehension
Списковое включение
Абстракция списков или списковое включение (англ. list comprehension) в синтаксисе некоторых языков программирования — это способ компактного описания операций обработки списков[1].
Списковое включение позволяет вычислять и бесконечные списки (в языках, которые их поддерживают). Например, на языке Миранда бесконечный список чётных положительных чисел можно записать следующим образом[1]:
Операторы
if-elif-else
for-in-else
Если тело цикла несложное, то накладные расходы на поддержание цикла интерпретатором могут оказаться существенными. В подобных случаях рекомендуется использовать генератор, составление списка, либо функцию map().
опции
else
Когда элементы исчерпаны (например, исчерпана последовательность, либо итератор возбудил исключение StopIteration) выполняется часть инструкции, идущая после else (если эта часть присутствует) и цикл завершается.
break
Инструкция break позволяет прервать цикл. При этом часть после else не будет выполнена.
continue
Инструкция continue позволяет «проскочить» исполнение следующего после неё кода и продолжить проход по следующим элементам.
для tuple
для dict
Функции
Встроенные
сложные
compile
Компилирует исходный код в объект кода, либо объект АСД.
compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) -> Объект кода, либо объект АСД
filename : Файл, из которого прочитан код. Если код не был считан из файла, можно передать любое значение, например строку <string>.
mode : Режим компиляции кода: exec, если код состоит из последовательности инструкций; eval, если код содержит одно выражение; single, если код состоит из одной инструкции. Если код содержит несколько строк, то при использовании режимов single и eval (а до версии 3.2 ещё и exec), нужно завершить ввод не меньшей мере одним символом перевода строки. 2.7 Поддержка переводов строк из Windows и Mac.
2.3 flags=0 : Указывает, какие инструкции из __future__ следует использовать. Указывается битами, которые можно OR-ить, чтобы задать несколько инструкций. Биты можно подсмотреть в __future__._Feature.compiler_flag. См. PEP 236.
2.3 dont_inherit=False : Следует ли использовать __future__ определенные в коде, вызвавшем compile(), в дополнение в тем, что указаны во flags.
3.2 optimize=-1 : Задаёт уровень оптимизации компилятора: -1 — использовать настройки интерпретатора (регулируются опцией -O); 0 — не оптимизировать, включить __debug__; 1 — убрать инструкции asserts, выключить __debug__; 2 — убрать ещё и строки документации.
classmethod
Представляет указанную функцию методом класса.
classmethod(function) -> Метода класса
function : Функция, которую следует представить методом класса.
Методы класса реализованы при помощи дескрипторов.
простые
enumerate()
Возвращает генератор, отдающий пары счётчик-элемент для элементов указанной последовательности.
enumerate(sequence[, start=0]) -> generator Выдаёт пары счётчик-элемент
sequence : iterable Любая последовательность, итератор, или объект, поддерживающий итерирование.
2.6 start=0 : int Начальное значение счётчика.
Функция применяется в случаях, когда необходим счётчик количества элементов в последовательности.
Позволяет избавиться от необходимости инициализировать и обновлять отдельную переменную-счётчик:
all
Проверяет, все ли указанные элементы принимают значение «истина».
all(iterable) -> bool
iterable : Объект, поддерживающий итерирование.
Вернёт True, если все элементы итерируемого объекта представляются истиной (True).
Также возвращает True, если итерируемый объект пуст.
abs
Возвращает абсолютную величину.
abs(x) -> Абсолютная величина для x
x : Целое, либо число с плавающей точкой.
Возвращает абсолютную величину для переданного аргумента x.
Для комплексного числа возвращает его модуль.
any
Проверяет, есть ли среди указанных элементов хотя бы один, принимающий значение «истина».
any(iterable) -> bool
iterable : Объект, поддерживающий итерирование.
Возвращает False, если итерируемый объект пуст.
Вернёт True, если любой из элементов итерируемого объекта явится истиной.
ascii
Возвращает строковое представление объекта с экранированными не-ASCII символами.
ascii(object) -> str
object : Объект, для которого требуется создать строковое представление.
Как и repr(), возвращает строковое представление объекта object, но при этом экранирует не-ASCII символы, возвращённые repr() при помощи \x, \u или \U.
bin
Преобразует целое число в двоичную строку.
bin(x) -> str
x : Целое число. Если x не является объектом int, следует определить для него метод __index__(), возвращающий целое.
Преобразует целое число в двоичную строку. Результатом будет полноценное Python-выражение.
chr
Возвращает символ по его числовому представлению.
chr(i) -> str
i : Целое, которое следует представить в виде символа.
Возвращает символ (в виде строки), чья позиция кода для Юникод равна указанному целому i. Аргумент должен располагаться в пределах от 0 до 1,114,111 (0x10FFFF), в противном случае возбуждается исключение ValueError.
Функция имеет антипода — ord().
ord
Возвращает числовое представление для указанного символа.
ord(chr) -> int
chr : Символ, который следует представить в виде целого.
callable
Возвращает True для объекта, поддерживающего вызов.
callable(obj) -> bool
obj : Объект, который следует проверить на поддержку вызова.
Вернёт True, если obj поддерживает возможность вызова, иначе — False.
атрибуты
delattr
Удаляет из объекта указанный атрибут.
delattr(obj, name)
obj : object Объект, из которого следует удалить атрибут.
name : str Строка с именем атрибута, который должен быть удалён из указанного объекта.
Атрибут объекта (свойство, метод, элемент) будет удалён в случае, если объект разрешает/поддерживает это действие.
getattr
Возвращает значение атрибута объекта.
getattr(obj, name[, default])
obj : object Объект, значение атрибута которого требуется получить.
name : str Имя атрибута, значение которого требуется получить.
default : Значение по умолчанию, которое будет возвращено, если объект не располагает указанным атрибутом. Если не задано, и атрибут отсутствует, возбуждается исключение AttributeError.
Функция возвращает значение атрибута указанного объекта по имени.
setattr
Добавляет объекту указанный атрибут.
setattr(obj, name, value)
obj : object Объект, который следует дополнить атрибутом.
name : str Строка с именем атрибута. Можно указывать как имя нового, так и существующего атрибута.
value : Произвольное значение атрибута.
Атрибут объекта (свойство, метод, элемент) будет добавлен в случае, если объект разрешает/поддерживает это действие.
hasattr
Возвращает флаг, указывающий на то, содержит ли объект указанный атрибут.
hasattr(obj, name) -> bool
obj : object Объект, существование атрибута в котором нужно проверить.
name : str Имя атрибута, существование которого требуется проверить.
Возвращает True, если атрибут существует, иначе — False.
dir
Возвращает имена [переменных], доступные в локальной области, либо атрибуты указанного объекта в алфавитном порядке.
dir([obj]) -> list — Список имён/атрибутов в алфавитном порядке.
obj : Объект, для которого следует вернуть имена атрибутов.
При вызове без аргумента, возвращает имена [переменных], доступные в локальной области, иначе — атрибуты указанного объекта.
divmod
Возвращает пару частное-остаток от деления аргументов.
divmod(a, b) -> tuple(частное, остаток)
a : Число. Делимое.
b : Число. Делитель.
Если аргументы являются разными типами, действуют правила двоичной арифметики.
eval
Разбирает и исполняет указанное выражение.
eval(expression, globals=None, locals=None) -> Результат выполненного выражения
expression : Выражение, которое требуется исполнить, в виде строки. Либо объект кода.
globals=None : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить выражение. Если указан, но не содержит атрибута __builtins__ данные указанного пространства будут дополнены данными общего глобального пространства, перед разбором выражения. Таким образом, выражение будет иметь доступ ко всем встроенным модулям.
locals=None : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить выражение. Если не указано, то используется словарь глобального пространства.
Если оба аргумента опущены, то выражение будет выполнено в среде, где был осуществлён вызов функции.
В случае ошибок возбуждает SyntaxError.
exec
Динамически исполняет указанный код.
exec(obj[, globals[, locals]]) -> None
obj : Строка кода, либо объект кода. Поддерживается ввод данных из файлов (считываются до EOF). Если передана строка, она разбирается в набор инструкций, который потом исполняется (если отсутствуют синтаксические ошибки). Если передан объект кода, то он исполняется. 2 Необязательные аргументы (см. ниже) могут быть указаны в виде кортежа прямо после инструкции.
globals : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить код. Если locals не передан, будет использован globals. Если словарь не имеет значения по ключу __builtins__, на это место вставляется ссылка на значение аналогичного атрибута глобального пространства. Модифицировав __builtins__ словаря передаваемого в функцию, вы можете контролировать, какие какие из встроенных инструментов будут доступны коду.
locals : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить код.
Если дополнительные параметры опущены, код исполняется в текущем пространстве.
filter
При помощи указанной функции фильтрует элементы переданного объекта.
func : Фильтрующая функция. Должна принимать элемент фильтруемого объекта. Если функция вернёт False, данный элемент не попадёт в результат. Если передано None, считается что требуется применить тождественное отображение (lambda *args: args), таким образом все элементы, оцениваемые как False будут отфильтрованы.
iterable : Объект, элементы которого следует отфильтровать. Может быть последовательностью, объектом поддерживающим итерирование, либо итератором. До 3.0, если объект является строкой, или кортежем, результат будет соответствующего типа, в остальных случаях возвращается список.
format
Форматирует указанное значение.
format(value[, format_spec]) -> str
value : Значение, которое требуется отформатировать.
format_spec : Настройки формата, в соответствии с которыми требуется выполнить форматирование. Интерпретация настроек зависит от типа значения. По умолчанию — пустая строка (обычно приводит к тому же эффекту, что и применение str()).
globals
Возвращает словарь с глобальной таблицей символов, определённых в модуле.
globals() -> dict
hash
Возвращает хеш указанного объекта.
hash(obj) -> int
obj : Объект, хеш которого требуется получить.
help
Вызывает встроенную справочную систему.
help([obj])
obj : Если передана строка, то производится попытка интерпретировать её как имя модуля, функции, класса, метода, или раздела документации, после чего справка выводится в консоль. Если передан объект любого другого типа, страница справки генерируется по его данным.
hex
Возвращает строку с шестнадцатеричным представлением указанного целого.
hex(i) -> str
i : Целое, для которого требуется вычислить шестнадцатеричное представление. 3.0 Может быть передан любой объект, реализующий метод __index__() , возвращающий целое.
id
Возвращает идентификатор указанного объекта.
id(obj) -> int
obj : Объект, идентификатор которого требуется получить.
Возвращает целое, гарантированно являющееся уникальным и постоянным для объекта на время его существования.
Таким образом, объекты, периоды существования которых не пересекаются, могут иметь одинаковый идентификатор.
input
Считывает и возвращает строку входных данных.
input([prompt])
prompt : Строка-приглашение, которая должна быть отправлена на стандартное устройство вывода (заключительный перевод каретки при этом удаляется).
isinstance
Возвращает флаг, указывающий на то, является ли указанный объект экземпляром указанного класса (классов).
isinstance(obj, classinfo) -> bool
obj : Объект, требующий проверки.
classinfo : Класс, либо кортеж с классами, либо рекурсивный кортеж кортежей. Другие типы последовательностей не поддерживаются. Если аргумент не является классом, либо кортежем с классами, возбуждается TypeError.
issubclass
Возвращает флаг, указывающий на то, является ли указанный класс подклассом указанного класса (классов).
issubclass(cls, classinfo) -> bool
cls : Класс, требующий проверки.
classinfo : Класс, либо кортеж с классами. Если аргумент не является классом, либо кортежем с классами, возбуждается TypeError.
iter
Возвращает объект итератора.
len
Возвращает число элементов в указанном объекте-контейнере.
Применяет указанную функцию к каждому элементу указанной последовательности/последовательностей.
map(func, iterable, ...) -> 3.0 iterator | list
func : Функция, которую следует применить к элементам последовательности или последовательностей. Должна принимать количество элементов равное количеству последовательностей. До 3.0, если передано None, считается что требуется применить тождественное отображение (lambda *args: args), при этом, если передано несколько последовательностей результат будет содержать кортежи с данными из каждой из них.
iterable : Последовательность (или объект, поддерживающий итерирование), к элементам которой требуется применить функцию. Итератор останавливается, когда самая короткая из последовательностей исчерпана. До 3.0, если в какой-либо из последовательностей количество элементов меньше, чем в остальных, недостающие элементы считаются None.
max
Возвращает элемент с набольшим значением из переданных в функцию.
min
Возвращает элемент с наименьшим значением из переданных в функцию.
next
Возвращает следующий элемент итератора.
oct
Возвращает строку с восмеричным представлением указанного целого.
open
Открывает файл и возвращает представляющий его объект.
ord
Возвращает числовое представление для указанного символа.
pow
Возвращает результат возведения числа в степень, с опциональным делением по модулю.
pow(x, y[, z])
x : Число, которое требуется возвести в степень.
y : Число, являющееся степенью, в которую нужно возвести первый аргумент. Если число отрицательное, аргумент z не принимается.
z : Число, на которое требуется произвести деление по модулю. Если число указано, ожидается, что x и y положительны и имеют тип int.
print
Отправляет указанные объекты текстовым потоком в файл.
repr
Возвращает формальное строковое представление указанного объекта.
reversed
Возвращает обратный итератор по указанной последовательности.
round
Возвращает число с плавающей запятой, округлённое до указанного количества цифр после запятой.
sorted
Возвращает новый отсортированный список, составленный из элементов итерирующегося объекта.
staticmethod
Представляет указанную функцию статичным методом.
sum
Суммирует элементы указанного объекта и возвращает результат.
super
Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
vars
Возвращает словарь из атрибута __dict__ указанного объекта.
zip
Возвращает итератор по кортежам, где i-тый кортеж содержит i-тый элемент каждой из указанных последовательностей.
zip(*iterables) -> 3.0 iterator 3.0 list
iterables : Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор.
def
Если много аргументов
def calc_taxes(*args):
for x in args:
print(f'Got payment = {x}')
return sum(args) * 0.06
def save_players(**kwargs):
for k, v in kwargs.items():
print(f'Player {k} has rating {v}')
save_players(Carlsen=2800, Giri=2780)
vars in local scope
global
назначает global scope внутри функции
Декоратор
Функция, возвращающая другой объект, поддерживающий вызов.
Обычно используется для трансформации поведения существующей функции (или класса) с использованием синтаксической конструкции @обёртка (декораторное выражение).
Результатом декорирующей функции должен являться объект, поддерживающий вызов, который и будет связан с именем оригинального, вместо самого оригинального объекта.
Определение функции или класса, может быть задекорировано один или несколько раз. Декораторные выражения вычисляются в ходе обработки объявлений функций/классов в той области видимости, в которой определён декорируемый объект (функция, класс).
from functools
update_wrapper()
Дополняет функцию-обёртку, данными из некоторых атрибутов оборачиваемой функции.
assigned=WRAPPER_ASSIGNMENTS : Кортеж с именами атрибутов оборачиваемой функции, которые следует перенести в обёртку.
updated=WRAPPER_UPDATES : Кортеж с именами атрибутов оборачиваемой функции, которыми следует обновить обёртку.
Этот декоратор существует для облегчения применения функции functools.update_wrapper() и призван обрамлять функцию-обёртку.
Ошибки
BaseException
Типы ошибок
ArithmeticError
Исключение, возникающее в ходе выполнения арифметических операций.
Базовый класс для для встроенных исключений, поднимаемых при различных арифметических ошибках.
AssertionError
Возникает в случаях когда assert не увенчалась успехом.
AttributeError
Исключение, возникающее в ходе обращения к атрибуту объекта.
Возбуждается в случаях ошибок доступа к атрибуту, либо его установки.
BufferError
Исключение, возникающее в ходе операций с буфером.
Поднимается в случае, когда операция, тем или иным образом связанная с буфером, не может быть выполнена.
EOFError
Исключение, возникающее в случае обнаружения маркера EOF в ходе считывания данных.
Поднимается встроенными функциями, например, input() и raw_input(), когда те обнаруживают маркер конца файла (EOF) в данных.
Методы io.IOBase.read() и io.IOBase.readline(), например, file.read() и file.readline(), в случае обнаружения EOF возвращают пустую строку.
GeneratorExit
Исключение, возникающее при запросе закрытия генератора/сопрограммы.
Исключение поднимается методом .close() генератора/сопрограммы.
Используется для управления генератором/сопрограммой извне.
ImportError
Исключение, возникающее в случае неудачи импорта модуля.
Поднимается, в случаях когда инструкции import не удаётся отыскать модуль, либо когда from ... import ... не находит атрибута, который требуется импортировать.
LookupError
Базовое исключение для ошибок доступа по ключу/индексу.
Этот тип является базовым для исключений, поднимаемых в случаях когда производится обращение по несуществующему ключу или индексу в отображениях и последовательностях.
Кроме этого, может возбуждаться напрямую в codecs.lookup().
IndexError
Исключение, возникающее при обращении к элементу по индексу, находящемуся вне диапазона.
Поднимается при попытках обратиться к элементу последовательности, используя индекс, выходящий за пределы поддерживаемого последовательностью диапазона.
При работе со срезами индексы автоматически приводятся к поддерживающимся диапазоном.
KeyError
Исключение, возникающее при обращении к элементу по ключу, отсутствующему в отображении.
MemoryError
Исключение, возникающее в некритичных случаях исчерпания свободной памяти.
NameError
Исключение, возникающее в случаях, когда глобальное или локальное имя не найдено.
Исключение относится только к неуточнённым именам.
OSError
Исключение, используемое для описания системных ошибок.
OSError([arg]) или OSError(errno, strerror[, filename[, winerror[, filename2]]])
arg : Кортеж аргументов (см. в описании ниже).
либо
errno : Числовой идентификатор ошибки из одноимённой переменной Си.
strerror : Текстовое описание ошибки, полученное от операционной системы. Форматируется при помощи Си функции perror() и FormatMessage() (на POSIX и Windows соответственно).
filename=None : Связанное имя файла. 3.4 Содержит имя файла, в том виде, в каком оно было передано в функцию (ранее значение обрабатывалось в соответствии с кодировкой файловой системы).
winerror=None : На Windows принимает родной для этой ОС код ошибки (в таких случаях errno — это примерное соответствие кода для POSIX-систем), на прочих системах — не используется, а одноимённый атрибут объекта-исключения не существует.
3.4 filename2=None : Связанное имя файла. Обычно содержит второе имя файла, переданное в функцию (например, актуально для os.rename()).
ReferenceError
Исключение, возникающее при попытке обращения к атрибуту объекта через слабую ссылку, когда упомянутый объект уже недоступен.
Исключение поднимается при попытке доступа к атрибуту прокси-объекта слабой ссылки, созданного при помощи weakref.proxy(), в случае, когда основной объект, для которого создавался прокси, уже недоступен (был удалён сборщиком мусора).
За детальной информацией о слабых ссылках обратитесь к описанию модуля weakref.
RuntimeError
Исключение, описывающее ошибку времени исполнения не попадающую в другие категории.
«Прикрепленное значение» являет собой строку с описанием того, что конкретно пошло не так.
StopAsyncIteration
Используется для остановки асинхронного прохода.
Это исключение обрабатывается конструкцией async for и должно возбуждаться методом __anext__() асинхронного итератора для индикации остановки итерирования.
StopIteration
Исключение, сигнализирующее, что итератор исчерпывал доступные значения.
Поднимается функцией next(), чтобы сигнализировать, что итератор исчерпал доступные значения.
SyntaxError
Исключение, поднимаемое парсером при обнаружении синтаксических ошибок в исходном коде.
Исключение может подниматься при обработке инструкции import, вызовах встроенных функций exec(), eval(), или при считывании изначального скрипта или стандартного ввода (в том числе в интерактивном режиме).
Атрибуты объекта исключения
filename — Файл, в котором обнаружена ошибка. Кроме того: <string>, <stdin>.
lineno — Номер строки.
offset — Отступ (позиция от начала строки).
text — Кусок кода, в котором обнаружена ошибка.
SystemError
Исключение, возникающее в случаях ошибок уровня интерпретатора.
Подымается, когда интерпретатор сталкивается со внутренней ошибкой, недостаточно критичной, чтобы её нельзя было обработать.
«Прикрепленное значение» является строкой, которая описывает причину исключения.
TypeError
Исключение, возникающее при попытке манипуляции объектом не поддерживающим такого рода манипуляцию.
Поднимается, если операция, либо функция применяется к объекту несовместимого типа (к тому, который её не поддерживает).
ValueError
Исключение, возникающее в случаях, когда в функцию передан аргумент с неподдерживаемым значением.
UnicodeError
Исключение, возникающее в случае ошибок, связанных с Юникодом.
object — Объект, который кодек пытался кодировать/декодировать.
start — Начальная позиция (индекс) ошибочных данных в объекте.
end — Позиция после ошибочных данных в объекте.
Подтипы
UnicodeDecodeError
Исключение, возникающее при ошибках декодирования в юникод.
UnicodeEncodeError
Исключение, возникающее при ошибках кодирования из юникод.
UnicodeTranslateError
Исключение, возникающее в случае ошибки трансляции Юникод.
Поднимается в случае, ошибок трасляции символов Юникод.
Обычно обрабатывается в функциях обратного вызова при кодировке (например, встроенные strict, ignore, replace, xmlcharrefreplace и пр.).
Warning
Базовый класс для исключений-предупреждений.
Данное семейство исключений представляет собой различные категории предупреждений.
Свойства
BaseException.args
Аргументы, переданные в инициализатор исключения.
BaseException.with_traceback
Заставляет поднимаемое исключение дополнительно использовать указанную трассировку стека.
BaseException.with_traceback(traceback)
traceback : Объект трассировки. Например, из sys.exc_info()[2].
KeyboardInterrupt
Исключение, возникающее когда пользователь нажимает определённые клавиши прерывания процесса.
SystemExit
Исключение, поднимаемое sys.exit(), для остановки работы интерпретатора.
Обработка ошибок в функциях
try функция except тип ошибки + общий except
finally
то, что обрабатывается несмотря на ошибки после try
используется для завершения (не для логики)
В этом необязательно блоке можно определить код «уборки». Инструкции из этого блока будут выполнены после выполнения всех прочих блоков, в том числе если исключение не было обработано (в этом случае оно будет возбуждено повторно в конце блока finally автоматически) и если в блоке try присутствуют return или break. При этом информация об исключении недоступна.
else
выполняется независимо от успеха try
используется для логики
Инструкции в этом необязательном блоке выполняются по завершению блока try без исключений, а также без return, continue и break.
raise
Возбуждает указанное исключение.
Инструкция позволяет прервать штатный поток исполнения при помощи возбуждения исключения.
Unittests
import unittest
ООП
Общее
Преимущества
Объектно-ориентированное программирование подразумевает повторное использование. Компьютерная программа написанная в форме объектов и классов может быть использована снова в других проектах без повторения кода;
Использование модулярного подхода в объектно-ориентированном программировании позволяет получить читаемый и гибкий код;
В объектно-ориентированном программировании каждый класс имеет определенную задачу. Если ошибка возникнет в одной части кода, вы можете исправить ее локально, без необходимости вмешиваться в другие части кода;
Инкапсуляция данных (которую мы рассмотрим дальше в статье) вносит дополнительный уровень безопасности в разрабатываемую программу с использованием объектно-ориентированного подхода;
Недостатки
Для создания объектов необходимо иметь подробное представление о разрабатываемом программном обеспечении;
Не каждый аспект программного обеспечения является лучшим решением для реализации в качестве объекта. Для новичков может быть тяжело прочертить линию в золотой середине;
С тем, как вы вносите все новые и новые классы в код, размер и сложность программы растет в геометрической прогрессии;
Классы
понятие
Класс в объектно-ориентированном программировании выступает в роли чертежа для объекта. Класс можно рассматривать как карту дома. Вы можете понять, как выглядит дом, просто взглянув на его карту.
Объект - экземпляр класса. по умолчанию, нам нужно создать объект класса перед тем, как мы сможем начать использовать его методы и атрибуты
задается с помощью class Название:
атрибуты
модификаторы доступа
публичный — public
Константы
uppercase
защиты от изменения нет
защищенный — protected
название начинается с _
не используются извне, но могу быть использованы внутри и наследниками
приватный — private
название начинается с __
не могут использованы извне и в наследниках, только внутри класса
для доступа к атрибуту извне надо указать класс__артибут
разделение доступа к атрибутам работает только по соглашению и разделению по типу написания
типы по отношению
атрибуты класса
Атрибуты класса делятся среди всех объектов класса
объявляются вне любого метода
атрибуты экземпляров
являются собственностью экземпляра
объявляются внутри любого метода
области видимости
Локальные переменные
Локальная переменная в классе — это переменная, доступ к которой возможен только внутри блока кода, в котором она определена. Например, если вы определите переменную внутри метода, к нему не удастся получить доступ откуда-либо вне метода.
мы не можем получить доступ к локальной переменной вне блока, где эта локальная переменная была определена
Глобальная переменная
Глобальная переменная определяется вне любого блока, то есть метода, операторов-if, и тому подобное. Доступ к глобальной переменной может быть получен где угодно в классе.
методы
свойства
методы используются для реализации функционалов объекта
Возврат множественных значений из метода
методы класса могут возвращать множественные значения
типы
Методы классов
@classmethod
аналогичны методам экземпляров, но выполняются не в контексте объекта, а в контексте самого класса (классы – это тоже объекты). Такие методы создаются с помощью декоратора @classmethod и требуют обязательную ссылку на класс (cls).
Статичные методы
@staticmethod
Для объявления статического метода, вам нужно указать дескриптор @staticmethod перед названием метода
нет обязательных параметров-ссылок вроде self. Доступ к таким методам можно получить как из экземпляра класса, так и из самого класса
абстрагирован от класса
Пример
базовые
Метод str
Каждый объект Python по умолчанию содержит метод __str__ . Когда вы используете объект в качестве строки, вызывается метод __str__ , который по умолчанию выводит локацию памяти объекта. Однако, вы также можете предоставить собственное определение метода __str__ .
Конструкторы
__init__
Конструктор — это специальный метод, который вызывается по умолчанию когда вы создаете объект класса.
Для создания конструктора вам нужно создать метод с ключевым словом __init__
конструктор может использоваться как обычный метод. Вы можете передавать и получать значения из конструктора. Он обычно используется таким образом, когда вам нужно инициализировать значения атрибута при создании экземпляра класса.
в 1 классе может быть 1 конструктор
магические методы (dunder), которые можно перегрузить/переопределить
__init__(self[, ...])
конструктор объектов класса, вызывается при создании объектов
__del__(self)
вызывается при удалении объекта сборщиком мусора.
__str__(self)
преобразование объекта к строковому представлению, вызывается функциями str, print и format. Возвращает строковое представление объекта.
__add__()
метод перегрузки оператора сложения, вызывается, когда объект участвует в операции сложения будучи операндом с левой стороны
__setattr__()
вызывается, когда атрибуту объекта выполняется присваивание
__new__(cls[, ...])
управляет созданием экземпляра. В качестве обязательного аргумента принимает класс (не путать с экземпляром). Должен возвращать экземпляр класса для его последующей его передачи методу __init__
__repr__(self)
вызывается встроенной функцией repr; возвращает "сырые" данные, использующиеся для внутреннего представления в python.
__bytes__(self)
вызывается функцией bytes при преобразовании к байтам.
__format__(self, format_spec)
используется функцией format (а также методом format у строк).
__lt__(self, other)
x < y вызывает x.__lt__(y).
__le__(self, other)
x ≤ y вызывает x.__le__(y).
__eq__(self, other)
x == y вызывает x.__eq__(y).
__ne__(self, other)
x != y вызывает x.__ne__(y)
__gt__(self, other)
x > y вызывает x.__gt__(y).
__ge__(self, other)
x ≥ y вызывает x.__ge__(y).
__hash__(self)
получение хэш-суммы объекта, например, для добавления в словарь.
__bool__(self)
вызывается при проверке истинности. Если этот метод не определён, вызывается метод __len__ (объекты, имеющие ненулевую длину, считаются истинными).
__getattr__(self, name)
вызывается, когда атрибут экземпляра класса не найден в обычных местах (например, у экземпляра нет метода с таким названием).
__setattr__(self, name, value)
назначение атрибута.
__delattr__(self, name)
удаление атрибута (del obj.name).
__call__(self[, args...])
вызов экземпляра класса как функции.
__len__(self)
длина объекта.
__getitem__(self, key)
доступ по индексу (или ключу).
__setitem__(self, key, value)
назначение элемента по индексу.
__delitem__(self, key)
удаление элемента по индексу.
__iter__(self)
возвращает итератор для контейнера.
__reversed__(self)
итератор из элементов, следующих в обратном порядке.
__contains__(self, item)
проверка на принадлежность элемента контейнеру (item in self).
арифметические
__add__(self, other)
сложение. x + y вызывает x.__add__(y).
__sub__(self, other)
вычитание (x - y).
__mul__(self, other)
умножение (x * y).
__truediv__(self, other)
деление (x / y).
__floordiv__(self, other)
целочисленное деление (x // y).
__mod__(self, other)
остаток от деления (x % y).
__divmod__(self, other)
частное и остаток (divmod(x, y)).
__pow__(self, other[, modulo])
возведение в степень (x ** y, pow(x, y[, modulo])).
делают то же самое, что и арифметические операторы, перечисленные выше, но для аргументов, находящихся справа, и только в случае, если для левого операнда не определён соответствующий метод.
Например, операция x + y будет сначала пытаться вызвать x.__add__(y), и только в том случае, если это не получилось, будет пытаться вызвать y.__radd__(x). Аналогично для остальных методов.
Выглядят как метод с добавлением декоратора @property
Доступно только для чтения, нельзя изменять параметр
могут иметь логику
доступ как к атрибуту
может иметь возможность записи
Свойство имеет три части. Вам нужно определить атрибут, который является моделью в скрипте выше. Затем, вам нужно определить свойство атрибута, используя декоратор @property. Наконец, вам нужно создать установщик свойства, который является дескриптором @model.setter в примере выше.
Метаклассы
Метаклассы – это классы, инстансы которых тоже являются классами.
Абстрактные классы в Python
Абстрактным называется класс, который содержит один и более абстрактных методов. Абстрактным называется объявленный, но не реализованный метод. Абстрактные классы не могут быть инстанциированы, от них нужно унаследовать, реализовать все их абстрактные методы и только тогда можно создать экземпляр такого класса. В Python отсутствует встроенная поддержка абстрактных классов, для этой цели используется модуль abc (Abstract Base Class)
ABC
Абстрактные базовые классы
Начиная с версии языка 2.6 в стандартную библиотеку включается модуль abc, добавляющий в язык абстрактные базовые классы
Невозможно создать инстанцию (объект) от абстрактного класса
Если абстрактный метод абстрактного класса не определен в дочернем классе, то будет возникать ошибка при создании объекта дочернего класса
переиспользуемую логику можно сделать в абстрактных методах
модуль ABC нужен для определения класса и его методов абстрактными
@abstractmethod
абстрактный метод
mix in
При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.
В объектно-ориентированных языках программирования является способом реализации классов, отличным от широко используемых принципов, пришедших из языка программирования Simula. Механизм впервые реализован в Flavors. Преимуществом примесей является то, что повышая повторную используемость текстов программ, этот метод избегает многих проблем множественного наследования. Однако при этом метод накладывает свои ограничения.
В языке с использованием примесей класс определяется только с атрибутами и параметрами, связанными с классом. Методы определяются в другом месте, как в Flavors и CLOS, и являются обобщёнными функциями. Последние реализуются для различных типов посредством диспетчеризации.
Объекты
Суть
Полиморфизм
суть
способность объекта вести себя по-разному
Полиморфизм в программировании реализуется через перегрузку метода, либо через его переопределение.
Перегрузка метода
Перегрузка метода относится к свойству метода вести себя по-разному, в зависимости от количества или типа параметров.
Переопределение метода
Переопределение метода относится к наличию метода с одинаковым названием в дочернем и родительском классах. Определение метода отличается в родительском и дочернем классах, но название остается тем же.
Наследование
наследование означает отношение IS-A
Класс может наследовать характеристики другого класса. Класс, который наследует другой класс, называется дочерним классом или производным классом, и класс, который дает наследие, называется родительским, или основным.
Множественное наследование
родительский класс может иметь несколько дочерних, и, аналогично, дочерний класс может иметь несколько родительских классов
негативные последствия (проблемы)
deadly diamond of death
семантическая неопределённость часто совокупно представляется как Проблема ромба[4].
Ромбовидное наследование
В Python проблема ромба остро встала в версии 2.3 после введения классов с общим предком object; начиная с этой версии было решено создавать список разрешения при помощи C3-линеаризации[1]. В случае ромба это означает поиск в глубину, начиная слева (D, B, A, C, A), а затем удаление из списка всех, кроме последнего включения каждого класса, который в списке повторяется. Следовательно, итоговый порядок разрешения выглядит так: [D, B, C, A].
Поиск в гублину
C3-линеаризация
Method Resolution Order
отсутствует возможность непосредственного многократного наследования от одного класса.
порядок наследования изменяет семантику класса. Конструктор дочернего класса вызывает конструкторы непосредственных родителей, а те, в свою очередь — конструктор прародителя. Однако прародительский объект имеется в единственном экземпляре и конструировать его дважды нельзя, поэтому сработает вызов конструктора прародителя только конструктором первого родительского класса в списке наследования.
super()
Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
super([type[, object-or-type]])
type : Тип, от которого следует начать поиск объекта-посредника. 3.0 Ранее атрибут был обязателен.
obj-or-type : Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого isinstance(obj, type) возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого issubclass(subtype, type) возвращает True.
Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.
Инкапсуляция
Под инкапсуляцией в объектно-ориентированном программировании понимается упаковка данных и методов для их обработки вместе, т. е. в классе. В Python инкапсуляция реализуется как на уровне классов, так и объектов.
Инкапсуляция в ООП понимается двояко. Во многих языках этот термин обозначает сокрытие данных, то есть невозможность напрямую получить доступ к внутренней структуре объекта, так как это небезопасно. Например, наполнить желудок едой можно напрямую, положив еду в желудок. Но это опасно. Поэтому прямой доступ к желудку закрыт. Чтобы наполнить его едой, надо совершить ритуал, через элемент интерфейса под названием рот.
В Python нет такой инкапсуляции, хотя она является одним из стандартов ООП. В Python можно получить доступ к любому атрибуту объекта и изменить его. Однако в Питоне есть механизм, позволяющий имитировать сокрытие данных, если это так уж необходимо.
Отсутствие сокрытия данных в Python делает программирование на нем более легким и понятным, но привносит ряд особенностей, связанных с пространствами имен.
Второй смысл инкапсуляции – объединение свойств и поведения в единое целое, т. е. в класс. Инкапсуляция в этом смысле подразумевается самим определением объектно-ориентированного программирования и есть во всех ОО-языках.
Все объекты в Python инкапсулируют внутри себя данные и методы работы с ними, предоставляя публичные интерфейсы для взаимодействия.
Ассоциация
Композиция
Еще одной особенностью объектно-ориентированного программирования является возможность реализовывать так называемый композиционный подход. Заключается он в том, что есть класс-контейнер, он же агрегатор, который включает в себя вызовы других классов. В результате получается, что при создании объекта класса-контейнера, также создаются объекты включенных в него классов.
Агрегация
Ассоциированные объекты могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора. Избежать подобных проблем при ассоциации помогают слабые ссылки (модуль weakref).
Дополнительная инфа
Бинарные деревья
Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.