1. Objects
    1. containers
      1. Типы
        1. изменяемые
          1. list
          2. Свойства
          3. изменяемая последовательность с упорядоченными элементами.
          4. iterable : Последовательность или объект, поддерживающий итерирование (включая генераторы).
          5. Элементами списков могут выступать любые объекты.
          6. Действия
          7. Объявление
          8. В коде списки могут быть объявлены при помощи квадратных скобок — [] — внутри скобок через запятую перечисляются элементы в нужной последовательности.
          9. Кроме того, можно объявить их при помощи конструктора list().
          10. Замена элементов
          11. Для замены значений используется обращение по индексу с последующим присвоением нового значения.
          12. Удаление элементов
          13. Для удаления из списка одиночных элементов и срезов может использоваться инструкция del:
          14. При удалении списка (например, с помощью del, или сборщика мусора), его опустошенный объект кешируется и используется в последующем для создания нового списка. См. пример ниже.
          15. Сравнение
          16. Два списка сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:
          17. Порядок элементов
          18. Элементы в списках упорядочены по очередности их добавления.
          19. array.array
          20. Неизменяемая последовательность, позволяющая компактно хранить объекты одного из базовых типов.
          21. set
          22. Свойства
          23. Изменяемое множество.
          24. set([iterable])
          25. iterable : Объект, поддерживающий итерирование, элементы которого должны стать элементами множества. Если не указан, будет создано пустое множество.
          26. Множества могут быть созданы литералом при помощи фигурных скобок {, } с указанием элементов в них:
          27. Помните, что конструкция {} создаст не пустое множество, а пустой словарь. Пустое множество создаётся при помощи set() (см. выше).
          28. Для создания множества множеств, требуется чтобы внутренние множества были статичными (frozenset).
          29. элементы дедублицируются
          30. discard
          31. Удаляет указанный элемент из множества, если он там присутствует.
          32. set.discard(el)
          33. el : Элемент, который требуется убрать из множества.
          34. У множеств существует схожий метод set.remove(), возбуждающий исключение при попытке удаления отсутствующего элемента.
          35. dict
          36. Словарь — изменяемый объект-отображение.
          37. dict([obj, ][**kwargs])
          38. obj : Первым необязательным позиционным аргументом может являться отображение или итерирующийся объект (при этом каждый его элемент должен быть тоже итерирующемся и содержать ровно два объекта).
          39. **kwargs : Поддерживаются также необязательные именованные аргументы. При использовании вкупе с позиционными аргументами и совпадении ключей значениями из именованных пользуются приоритетом.
          40. Ключи Ключами словаря могут являться только объекты, поддерживающие хеширование. Таким образом, использовать в качестве ключей списки, словари и другие изменяемые типы не получится. Если в словарь будут добавлены несколько значений с одним и тем же ключом, словарь сохранит последнее.
          41. Операции
          42. Объявление
          43. В коде словари могут быть объявлены при помощи фигурных скобок — {} .
          44. Кроме того, можно объявить их при помощи конструктора dict().
          45. Получение значений
          46. Доступ к значениям производится при помощи ключей.
          47. Установка значений
          48. Кроме установки значений при создании словаря, можно дополнять его по мере надобности.
          49. in
          50. Определение наличия/отсутствия элемента
          51. 2.2 Определить, присутствует ли ключ в словаре можно при помощи конструкции in.
          52. 2.2 Определить, отсутствует ли ключ в словаре можно при помощи антонимичной конструкции not in.
          53. обновление элемента
          54. players['So'] = 2781 #update
          55. Количество элементов в словаре
          56. Количество элементов можно получить, используя функцию len().
          57. преобразование ключей в список
          58. list
          59. list(players.keys())
          60. for
          61. for k, v in players.items(): print(k, v)
          62. При сравнении не учитывается порядок элементов
          63. Исключение: OrderedDict
          64. from collections import OrderedDict
          65. d1 = OrderedDict()
          66. сохраняет заданный порядок
          67. методы
          68. get
          69. Возвращает значение из словаря по указанному ключу.
          70. dict.get(key[, default]) -> Значение по ключу, либо default.
          71. key : Ключ, значение по которому требуется получить.
          72. default : Значение, которое следует вернуть, если в словаре не окажется указанного ключа. По умолчанию — None.
          73. Таким образом, исключение KeyError при использование данного метода не возбуждается никогда.
          74. del
          75. удаление элемента
          76. del players['So']
          77. update
          78. Обновляет данные словаря, заменяя значения при совпадении ключей.
          79. dict.update([other], **kwargs) -> None
          80. other : Необязательный аргумент. Другой словарь. 2.4 Либо итерируемый объект с парами ключ, значение (кортеж, либо другой итерируемый объект с двумя элементами) .
          81. 2.4 **kwargs : Необязательный аргумент. Именованные аргументы значениями которых требуется обновить словарь. Если используется вместе с other, значения из именованных аргументов имеют приоритет.
          82. keys
          83. получение ключей
          84. players.keys()
          85. ключи
          86. Python 3 Для обхода ключей создаётся представление ключей словаря, по сути являющееся генератором. Копия данных не создаётся.
          87. {'a': 1, 'b': 2}.keys() # dict_keys(['a', 'b'])
          88. Python 2 Для обхода ключей создаётся копия данных словаря.
          89. {'a': 1, 'b': 2}.keys() # ['a', 'b']
          90. clear
          91. Удаляет из словаря все элементы.
          92. dict.clear()
          93. Метод очищает словарь, удаляя из него все элементы. При этом объект словаря остаётся прежним.
          94. copy
          95. Возвращает поверхностную копию словаря.
          96. dict.copy() -> dict Поверхностная копия словаря
          97. setdefault
          98. Возвращает значение по ключу, инициализируя элемент словаря, если необходимо, указанным значением.
          99. dict.setdefault(key[, default]) -> Значение по ключу, либо default
          100. key : Ключ, значение по которому следует получить, если таковое имеется в словаре, либо создать.
          101. default=None : Значение, которое будет использовано при добавлении нового элемента в словарь.
          102. items
          103. Возвращает пары (ключ, значение) для каждого элемента словаря.
          104. dict.items() -> Представление элементов словаря. До 3.0 — список пар (ключ, значение).
          105. Порядок элементов Ключи значения хранятся в словарях в произвольном (но неслучайном) порядке, зависящем от реализации Питона. Если требуется обход элементов в порядке их добавления, следует использовать collections.OrderedDict().
          106. Python 3 Для обхода элементов создаётся представление элементов словаря, по сути являющееся генератором. Копия данных не создаётся.
          107. Python 2 Для обхода элементов создаётся копия данных словаря.
          108. pop
          109. Возвращает значение по указанному ключу и убирает элемент из словаря.
          110. dict.pop(key[, default])
          111. key : Ключ, значение по которому следует добыть
          112. default : Значение, которое следует вернуть, если указанный ключ отсутствует в словаре. Если не указано, при отсутствии ключа возбуждается исключение KeyError.
          113. popitem
          114. Возвращает произвольную пару (ключ, значение), удаляя её из словаря.
          115. dict.popitem() -> tuple Кортеж вида (ключ, значение)
          116. values
          117. Возвращает значения словаря.
          118. dict.values() -> .3.0 Список значений словаря. 3.0 Представление значений словаря.
          119. Python 3 Для обхода значений создаётся представление словаря, по сути являющееся генератором. Копия данных не создаётся.
          120. Python 2 Для обхода значений создаётся копия данных словаря. Значения преставляются в виде списка.
          121. получить список значений
          122. vals = list(players.values())
          123. сортировать список значений
          124. sorted(players.values())
          125. базовые
          126. __contains__
          127. Позволяет определить механизм проверки наличия элемента в объекте-контейнере.
          128. object.__contains__(self, item) -> bool
          129. self : Ссылка на объект.
          130. item : Элемент, наличие которого в объекте требуется определить.
          131. __iter__
          132. Позволяет определить механизм прохода (итерирования) по элементам объекта.
          133. object.__iter__() -> iterator
        2. неизменяемые
          1. tuple
          2. Свойства
          3. Кортеж — неизменяемая последовательность с упорядоченными элементами.
          4. Элементами кортежей могут выступать любые объекты.
          5. Пустой кортеж — это глобально уникальный объект. Таким образом, все пустые кортежи — это один и тот же объект, а значит и адрес в памяти у таких кортежей один.
          6. При удалении кортежа (например, с помощью del, или сборщика мусора) небольшой длины (не более 19 элементов), он не удалется сразу, а перемещается в очередь удаления. Эта очередь имеет 20 групп, в каждую из которых помещаются удалённые кортежи соответствующей длины, причём в первой группе хранится пустой кортеж.
          7. Действия
          8. Объявление
          9. В коде кортежи могут быть объявлены при помощи скобок — () — внутри скобок через запятую перечисляются элементы в нужной последовательности. Если кортеж состоит из одного элемента при объявлении требуется поставить запятую после этого элемента.
          10. Кроме того, можно объявить их при помощи конструктора tuple(), в качестве аргумента которому можно передать последовательность или объект, поддерживающий итерирование (включая генераторы). Если аргументом указан кортеж, то он и будет возвращён без изменений.
          11. Сравнение
          12. Два картежа сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:
          13. nametuple
          14. кортеж с проименованными элементами
          15. from collections import namedtuple
          16. Player = namedtuple('Player', 'name age rating')
          17. range
          18. str, unicode
          19. capitalize
          20. Возвращает копию строки, делая первую букву заглавной
          21. str.capitalize() -> str
          22. casefold
          23. Возвращает копию строки в сложенном регистре.
          24. str.casefold() -> str
          25. Преобразование в сложенный регистр похоже на преобразование к нижнему регистру, однако более агрессивно.
          26. Например: буква «ß» в нижнем регистре в немецком языке соотвествует сочетанию «ss», однако, ввиду того, что символ «ß» уже имеет нижний регистр, метод .lower() ни к чему не приведёт, в то время как casefold() приведёт символ к «ss».
          27. center
          28. Позиционирует по центру указанную строку, дополняя её справа и слева до указанной длины указанным символом.
          29. str.center(width[, fillchar]) -> str
          30. width : Желаемая минимальная длина результирующей строки.
          31. fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
          32. Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
          33. Символ добавляется к строке циклично сначала справа, затем слева.
          34. Чтобы позиционировать строку вправо используйте str.rjust().
          35. Чтобы позиционировать строку влево используйте str.ljust().
          36. count
          37. Для строки возвращает количество непересекающихся вхождений в неё указанной подстроки.
          38. str.count(sub[, start[, end]]) -> int
          39. sub : Подстрока, количество вхождений которой следует вычислить.
          40. start=0 : Позиция в строке, с которой следует начать вычислять количество вхождений подстроки.
          41. end=None : Позиция в строке, на которой следует завершить вычислять количество вхождений подстроки.
          42. encode
          43. Кодирует строку в байты/байтстроку, используя зарегистрированный кодек.
          44. str.encode([encoding[, errors]]) -> bytes в Python 3 / str в Python 2
          45. encoding : Название кодировки. По умолчанию — системная кодировка, доступная из sys.getdefaultencoding().
          46. 2.3 errors=strict : Наименование схемы обработки ошибок. По умолчанию — strict.
          47. expandtabs
          48. Возвращает копию строки, в которой символы табуляций заменены пробелами.
          49. str.expandtabs([tabsize])
          50. tabsize=8 : Максимальное количество пробелов на которое может быть заменена табуляция.
          51. find
          52. Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.
          53. str.find(sub[, start[, end]]) -> int
          54. sub : Подстрока, начальный индекс размещения которой требуется определить.
          55. start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
          56. end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
          57. Если подстрока не найдена, возвращает -1.
          58. Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.
          59. Метод должен использоваться только в случае необходимости найти индекс начала подстроки. Для обычного определения вхождения подстроки используйте оператор in:
          60. format
          61. Возвращает копию строки, отформатированную указанным образом.
          62. str.format(*args, **kwargs) -> str
          63. args : Позиционные аргументы.
          64. kwargs : Именованные аргументы.
          65. format_map
          66. Форматирует строку, используя данные из указанного отображения.
          67. str.format_map(mapping)
          68. mapping : Отображение, которое следует использовать для форматирования строки.
          69. index
          70. Возвращает наименьший индекс, по которому обнаруживается начало указанной подстроки в исходной.
          71. str.index(sub[, start[, end]]) -> int
          72. sub : Подстрока, начальный индекс размещения которой требуется определить.
          73. start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
          74. end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
          75. Работа данного метода аналогична работе str.find(), однако, если подстрока не найдена, возбуждается исключение ValueError.
          76. Булевые проверки
          77. isalnum
          78. Возвращает флаг, указывающий на то, содержит ли строка только цифры и/или буквы.
          79. str.isalnum() -> bool
          80. Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами и/или буквами, иначе — False.
          81. isalpha
          82. Возвращает флаг, указывающий на то, содержит ли строка только буквы.
          83. str. isalpha() -> bool
          84. Вернёт True, если в строке хотя бы один символ и все символы строки являются буквами, иначе — False.
          85. isdecimal
          86. Возвращает флаг, указывающий на то, содержит ли строка число в десятичной системе исчисления.
          87. str.isdecimal() -> bool
          88. Возвращает True если в строка содержит число в десятичной системе исчисления и в ней есть хотя бы один символ. Иначе возвращает False.
          89. isdigit
          90. Возвращает флаг, указывающий на то, содержит ли строка только цифры.
          91. str. isdigit() -> bool
          92. Вернёт True, если в строке хотя бы один символ и все символы строки являются цифрами, иначе — False.
          93. isidentifier
          94. Возвращает флаг, указывающий на то, является ли строка идентификатором.
          95. str.isidentifier() -> bool
          96. Речь идёт об идентификаторах языка. Более подробная информация об идентификаторах и ключевых словах Питона содержится в разделе оригинальной документации Identifiers and keywords.
          97. islower
          98. Возвращает флаг, указывающий на то, содержит ли строка символы только нижнего регистра.
          99. str.islower() -> bool
          100. Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к нижнему, иначе — False.
          101. isnumeric
          102. Возвращает флаг, указывающий на то, содержит ли строка только числа.
          103. str.isnumeric() -> bool
          104. Вернёт True, если в строке есть символы и все они присущи числам.
          105. isprintable
          106. Возвращает флаг, указывающий на то, все ли символы строки являются печатаемыми.
          107. str.isprintable() -> bool
          108. Вернёт True, если строка пустая, либо если все её символы могут быть выведены на печать.
          109. isspace
          110. Возвращает флаг, указывающий на то, содержит ли строка только пробельные символы.
          111. str. isspace() -> bool
          112. Вернёт True, если в строке есть символы и все они являются пробельными, иначе — False.
          113. istitle
          114. Возвращает флаг, указывающий на то, начинается ли каждое из «слов» строки с заглавной буквы.
          115. str. istitle() -> bool
          116. Вернёт True, если в строке хотя бы один символ или все «слова» в строке начинаются с заглавных букв, иначе — False.
          117. isupper
          118. Возвращает флаг, указывающий не то, содержит ли строка символы только верхнего регистра.
          119. str.isupper() -> bool
          120. Вернёт True, если все символы строки поддерживающие приведение к регистру приведены к верхнему, иначе — False.
          121. str.isupper() может возвращать False, например, если строка содержит только символы не поддерживающие приведение к регистру:
          122. endswith
          123. Возвращает флаг, указывающий на то, заканчивается ли строка указанным постфиксом.
          124. str.endswith(suffix[, start[, end]]) -> bool
          125. suffix : Строка-постфикс ( 2.5 либо кортеж строк), в наличии которой требуется удостовериться.
          126. start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.
          127. end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.
          128. Для определения наличия префикса в строке используйте str.startswith().
          129. startswith
          130. Возвращает флаг, указывающий на то, начинается ли строка с указанного префикса.
          131. str.startswith(prefix[, start[, end]]) -> bool
          132. prefix : Строка-префикс ( 2.5 либо кортеж строк), в наличии которой требуется удостовериться.
          133. start : Позиция (индекс символа), с которой следует начать поиск. Поддерживает отрицательные значения.
          134. end : Позиция (индекс символа), на которой следует завершить поиск. Поддерживает отрицательные значения.
          135. join
          136. Возвращает строку, собранную из элементов указанного объекта, поддерживающего итерирование.
          137. str.join(iterable) -> str
          138. iterable : Объект со строками, поддерживающий итерирование.
          139. В качестве соединительного элемента между указанными элементами используется объект строки, у которого и вызывается данный метод.
          140. Ожидается, что итерируемый объект выдаёт строки. Для массового приведения к строке можно воспользоваться функцией map(): dots.join(map(str, [100, 200])) # '100..200'
          141. ljust
          142. Позиционирует влево указанную строку, дополняя её справа до указанной длины указанным символом.
          143. str.ljust(width[, fillchar]) -> str
          144. width : Желаемая минимальная длина результирующей строки.
          145. fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
          146. Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
          147. lower
          148. Возвращает копию исходной строки с символами приведёнными к нижнему регистру.
          149. str.lower() -> str
          150. str.lower().islower() может возвращать False, если строка содержит только символы не поддерживающие приведение к регистру: '12'.lower().islower() # False
          151. lstrip
          152. Возвращает копию указанной строки, с начала (слева l — left) которой устранены указанные символы.
          153. str.lstrip([chars]) -> str
          154. Смотрите также: strip() и rstrip().
          155. partition
          156. Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: слева направо.
          157. str.partition(sep) -> tuple
          158. sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.
          159. Возвращает кортеж из трёх элементов.
          160. В случаях, когда требуется, чтобы разбиение строки происходило справа налево, используйте str.rpartition.
          161. Когда требуется разбить строку на множество составляющих, используйте str.split.
          162. replace
          163. Возвращает копию строки, в которой заменены все вхождения указанной строки указанным значением.
          164. str.replace(old, new[, maxcount]) -> str
          165. old : Искомая подстрока, которую следует заменить.
          166. new : Подстрока, на которую следует заменить искомую.
          167. maxcount=None : Максимальное требуемое количество замен. Если не указано, будут заменены все вхождения искомой строки.
          168. Обратные (справа-налево)
          169. rfind
          170. Возвращает наибольший индекс, по которому обнаруживается конец указанной подстроки в исходной.
          171. str.rfind(sub[, start[, end]]) -> int
          172. sub : Подстрока, конечный индекс размещения которой требуется определить.
          173. start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
          174. end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
          175. Если подстрока не найдена, возвращает -1.
          176. Поиск подстроки производится справа налево (отсюда и префикс r в названии метода rfind)
          177. rindex
          178. Возвращает наибольший индекс, по которому обнаруживается конец указанной подстроки в исходной.
          179. str.rindex(sub[, start[, end]]) -> int
          180. sub : Подстрока, конечный индекс размещения которой требуется определить.
          181. start=0 : Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
          182. end=None : Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
          183. Работа данного метода аналогична работе str.rfind(), однако, если подстрока не найдена, возбуждается исключение ValueError.
          184. rjust
          185. Позиционирует вправо указанную строку, дополняя её слева до указанной длины указанным символом.
          186. str.rjust(width[, fillchar]) -> str
          187. width : Желаемая минимальная длина результирующей строки.
          188. fillchar : Символ, которым следует расширять строку. По умолчанию — пробел.
          189. Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
          190. rpartition
          191. Разбивает строку на три составляющие (начало, разделитель, конец) и возвращает в виде кортежа. Направление разбиения: справа налево.
          192. str.rpartition(sep) -> tuple
          193. sep : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов.
          194. Возвращает кортеж из трёх элементов.
          195. Поведение метода аналогично поведению str.partition за исключением направления разбиения строки.
          196. rsplit
          197. Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: справа налево.
          198. str.rsplit(sep[, maxsplit]) -> list
          199. sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.
          200. maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
          201. Поведение метода аналогично поведению str.split за исключением направления разбиения строки.
          202. Когда требуется разбить строку на три составляющие (начало, разделитель, конец), используйте str.rpartition.
          203. rstrip
          204. Возвращает копию указанной строки, с конца которой устранены указанные символы.
          205. str.rstrip([chars]) -> str
          206. 2.2.3 chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.
          207. split
          208. Разбивает строку на части, используя разделитель, и возвращает эти части списком. Направление разбиения: слева направо.
          209. str.split(sep[, maxsplit]) -> list
          210. sep=None : Строка-разделитель, при помощи которой требуется разбить исходную строку. Может содержать как один, так и несколько символов. Если не указан, то используется специальный алгоритм разбиения, для которого разделителем считается последовательность пробельных символов.
          211. maxsplit=-1 : Максимальное количество разбиений, которое требуется выполнить. Если -1, то количество разбиений не ограничено.
          212. Если указан разделитель, разбиение пустой строки вернёт список с единственным элементом — пустой строкой: [''].
          213. splitlines
          214. Разбивает строку на множество строк, возвращая их списком.
          215. str.splitlines([keepends]) -> list
          216. keepends=False — Флаг, указывающий на то следует ли оставлять в результирующем списке символы переноса строк. По умолчанию символы удаляются.
          217. Разбиение строки на подстроки производится в местах, где встречаются символы переноса строк.
          218. В отличие от split(), которому можно передать символ-разделитель, данный метод для пустой строки вернёт пустой список, а символ переноса строки в конце не добавит в список дополнительного элемента.
          219. strip
          220. Возвращает копию указанной строки, с обоих концов которой устранены указанные символы.
          221. str.strip([chars]) -> str
          222. 2.2.3 chars=None : Строка с символами, которые требуется устранить. Если не указана, будут устранены пробельные символы. Это не префикс и не суффикс, это перечисление нужных символов.
          223. swapcase
          224. Возвращает копию строки, в которой каждая буква будет иметь противоположный регистр.
          225. str.swapcase() -> str
          226. В ходе смены регистра, буквы в нижнем регистре преобразуются в верхний, а буквы в верхнем преобразуются в нижний.
          227. title
          228. Возвращает копию строки, в которой каждое новое слово начинается с заглавной буквы и продолжается строчными.
          229. str.title() -> str
          230. В результирующей строке первая буква каждого нового слова становится заглавной, в то время как остальные становятся строчными. Такое написание характерно для заголовков в английском языке.
          231. upper
          232. Возвращает копию исходной строки с символами приведёнными к верхнему регистру.
          233. str.upper() -> str
          234. Для приведения символов строки к нижнему регистру используйте метод lower().
          235. Для проверки того, содержит ли строка только символы в верхнем регистре используйте isupper().
          236. zfill
          237. Дополняет указанную строку нулями слева до указанной минимальной длины.
          238. str.zfill(width) -> str
          239. width : Желаемая минимальная длина результирующей строки.
          240. Изначальная строка не обрезается, даже если в ней меньше символов, чем указано в параметре желаемой длины.
          241. В ходе компоновки результирующей строки ведущие знаки *+* и *-* сохраняют своё место в её начале.
          242. Условно сходного результата можно также добиться при использовании метода str.rjust(), передав 0 в качестве второго аргумента.
          243. Условным антонимом функции, добавляющим нули справа можно считать str.ljust(), передав 0 в качестве второго аргумента.
          244. Форматирование при помощи %
          245. Форматирование строк в стиле printf при помощи оператора интерполяции %.
          246. Строки и unicode реализуют поддержку оператора % (деление по модулю; оператор интерполяции строки), который используется для форматирования строк.
          247. Оператор заменяет маркеры в строке значениями из форматируемого объекта. Подход похож на использование sprintf() в языке Си.
          248. Форматные строки (f-string)
          249. Форматированные строковые литералы также известны как f-строки или форматные строки.
          250. Форматированные строковые литералы — это литералы-строки с префиксом f или F.
          251. Попытка использования обратных косых черт (слешей) в форматной строке (например, \n) приведёт к исключению SyntaxError.
          252. translate
          253. Возвращает копию строки, в которой каждый символ будет заменен через заданную таблицу перевода.
          254. str.translate(table) -> str
          255. Можно использовать str.maketrans() для создания таблицы посимвольного перевода
          256. maketrans
          257. статический метод, который возвращает таблицу для перевода для метода str.translate
          258. str.maketrans(x[, y[, z]])
          259. frozenset
          260. Свойства
          261. Статичное (неизменяемое) множество.
          262. frozenset([iterable])
          263. iterable : Объект, поддерживающий итерирование, элементы которого должны стать элементами статичного множества. Если не указан, будет создано пустое статичное множество.
      2. Специально для sets
        1. difference()
          1. Возвращает разницу — из элементов данного множества удаляются элементы, присутствующие в указанных объектах.
          2. sets.difference(*others) -> set/frozenset
          3. *others : Объекты, с элементами которых требуется обнаружить разницу. До 2.6 можно было указать только один объект.
        2. intersection()
          1. Возвращает пересечение — элементы данного множества, также присутствующие в указанных объектах.
          2. sets.intersection(*others) -> set/frozenset
          3. *others : Объекты, с элементами которых требуется обнаружить пересечение.
          4. Помимо вызова метода, для тех же целей можно использовать оператор амперсанд — &.
          5. При использовании & все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
        3. isdisjoint()
          1. Производит проверку, не пересекается ли рассматриваемое множество с заданным.
          2. sets.isdisjoint(iterable) -> bool
          3. iterable : Объект поддерживающий итерирование, элементы которого следует проверить на пересекаемость с элементами рассматриваемого.
        4. issubset()
          1. Производит проверку, является ли рассматриваемое множество подмножеством заданного.
          2. sets.issubset(iterable) -> bool
          3. iterable : Объект поддерживающий итерирование, элементы которого будут сравнены с элементами рассматриваемого.
          4. Как видно из примера выше, для проверки на подмножество можно использовать как метод, так и математический оператор <=. При этом метод может принимать любой объект, поддерживающий итерирование, но операторы требуют множеств по обе стороны.
          5. Проверка на правильное подмножество реализуется при помощи оператора <.
        5. issuperset
          1. Производит проверку, является ли рассматриваемое множество надмножеством заданного.
          2. sets.issuperset(iterable) -> bool
          3. iterable : Объект поддерживающий итерирование, элементы которого будут сравнены с элементами рассматриваемого.
          4. Как видно из примера выше, для проверки на надмножество можно использовать как метод, так и математический оператор >=. При этом метод может принимать любой объект, поддерживающий итерирование, но операторы требуют множеств по обе стороны.
          5. Проверка на правильное надмножество реализуется при помощи оператора > .
        6. symmetric_difference
          1. Возвращает симметричную разницу — только те элементы, которые есть либо в одном, либо в другом, но не в обоих множествах.
          2. sets.symmetric_difference(other) -> set/frozenset
          3. other : Объект, с элементами которого требуется обнаружить симметричную разницу.
          4. Помимо вызова метода, для тех же целей можно использовать оператор «карет» — ^.
          5. При использовании ^ все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
        7. union()
          1. Возвращает объединение — элементы данного множества дополняются элементами, присутствующими в указанных объектах.
          2. sets.union(*others) -> set/frozenset
          3. *others : Объекты, с элементами которых требуется создать объединение. До 2.6 можно было указать только один объект.
          4. Результирующее множество будет содержать уникальные элементы.
          5. Помимо вызова метода, для тех же целей можно использовать оператор вертикальную черту (она же «труба», «пайп») — |.
          6. При использовании | все операнды должны являться множествами, в то время как на метод такое ограничение не распространяется.
      3. Операции
        1. Сравнение
          1. При сравнение используется лексикографический порядок, сравниваются два элемента, идущих друг за другом, начиная с первого. Вложенные последовательности одинакового типа сравниваются рекурсивно. Последовательности равны, если их элементы равны.
        2. for
          1. проход по элементам
        3. len
          1. количество элементов
        4. +
          1. конкатенация
        5. *
          1. повторение
      4. методы
        1. append()
          1. добавляет элемент в конец списка
          2. list.append(x) -> None
        2. count()
          1. считает количество вхождений значения в список
          2. list.count(val)
        3. extend()
          1. дополняет список элементами из указанного обхъекта
          2. list.extend(it) -> None
        4. index()
          1. Ищет указанное значение в последовательности.
          2. sequence.index(val[, start[, finish]]) -> int — индекс элемента
          3. val : Искомое значение.
          4. start=0 : Позиция, начиная с которой следует произвести поиск.
          5. finish=len(sequence) : Позиция перед которой следует завершить поиск.
          6. Метод возвращает первую из позиций (индексов), на которой в последовательности обнаруживается искомое значение.
        5. indsert()
          1. Добавляет указанный элемент в список на указанную позицию.
          2. list.insert(idx, x) -> None
          3. idx : Позиция (индекс), на которую требуется поместить элемент. Нумерация ведётся с нуля. Поддерживается отрицательная индексация.
          4. x : Элемент, который требуется поместить в список.
        6. pop()
          1. Возвращает элемент [на указанной позиции], удаляя его из списка.
          2. list.pop([i])
          3. i=None : Позиция искомого элемента в списке (целое число). Если не указана, считается что имеется в виду последний элемент списка. Отрицательные числа поддерживаются.
        7. remove()
          1. Удаляет из списка указанный элемент.
          2. list.remove(x) -> None
          3. x : Элемент, который требуется удалить из списка. Если элемент отсутствует в списке, возбуждается ValueError.
        8. reverse()
          1. Перестраивает элементы списка в обратном порядке.
          2. list.reverse() -> None
        9. sort()
          1. list.sort(key=None, reverse=False) -> None
          2. 3.0 cmp=None : Функция, принимающая аргументами два стоящих рядом элемента, которая должна вернуть отрицательное число (если первый меньше второго), нуль (если равны) и положительное (если первый больше второго).
          3. key=None : Функция, принимающая аргументом элемент, используемая для получения из этого элемента значения для сравнения его с другими.
          4. reverse=False : Флаг, указывающий следует ли производить сортировку в обратном порядке.
          5. Данный метод модифицирует исходный объект на месте, возвращая при этом None.
        10. copy()
          1. копирует список
          2. numbers.copy()
          3. при изменении элементов в исходном контейнере они сохранятся и в копии
        11. clear()
          1. очищает список
          2. numbers.clear()
      5. базовые
        1. object.__contains__(self, item) -> bool
          1. Позволяет определить механизм проверки наличия элемента в объекте-контейнере.
          2. self : Ссылка на объект.
          3. item : Элемент, наличие которого в объекте требуется определить.
        2. object.__iter__() -> iterator
          1. Позволяет определить механизм прохода (итерирования) по элементам объекта.
          2. При помощи метода можно описать механизм прохода, который будет задействован в for in.
      6. Дополнительно
        1. list comprehension
          1. Списковое включение
          2. Абстракция списков или списковое включение (англ. list comprehension) в синтаксисе некоторых языков программирования — это способ компактного описания операций обработки списков[1].
          3. Списковое включение позволяет вычислять и бесконечные списки (в языках, которые их поддерживают). Например, на языке Миранда бесконечный список чётных положительных чисел можно записать следующим образом[1]:
  2. Операторы
    1. if-elif-else
    2. for-in-else
      1. Если тело цикла несложное, то накладные расходы на поддержание цикла интерпретатором могут оказаться существенными. В подобных случаях рекомендуется использовать генератор, составление списка, либо функцию map().
      2. опции
        1. else
          1. Когда элементы исчерпаны (например, исчерпана последовательность, либо итератор возбудил исключение StopIteration) выполняется часть инструкции, идущая после else (если эта часть присутствует) и цикл завершается.
        2. break
          1. Инструкция break позволяет прервать цикл. При этом часть после else не будет выполнена.
        3. continue
          1. Инструкция continue позволяет «проскочить» исполнение следующего после неё кода и продолжить проход по следующим элементам.
      3. для tuple
      4. для dict
  3. Функции
    1. Встроенные
      1. сложные
        1. compile
          1. Компилирует исходный код в объект кода, либо объект АСД.
          2. compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) -> Объект кода, либо объект АСД
          3. filename : Файл, из которого прочитан код. Если код не был считан из файла, можно передать любое значение, например строку <string>.
          4. mode : Режим компиляции кода: exec, если код состоит из последовательности инструкций; eval, если код содержит одно выражение; single, если код состоит из одной инструкции. Если код содержит несколько строк, то при использовании режимов single и eval (а до версии 3.2 ещё и exec), нужно завершить ввод не меньшей мере одним символом перевода строки. 2.7 Поддержка переводов строк из Windows и Mac.
          5. 2.3 flags=0 : Указывает, какие инструкции из __future__ следует использовать. Указывается битами, которые можно OR-ить, чтобы задать несколько инструкций. Биты можно подсмотреть в __future__._Feature.compiler_flag. См. PEP 236.
          6. 2.3 dont_inherit=False : Следует ли использовать __future__ определенные в коде, вызвавшем compile(), в дополнение в тем, что указаны во flags.
          7. 3.2 optimize=-1 : Задаёт уровень оптимизации компилятора: -1 — использовать настройки интерпретатора (регулируются опцией -O); 0 — не оптимизировать, включить __debug__; 1 — убрать инструкции asserts, выключить __debug__; 2 — убрать ещё и строки документации.
        2. classmethod
          1. Представляет указанную функцию методом класса.
          2. classmethod(function) -> Метода класса
          3. function : Функция, которую следует представить методом класса.
          4. Методы класса реализованы при помощи дескрипторов.
      2. простые
        1. enumerate()
          1. Возвращает генератор, отдающий пары счётчик-элемент для элементов указанной последовательности.
          2. enumerate(sequence[, start=0]) -> generator Выдаёт пары счётчик-элемент
          3. sequence : iterable Любая последовательность, итератор, или объект, поддерживающий итерирование.
          4. 2.6 start=0 : int Начальное значение счётчика.
          5. Функция применяется в случаях, когда необходим счётчик количества элементов в последовательности.
          6. Позволяет избавиться от необходимости инициализировать и обновлять отдельную переменную-счётчик:
        2. all
          1. Проверяет, все ли указанные элементы принимают значение «истина».
          2. all(iterable) -> bool
          3. iterable : Объект, поддерживающий итерирование.
          4. Вернёт True, если все элементы итерируемого объекта представляются истиной (True).
          5. Также возвращает True, если итерируемый объект пуст.
        3. abs
          1. Возвращает абсолютную величину.
          2. abs(x) -> Абсолютная величина для x
          3. x : Целое, либо число с плавающей точкой.
          4. Возвращает абсолютную величину для переданного аргумента x.
          5. Для комплексного числа возвращает его модуль.
        4. any
          1. Проверяет, есть ли среди указанных элементов хотя бы один, принимающий значение «истина».
          2. any(iterable) -> bool
          3. iterable : Объект, поддерживающий итерирование.
          4. Возвращает False, если итерируемый объект пуст.
          5. Вернёт True, если любой из элементов итерируемого объекта явится истиной.
        5. ascii
          1. Возвращает строковое представление объекта с экранированными не-ASCII символами.
          2. ascii(object) -> str
          3. object : Объект, для которого требуется создать строковое представление.
          4. Как и repr(), возвращает строковое представление объекта object, но при этом экранирует не-ASCII символы, возвращённые repr() при помощи \x, \u или \U.
        6. bin
          1. Преобразует целое число в двоичную строку.
          2. bin(x) -> str
          3. x : Целое число. Если x не является объектом int, следует определить для него метод __index__(), возвращающий целое.
          4. Преобразует целое число в двоичную строку. Результатом будет полноценное Python-выражение.
        7. chr
          1. Возвращает символ по его числовому представлению.
          2. chr(i) -> str
          3. i : Целое, которое следует представить в виде символа.
          4. Возвращает символ (в виде строки), чья позиция кода для Юникод равна указанному целому i. Аргумент должен располагаться в пределах от 0 до 1,114,111 (0x10FFFF), в противном случае возбуждается исключение ValueError.
          5. Функция имеет антипода — ord().
        8. ord
          1. Возвращает числовое представление для указанного символа.
          2. ord(chr) -> int
          3. chr : Символ, который следует представить в виде целого.
        9. callable
          1. Возвращает True для объекта, поддерживающего вызов.
          2. callable(obj) -> bool
          3. obj : Объект, который следует проверить на поддержку вызова.
          4. Вернёт True, если obj поддерживает возможность вызова, иначе — False.
        10. атрибуты
          1. delattr
          2. Удаляет из объекта указанный атрибут.
          3. delattr(obj, name)
          4. obj : object Объект, из которого следует удалить атрибут.
          5. name : str Строка с именем атрибута, который должен быть удалён из указанного объекта.
          6. Атрибут объекта (свойство, метод, элемент) будет удалён в случае, если объект разрешает/поддерживает это действие.
          7. getattr
          8. Возвращает значение атрибута объекта.
          9. getattr(obj, name[, default])
          10. obj : object Объект, значение атрибута которого требуется получить.
          11. name : str Имя атрибута, значение которого требуется получить.
          12. default : Значение по умолчанию, которое будет возвращено, если объект не располагает указанным атрибутом. Если не задано, и атрибут отсутствует, возбуждается исключение AttributeError.
          13. Функция возвращает значение атрибута указанного объекта по имени.
          14. setattr
          15. Добавляет объекту указанный атрибут.
          16. setattr(obj, name, value)
          17. obj : object Объект, который следует дополнить атрибутом.
          18. name : str Строка с именем атрибута. Можно указывать как имя нового, так и существующего атрибута.
          19. value : Произвольное значение атрибута.
          20. Атрибут объекта (свойство, метод, элемент) будет добавлен в случае, если объект разрешает/поддерживает это действие.
          21. hasattr
          22. Возвращает флаг, указывающий на то, содержит ли объект указанный атрибут.
          23. hasattr(obj, name) -> bool
          24. obj : object Объект, существование атрибута в котором нужно проверить.
          25. name : str Имя атрибута, существование которого требуется проверить.
          26. Возвращает True, если атрибут существует, иначе — False.
        11. dir
          1. Возвращает имена [переменных], доступные в локальной области, либо атрибуты указанного объекта в алфавитном порядке.
          2. dir([obj]) -> list — Список имён/атрибутов в алфавитном порядке.
          3. obj : Объект, для которого следует вернуть имена атрибутов.
          4. При вызове без аргумента, возвращает имена [переменных], доступные в локальной области, иначе — атрибуты указанного объекта.
        12. divmod
          1. Возвращает пару частное-остаток от деления аргументов.
          2. divmod(a, b) -> tuple(частное, остаток)
          3. a : Число. Делимое.
          4. b : Число. Делитель.
          5. Если аргументы являются разными типами, действуют правила двоичной арифметики.
        13. eval
          1. Разбирает и исполняет указанное выражение.
          2. eval(expression, globals=None, locals=None) -> Результат выполненного выражения
          3. expression : Выражение, которое требуется исполнить, в виде строки. Либо объект кода.
          4. globals=None : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить выражение. Если указан, но не содержит атрибута __builtins__ данные указанного пространства будут дополнены данными общего глобального пространства, перед разбором выражения. Таким образом, выражение будет иметь доступ ко всем встроенным модулям.
          5. locals=None : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить выражение. Если не указано, то используется словарь глобального пространства.
          6. Если оба аргумента опущены, то выражение будет выполнено в среде, где был осуществлён вызов функции.
          7. В случае ошибок возбуждает SyntaxError.
        14. exec
          1. Динамически исполняет указанный код.
          2. exec(obj[, globals[, locals]]) -> None
          3. obj : Строка кода, либо объект кода. Поддерживается ввод данных из файлов (считываются до EOF). Если передана строка, она разбирается в набор инструкций, который потом исполняется (если отсутствуют синтаксические ошибки). Если передан объект кода, то он исполняется. 2 Необязательные аргументы (см. ниже) могут быть указаны в виде кортежа прямо после инструкции.
          4. globals : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить код. Если locals не передан, будет использован globals. Если словарь не имеет значения по ключу __builtins__, на это место вставляется ссылка на значение аналогичного атрибута глобального пространства. Модифицировав __builtins__ словаря передаваемого в функцию, вы можете контролировать, какие какие из встроенных инструментов будут доступны коду.
          5. locals : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить код.
          6. Если дополнительные параметры опущены, код исполняется в текущем пространстве.
        15. filter
          1. При помощи указанной функции фильтрует элементы переданного объекта.
          2. filter(func, iterable) -> 3.0 iterator | list, tuple, str
          3. func : Фильтрующая функция. Должна принимать элемент фильтруемого объекта. Если функция вернёт False, данный элемент не попадёт в результат. Если передано None, считается что требуется применить тождественное отображение (lambda *args: args), таким образом все элементы, оцениваемые как False будут отфильтрованы.
          4. iterable : Объект, элементы которого следует отфильтровать. Может быть последовательностью, объектом поддерживающим итерирование, либо итератором. До 3.0, если объект является строкой, или кортежем, результат будет соответствующего типа, в остальных случаях возвращается список.
        16. format
          1. Форматирует указанное значение.
          2. format(value[, format_spec]) -> str
          3. value : Значение, которое требуется отформатировать.
          4. format_spec : Настройки формата, в соответствии с которыми требуется выполнить форматирование. Интерпретация настроек зависит от типа значения. По умолчанию — пустая строка (обычно приводит к тому же эффекту, что и применение str()).
        17. globals
          1. Возвращает словарь с глобальной таблицей символов, определённых в модуле.
          2. globals() -> dict
        18. hash
          1. Возвращает хеш указанного объекта.
          2. hash(obj) -> int
          3. obj : Объект, хеш которого требуется получить.
        19. help
          1. Вызывает встроенную справочную систему.
          2. help([obj])
          3. obj : Если передана строка, то производится попытка интерпретировать её как имя модуля, функции, класса, метода, или раздела документации, после чего справка выводится в консоль. Если передан объект любого другого типа, страница справки генерируется по его данным.
        20. hex
          1. Возвращает строку с шестнадцатеричным представлением указанного целого.
          2. hex(i) -> str
          3. i : Целое, для которого требуется вычислить шестнадцатеричное представление. 3.0 Может быть передан любой объект, реализующий метод __index__() , возвращающий целое.
        21. id
          1. Возвращает идентификатор указанного объекта.
          2. id(obj) -> int
          3. obj : Объект, идентификатор которого требуется получить.
          4. Возвращает целое, гарантированно являющееся уникальным и постоянным для объекта на время его существования.
          5. Таким образом, объекты, периоды существования которых не пересекаются, могут иметь одинаковый идентификатор.
        22. input
          1. Считывает и возвращает строку входных данных.
          2. input([prompt])
          3. prompt : Строка-приглашение, которая должна быть отправлена на стандартное устройство вывода (заключительный перевод каретки при этом удаляется).
        23. isinstance
          1. Возвращает флаг, указывающий на то, является ли указанный объект экземпляром указанного класса (классов).
          2. isinstance(obj, classinfo) -> bool
          3. obj : Объект, требующий проверки.
          4. classinfo : Класс, либо кортеж с классами, либо рекурсивный кортеж кортежей. Другие типы последовательностей не поддерживаются. Если аргумент не является классом, либо кортежем с классами, возбуждается TypeError.
        24. issubclass
          1. Возвращает флаг, указывающий на то, является ли указанный класс подклассом указанного класса (классов).
          2. issubclass(cls, classinfo) -> bool
          3. cls : Класс, требующий проверки.
          4. classinfo : Класс, либо кортеж с классами. Если аргумент не является классом, либо кортежем с классами, возбуждается TypeError.
        25. iter
          1. Возвращает объект итератора.
        26. len
          1. Возвращает число элементов в указанном объекте-контейнере.
        27. locals
          1. Возвращает словарь, представляющий текущую локальную таблицу символов.
        28. map
          1. Применяет указанную функцию к каждому элементу указанной последовательности/последовательностей.
          2. map(func, iterable, ...) -> 3.0 iterator | list
          3. func : Функция, которую следует применить к элементам последовательности или последовательностей. Должна принимать количество элементов равное количеству последовательностей. До 3.0, если передано None, считается что требуется применить тождественное отображение (lambda *args: args), при этом, если передано несколько последовательностей результат будет содержать кортежи с данными из каждой из них.
          4. iterable : Последовательность (или объект, поддерживающий итерирование), к элементам которой требуется применить функцию. Итератор останавливается, когда самая короткая из последовательностей исчерпана. До 3.0, если в какой-либо из последовательностей количество элементов меньше, чем в остальных, недостающие элементы считаются None.
        29. max
          1. Возвращает элемент с набольшим значением из переданных в функцию.
        30. min
          1. Возвращает элемент с наименьшим значением из переданных в функцию.
        31. next
          1. Возвращает следующий элемент итератора.
        32. oct
          1. Возвращает строку с восмеричным представлением указанного целого.
        33. open
          1. Открывает файл и возвращает представляющий его объект.
        34. ord
          1. Возвращает числовое представление для указанного символа.
        35. pow
          1. Возвращает результат возведения числа в степень, с опциональным делением по модулю.
          2. pow(x, y[, z])
          3. x : Число, которое требуется возвести в степень.
          4. y : Число, являющееся степенью, в которую нужно возвести первый аргумент. Если число отрицательное, аргумент z не принимается.
          5. z : Число, на которое требуется произвести деление по модулю. Если число указано, ожидается, что x и y положительны и имеют тип int.
        36. print
          1. Отправляет указанные объекты текстовым потоком в файл.
        37. repr
          1. Возвращает формальное строковое представление указанного объекта.
        38. reversed
          1. Возвращает обратный итератор по указанной последовательности.
        39. round
          1. Возвращает число с плавающей запятой, округлённое до указанного количества цифр после запятой.
        40. sorted
          1. Возвращает новый отсортированный список, составленный из элементов итерирующегося объекта.
        41. staticmethod
          1. Представляет указанную функцию статичным методом.
        42. sum
          1. Суммирует элементы указанного объекта и возвращает результат.
        43. super
          1. Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
        44. vars
          1. Возвращает словарь из атрибута __dict__ указанного объекта.
        45. zip
          1. Возвращает итератор по кортежам, где i-тый кортеж содержит i-тый элемент каждой из указанных последовательностей.
          2. zip(*iterables) -> 3.0 iterator 3.0 list
          3. iterables : Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор.
    2. def
      1. Если много аргументов
        1. def calc_taxes(*args): for x in args: print(f'Got payment = {x}') return sum(args) * 0.06
        2. def save_players(**kwargs): for k, v in kwargs.items(): print(f'Player {k} has rating {v}') save_players(Carlsen=2800, Giri=2780)
      2. vars in local scope
        1. global
          1. назначает global scope внутри функции
      3. Декоратор
        1. Функция, возвращающая другой объект, поддерживающий вызов.
          1. Обычно используется для трансформации поведения существующей функции (или класса) с использованием синтаксической конструкции @обёртка (декораторное выражение).
          2. Результатом декорирующей функции должен являться объект, поддерживающий вызов, который и будет связан с именем оригинального, вместо самого оригинального объекта.
          3. Определение функции или класса, может быть задекорировано один или несколько раз. Декораторные выражения вычисляются в ходе обработки объявлений функций/классов в той области видимости, в которой определён декорируемый объект (функция, класс).
        2. from functools
          1. update_wrapper()
          2. Дополняет функцию-обёртку, данными из некоторых атрибутов оборачиваемой функции.
          3. functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES) -> callable
          4. wrapper : Функция-обёртка.
          5. wrapped : Оборачиваемая функция.
          6. assigned=WRAPPER_ASSIGNMENTS : Кортеж с именами атрибутов оборачиваемой функции, которые следует перенести в обёртку.
          7. updated=WRAPPER_UPDATES : Кортеж с именами атрибутов оборачиваемой функции, которыми следует обновить обёртку.
          8. wraps()
          9. Декоратор, дополняющий функцию-обёртку, данными из некоторых атрибутов оборачиваемой функции.
          10. functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES) -> callable
          11. wrapped : Оборачиваемая функция.
          12. assigned=WRAPPER_ASSIGNMENTS : Кортеж с именами атрибутов оборачиваемой функции, которые следует перенести в обёртку.
          13. updated=WRAPPER_UPDATES : Кортеж с именами атрибутов оборачиваемой функции, которыми следует обновить обёртку.
          14. Этот декоратор существует для облегчения применения функции functools.update_wrapper() и призван обрамлять функцию-обёртку.
  4. Ошибки
    1. BaseException
      1. Типы ошибок
        1. ArithmeticError
          1. Исключение, возникающее в ходе выполнения арифметических операций.
          2. Базовый класс для для встроенных исключений, поднимаемых при различных арифметических ошибках.
        2. AssertionError
          1. Возникает в случаях когда assert не увенчалась успехом.
        3. AttributeError
          1. Исключение, возникающее в ходе обращения к атрибуту объекта.
          2. Возбуждается в случаях ошибок доступа к атрибуту, либо его установки.
        4. BufferError
          1. Исключение, возникающее в ходе операций с буфером.
          2. Поднимается в случае, когда операция, тем или иным образом связанная с буфером, не может быть выполнена.
        5. EOFError
          1. Исключение, возникающее в случае обнаружения маркера EOF в ходе считывания данных.
          2. Поднимается встроенными функциями, например, input() и raw_input(), когда те обнаруживают маркер конца файла (EOF) в данных.
          3. Методы io.IOBase.read() и io.IOBase.readline(), например, file.read() и file.readline(), в случае обнаружения EOF возвращают пустую строку.
        6. GeneratorExit
          1. Исключение, возникающее при запросе закрытия генератора/сопрограммы.
          2. Исключение поднимается методом .close() генератора/сопрограммы.
          3. Используется для управления генератором/сопрограммой извне.
        7. ImportError
          1. Исключение, возникающее в случае неудачи импорта модуля.
          2. Поднимается, в случаях когда инструкции import не удаётся отыскать модуль, либо когда from ... import ... не находит атрибута, который требуется импортировать.
        8. LookupError
          1. Базовое исключение для ошибок доступа по ключу/индексу.
          2. Этот тип является базовым для исключений, поднимаемых в случаях когда производится обращение по несуществующему ключу или индексу в отображениях и последовательностях.
          3. Кроме этого, может возбуждаться напрямую в codecs.lookup().
        9. IndexError
          1. Исключение, возникающее при обращении к элементу по индексу, находящемуся вне диапазона.
          2. Поднимается при попытках обратиться к элементу последовательности, используя индекс, выходящий за пределы поддерживаемого последовательностью диапазона.
          3. При работе со срезами индексы автоматически приводятся к поддерживающимся диапазоном.
        10. KeyError
          1. Исключение, возникающее при обращении к элементу по ключу, отсутствующему в отображении.
        11. MemoryError
          1. Исключение, возникающее в некритичных случаях исчерпания свободной памяти.
        12. NameError
          1. Исключение, возникающее в случаях, когда глобальное или локальное имя не найдено.
          2. Исключение относится только к неуточнённым именам.
        13. OSError
          1. Исключение, используемое для описания системных ошибок.
          2. OSError([arg]) или OSError(errno, strerror[, filename[, winerror[, filename2]]])
          3. arg : Кортеж аргументов (см. в описании ниже).
          4. либо
          5. errno : Числовой идентификатор ошибки из одноимённой переменной Си.
          6. strerror : Текстовое описание ошибки, полученное от операционной системы. Форматируется при помощи Си функции perror() и FormatMessage() (на POSIX и Windows соответственно).
          7. filename=None : Связанное имя файла. 3.4 Содержит имя файла, в том виде, в каком оно было передано в функцию (ранее значение обрабатывалось в соответствии с кодировкой файловой системы).
          8. winerror=None : На Windows принимает родной для этой ОС код ошибки (в таких случаях errno — это примерное соответствие кода для POSIX-систем), на прочих системах — не используется, а одноимённый атрибут объекта-исключения не существует.
          9. 3.4 filename2=None : Связанное имя файла. Обычно содержит второе имя файла, переданное в функцию (например, актуально для os.rename()).
        14. ReferenceError
          1. Исключение, возникающее при попытке обращения к атрибуту объекта через слабую ссылку, когда упомянутый объект уже недоступен.
          2. Исключение поднимается при попытке доступа к атрибуту прокси-объекта слабой ссылки, созданного при помощи weakref.proxy(), в случае, когда основной объект, для которого создавался прокси, уже недоступен (был удалён сборщиком мусора).
          3. За детальной информацией о слабых ссылках обратитесь к описанию модуля weakref.
        15. RuntimeError
          1. Исключение, описывающее ошибку времени исполнения не попадающую в другие категории.
          2. «Прикрепленное значение» являет собой строку с описанием того, что конкретно пошло не так.
        16. StopAsyncIteration
          1. Используется для остановки асинхронного прохода.
          2. Это исключение обрабатывается конструкцией async for и должно возбуждаться методом __anext__() асинхронного итератора для индикации остановки итерирования.
        17. StopIteration
          1. Исключение, сигнализирующее, что итератор исчерпывал доступные значения.
          2. Поднимается функцией next(), чтобы сигнализировать, что итератор исчерпал доступные значения.
        18. SyntaxError
          1. Исключение, поднимаемое парсером при обнаружении синтаксических ошибок в исходном коде.
          2. Исключение может подниматься при обработке инструкции import, вызовах встроенных функций exec(), eval(), или при считывании изначального скрипта или стандартного ввода (в том числе в интерактивном режиме).
          3. Атрибуты объекта исключения
          4. filename — Файл, в котором обнаружена ошибка. Кроме того: <string>, <stdin>.
          5. lineno — Номер строки.
          6. offset — Отступ (позиция от начала строки).
          7. text — Кусок кода, в котором обнаружена ошибка.
        19. SystemError
          1. Исключение, возникающее в случаях ошибок уровня интерпретатора.
          2. Подымается, когда интерпретатор сталкивается со внутренней ошибкой, недостаточно критичной, чтобы её нельзя было обработать.
          3. «Прикрепленное значение» является строкой, которая описывает причину исключения.
        20. TypeError
          1. Исключение, возникающее при попытке манипуляции объектом не поддерживающим такого рода манипуляцию.
          2. Поднимается, если операция, либо функция применяется к объекту несовместимого типа (к тому, который её не поддерживает).
        21. ValueError
          1. Исключение, возникающее в случаях, когда в функцию передан аргумент с неподдерживаемым значением.
        22. UnicodeError
          1. Исключение, возникающее в случае ошибок, связанных с Юникодом.
          2. Объект исключения содержит следующие свойства
          3. encoding — Название кодировки, вызвавшей ошибку.
          4. reason — Строка, описывающая конкретную ошибку кодека.
          5. object — Объект, который кодек пытался кодировать/декодировать.
          6. start — Начальная позиция (индекс) ошибочных данных в объекте.
          7. end — Позиция после ошибочных данных в объекте.
          8. Подтипы
          9. UnicodeDecodeError
          10. Исключение, возникающее при ошибках декодирования в юникод.
          11. UnicodeEncodeError
          12. Исключение, возникающее при ошибках кодирования из юникод.
          13. UnicodeTranslateError
          14. Исключение, возникающее в случае ошибки трансляции Юникод.
          15. Поднимается в случае, ошибок трасляции символов Юникод.
          16. Обычно обрабатывается в функциях обратного вызова при кодировке (например, встроенные strict, ignore, replace, xmlcharrefreplace и пр.).
        23. Warning
          1. Базовый класс для исключений-предупреждений.
          2. Данное семейство исключений представляет собой различные категории предупреждений.
      2. Свойства
        1. BaseException.args
          1. Аргументы, переданные в инициализатор исключения.
        2. BaseException.with_traceback
          1. Заставляет поднимаемое исключение дополнительно использовать указанную трассировку стека.
          2. BaseException.with_traceback(traceback)
          3. traceback : Объект трассировки. Например, из sys.exc_info()[2].
        3. KeyboardInterrupt
          1. Исключение, возникающее когда пользователь нажимает определённые клавиши прерывания процесса.
        4. SystemExit
          1. Исключение, поднимаемое sys.exit(), для остановки работы интерпретатора.
    2. Обработка ошибок в функциях
      1. try функция except тип ошибки + общий except
      2. finally
        1. то, что обрабатывается несмотря на ошибки после try
        2. используется для завершения (не для логики)
        3. В этом необязательно блоке можно определить код «уборки». Инструкции из этого блока будут выполнены после выполнения всех прочих блоков, в том числе если исключение не было обработано (в этом случае оно будет возбуждено повторно в конце блока finally автоматически) и если в блоке try присутствуют return или break. При этом информация об исключении недоступна.
      3. else
        1. выполняется независимо от успеха try
        2. используется для логики
        3. Инструкции в этом необязательном блоке выполняются по завершению блока try без исключений, а также без return, continue и break.
      4. raise
        1. Возбуждает указанное исключение.
        2. Инструкция позволяет прервать штатный поток исполнения при помощи возбуждения исключения.
  5. Unittests
    1. import unittest
  6. ООП
    1. Общее
      1. Преимущества
        1. Объектно-ориентированное программирование подразумевает повторное использование. Компьютерная программа написанная в форме объектов и классов может быть использована снова в других проектах без повторения кода;
        2. Использование модулярного подхода в объектно-ориентированном программировании позволяет получить читаемый и гибкий код;
        3. В объектно-ориентированном программировании каждый класс имеет определенную задачу. Если ошибка возникнет в одной части кода, вы можете исправить ее локально, без необходимости вмешиваться в другие части кода;
        4. Инкапсуляция данных (которую мы рассмотрим дальше в статье) вносит дополнительный уровень безопасности в разрабатываемую программу с использованием объектно-ориентированного подхода;
      2. Недостатки
        1. Для создания объектов необходимо иметь подробное представление о разрабатываемом программном обеспечении;
        2. Не каждый аспект программного обеспечения является лучшим решением для реализации в качестве объекта. Для новичков может быть тяжело прочертить линию в золотой середине;
        3. С тем, как вы вносите все новые и новые классы в код, размер и сложность программы растет в геометрической прогрессии;
    2. Классы
      1. понятие
        1. Класс в объектно-ориентированном программировании выступает в роли чертежа для объекта. Класс можно рассматривать как карту дома. Вы можете понять, как выглядит дом, просто взглянув на его карту.
        2. Объект - экземпляр класса. по умолчанию, нам нужно создать объект класса перед тем, как мы сможем начать использовать его методы и атрибуты
        3. задается с помощью class Название:
      2. атрибуты
        1. модификаторы доступа
          1. публичный — public
          2. Константы
          3. uppercase
          4. защиты от изменения нет
          5. защищенный — protected
          6. название начинается с _
          7. не используются извне, но могу быть использованы внутри и наследниками
          8. приватный — private
          9. название начинается с __
          10. не могут использованы извне и в наследниках, только внутри класса
          11. для доступа к атрибуту извне надо указать класс__артибут
          12. разделение доступа к атрибутам работает только по соглашению и разделению по типу написания
        2. типы по отношению
          1. атрибуты класса
          2. Атрибуты класса делятся среди всех объектов класса
          3. объявляются вне любого метода
          4. атрибуты экземпляров
          5. являются собственностью экземпляра
          6. объявляются внутри любого метода
        3. области видимости
          1. Локальные переменные
          2. Локальная переменная в классе — это переменная, доступ к которой возможен только внутри блока кода, в котором она определена. Например, если вы определите переменную внутри метода, к нему не удастся получить доступ откуда-либо вне метода.
          3. мы не можем получить доступ к локальной переменной вне блока, где эта локальная переменная была определена
          4. Глобальная переменная
          5. Глобальная переменная определяется вне любого блока, то есть метода, операторов-if, и тому подобное. Доступ к глобальной переменной может быть получен где угодно в классе.
      3. методы
        1. свойства
          1. методы используются для реализации функционалов объекта
          2. Возврат множественных значений из метода
          3. методы класса могут возвращать множественные значения
        2. типы
          1. Методы классов
          2. @classmethod
          3. аналогичны методам экземпляров, но выполняются не в контексте объекта, а в контексте самого класса (классы – это тоже объекты). Такие методы создаются с помощью декоратора @classmethod и требуют обязательную ссылку на класс (cls).
          4. Статичные методы
          5. @staticmethod
          6. Для объявления статического метода, вам нужно указать дескриптор @staticmethod перед названием метода
          7. нет обязательных параметров-ссылок вроде self. Доступ к таким методам можно получить как из экземпляра класса, так и из самого класса
          8. абстрагирован от класса
          9. Пример
        3. базовые
          1. Метод str
          2. Каждый объект Python по умолчанию содержит метод __str__ . Когда вы используете объект в качестве строки, вызывается метод __str__ , который по умолчанию выводит локацию памяти объекта. Однако, вы также можете предоставить собственное определение метода __str__ .
          3. Конструкторы
          4. __init__
          5. Конструктор — это специальный метод, который вызывается по умолчанию когда вы создаете объект класса.
          6. Для создания конструктора вам нужно создать метод с ключевым словом __init__
          7. конструктор может использоваться как обычный метод. Вы можете передавать и получать значения из конструктора. Он обычно используется таким образом, когда вам нужно инициализировать значения атрибута при создании экземпляра класса.
          8. в 1 классе может быть 1 конструктор
          9. магические методы (dunder), которые можно перегрузить/переопределить
          10. __init__(self[, ...])
          11. конструктор объектов класса, вызывается при создании объектов
          12. __del__(self)
          13. вызывается при удалении объекта сборщиком мусора.
          14. __str__(self)
          15. преобразование объекта к строковому представлению, вызывается функциями str, print и format. Возвращает строковое представление объекта.
          16. __add__()
          17. метод перегрузки оператора сложения, вызывается, когда объект участвует в операции сложения будучи операндом с левой стороны
          18. __setattr__()
          19. вызывается, когда атрибуту объекта выполняется присваивание
          20. __new__(cls[, ...])
          21. управляет созданием экземпляра. В качестве обязательного аргумента принимает класс (не путать с экземпляром). Должен возвращать экземпляр класса для его последующей его передачи методу __init__
          22. __repr__(self)
          23. вызывается встроенной функцией repr; возвращает "сырые" данные, использующиеся для внутреннего представления в python.
          24. __bytes__(self)
          25. вызывается функцией bytes при преобразовании к байтам.
          26. __format__(self, format_spec)
          27. используется функцией format (а также методом format у строк).
          28. __lt__(self, other)
          29. x < y вызывает x.__lt__(y).
          30. __le__(self, other)
          31. x ≤ y вызывает x.__le__(y).
          32. __eq__(self, other)
          33. x == y вызывает x.__eq__(y).
          34. __ne__(self, other)
          35. x != y вызывает x.__ne__(y)
          36. __gt__(self, other)
          37. x > y вызывает x.__gt__(y).
          38. __ge__(self, other)
          39. x ≥ y вызывает x.__ge__(y).
          40. __hash__(self)
          41. получение хэш-суммы объекта, например, для добавления в словарь.
          42. __bool__(self)
          43. вызывается при проверке истинности. Если этот метод не определён, вызывается метод __len__ (объекты, имеющие ненулевую длину, считаются истинными).
          44. __getattr__(self, name)
          45. вызывается, когда атрибут экземпляра класса не найден в обычных местах (например, у экземпляра нет метода с таким названием).
          46. __setattr__(self, name, value)
          47. назначение атрибута.
          48. __delattr__(self, name)
          49. удаление атрибута (del obj.name).
          50. __call__(self[, args...])
          51. вызов экземпляра класса как функции.
          52. __len__(self)
          53. длина объекта.
          54. __getitem__(self, key)
          55. доступ по индексу (или ключу).
          56. __setitem__(self, key, value)
          57. назначение элемента по индексу.
          58. __delitem__(self, key)
          59. удаление элемента по индексу.
          60. __iter__(self)
          61. возвращает итератор для контейнера.
          62. __reversed__(self)
          63. итератор из элементов, следующих в обратном порядке.
          64. __contains__(self, item)
          65. проверка на принадлежность элемента контейнеру (item in self).
          66. арифметические
          67. __add__(self, other)
          68. сложение. x + y вызывает x.__add__(y).
          69. __sub__(self, other)
          70. вычитание (x - y).
          71. __mul__(self, other)
          72. умножение (x * y).
          73. __truediv__(self, other)
          74. деление (x / y).
          75. __floordiv__(self, other)
          76. целочисленное деление (x // y).
          77. __mod__(self, other)
          78. остаток от деления (x % y).
          79. __divmod__(self, other)
          80. частное и остаток (divmod(x, y)).
          81. __pow__(self, other[, modulo])
          82. возведение в степень (x ** y, pow(x, y[, modulo])).
          83. __lshift__(self, other)
          84. битовый сдвиг влево (x << y).
          85. __rshift__(self, other)
          86. битовый сдвиг вправо (x >> y).
          87. __and__(self, other)
          88. битовое И (x & y).
          89. __xor__(self, other)
          90. битовое ИСКЛЮЧАЮЩЕЕ ИЛИ (x ^ y).
          91. __or__(self, other)
          92. битовое ИЛИ (x | y).
          93. r+функция
          94. __radd__(self, other), __rsub__(self, other), __rmul__(self, other), __rtruediv__(self, other), __rfloordiv__(self, other), __rmod__(self, other), __rdivmod__(self, other), __rpow__(self, other), __rlshift__(self, other), __rrshift__(self, other), __rand__(self, other), __rxor__(self, other), __ror__(self, other)
          95. делают то же самое, что и арифметические операторы, перечисленные выше, но для аргументов, находящихся справа, и только в случае, если для левого операнда не определён соответствующий метод.
          96. Например, операция x + y будет сначала пытаться вызвать x.__add__(y), и только в том случае, если это не получилось, будет пытаться вызвать y.__radd__(x). Аналогично для остальных методов.
          97. дополнительно
          98. __iadd__(self, other) - +=. __isub__(self, other) - -=. __imul__(self, other) - *=. __itruediv__(self, other) - /=. __ifloordiv__(self, other) - //=. __imod__(self, other) - %=. __ipow__(self, other[, modulo]) - **=. __ilshift__(self, other) - <<=. __irshift__(self, other) - >>=. __iand__(self, other) - &=. __ixor__(self, other) - ^=. __ior__(self, other) - |=. __neg__(self) - унарный -. __pos__(self) - унарный +. __abs__(self) - модуль (abs()). __invert__(self) - инверсия (~). __complex__(self) - приведение к complex. __int__(self) - приведение к int. __float__(self) - приведение к float. __round__(self[, n]) - округление. __enter__(self), __exit__(self, exc_type, exc_value, traceback) - реализация менеджеров контекста.
      4. свойства
        1. @property
        2. Выглядят как метод с добавлением декоратора @property
        3. Доступно только для чтения, нельзя изменять параметр
        4. могут иметь логику
        5. доступ как к атрибуту
        6. может иметь возможность записи
        7. Свойство имеет три части. Вам нужно определить атрибут, который является моделью в скрипте выше. Затем, вам нужно определить свойство атрибута, используя декоратор @property. Наконец, вам нужно создать установщик свойства, который является дескриптором @model.setter в примере выше.
      5. Метаклассы
        1. Метаклассы – это классы, инстансы которых тоже являются классами.
      6. Абстрактные классы в Python
        1. Абстрактным называется класс, который содержит один и более абстрактных методов. Абстрактным называется объявленный, но не реализованный метод. Абстрактные классы не могут быть инстанциированы, от них нужно унаследовать, реализовать все их абстрактные методы и только тогда можно создать экземпляр такого класса. В Python отсутствует встроенная поддержка абстрактных классов, для этой цели используется модуль abc (Abstract Base Class)
        2. ABC
          1. Абстрактные базовые классы
          2. Начиная с версии языка 2.6 в стандартную библиотеку включается модуль abc, добавляющий в язык абстрактные базовые классы
          3. Невозможно создать инстанцию (объект) от абстрактного класса
          4. Если абстрактный метод абстрактного класса не определен в дочернем классе, то будет возникать ошибка при создании объекта дочернего класса
          5. переиспользуемую логику можно сделать в абстрактных методах
          6. модуль ABC нужен для определения класса и его методов абстрактными
        3. @abstractmethod
          1. абстрактный метод
      7. mix in
        1. При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.
        2. В объектно-ориентированных языках программирования является способом реализации классов, отличным от широко используемых принципов, пришедших из языка программирования Simula. Механизм впервые реализован в Flavors. Преимуществом примесей является то, что повышая повторную используемость текстов программ, этот метод избегает многих проблем множественного наследования. Однако при этом метод накладывает свои ограничения.
        3. В языке с использованием примесей класс определяется только с атрибутами и параметрами, связанными с классом. Методы определяются в другом месте, как в Flavors и CLOS, и являются обобщёнными функциями. Последние реализуются для различных типов посредством диспетчеризации.
    3. Объекты
    4. Суть
      1. Полиморфизм
        1. суть
          1. способность объекта вести себя по-разному
          2. Полиморфизм в программировании реализуется через перегрузку метода, либо через его переопределение.
        2. Перегрузка метода
          1. Перегрузка метода относится к свойству метода вести себя по-разному, в зависимости от количества или типа параметров.
        3. Переопределение метода
          1. Переопределение метода относится к наличию метода с одинаковым названием в дочернем и родительском классах. Определение метода отличается в родительском и дочернем классах, но название остается тем же.
      2. Наследование
        1. наследование означает отношение IS-A
        2. Класс может наследовать характеристики другого класса. Класс, который наследует другой класс, называется дочерним классом или производным классом, и класс, который дает наследие, называется родительским, или основным.
        3. Множественное наследование
          1. родительский класс может иметь несколько дочерних, и, аналогично, дочерний класс может иметь несколько родительских классов
          2. негативные последствия (проблемы)
          3. deadly diamond of death
          4. семантическая неопределённость часто совокупно представляется как Проблема ромба[4].
          5. Ромбовидное наследование
          6. В Python проблема ромба остро встала в версии 2.3 после введения классов с общим предком object; начиная с этой версии было решено создавать список разрешения при помощи C3-линеаризации[1]. В случае ромба это означает поиск в глубину, начиная слева (D, B, A, C, A), а затем удаление из списка всех, кроме последнего включения каждого класса, который в списке повторяется. Следовательно, итоговый порядок разрешения выглядит так: [D, B, C, A].
          7. Поиск в гублину
          8. C3-линеаризация
          9. Method Resolution Order
          10. отсутствует возможность непосредственного многократного наследования от одного класса.
          11. порядок наследования изменяет семантику класса. Конструктор дочернего класса вызывает конструкторы непосредственных родителей, а те, в свою очередь — конструктор прародителя. Однако прародительский объект имеется в единственном экземпляре и конструировать его дважды нельзя, поэтому сработает вызов конструктора прародителя только конструктором первого родительского класса в списке наследования.
        4. super()
          1. Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
          2. super([type[, object-or-type]])
          3. type : Тип, от которого следует начать поиск объекта-посредника. 3.0 Ранее атрибут был обязателен.
          4. obj-or-type : Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого isinstance(obj, type) возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого issubclass(subtype, type) возвращает True.
          5. Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.
      3. Инкапсуляция
        1. Под инкапсуляцией в объектно-ориентированном программировании понимается упаковка данных и методов для их обработки вместе, т. е. в классе. В Python инкапсуляция реализуется как на уровне классов, так и объектов.
          1. Инкапсуляция в ООП понимается двояко. Во многих языках этот термин обозначает сокрытие данных, то есть невозможность напрямую получить доступ к внутренней структуре объекта, так как это небезопасно. Например, наполнить желудок едой можно напрямую, положив еду в желудок. Но это опасно. Поэтому прямой доступ к желудку закрыт. Чтобы наполнить его едой, надо совершить ритуал, через элемент интерфейса под названием рот.
          2. В Python нет такой инкапсуляции, хотя она является одним из стандартов ООП. В Python можно получить доступ к любому атрибуту объекта и изменить его. Однако в Питоне есть механизм, позволяющий имитировать сокрытие данных, если это так уж необходимо.
          3. Отсутствие сокрытия данных в Python делает программирование на нем более легким и понятным, но привносит ряд особенностей, связанных с пространствами имен.
          4. Второй смысл инкапсуляции – объединение свойств и поведения в единое целое, т. е. в класс. Инкапсуляция в этом смысле подразумевается самим определением объектно-ориентированного программирования и есть во всех ОО-языках.
        2. Все объекты в Python инкапсулируют внутри себя данные и методы работы с ними, предоставляя публичные интерфейсы для взаимодействия.
      4. Ассоциация
        1. Композиция
          1. Еще одной особенностью объектно-ориентированного программирования является возможность реализовывать так называемый композиционный подход. Заключается он в том, что есть класс-контейнер, он же агрегатор, который включает в себя вызовы других классов. В результате получается, что при создании объекта класса-контейнера, также создаются объекты включенных в него классов.
        2. Агрегация
        3. Ассоциированные объекты могут циклически ссылаться друг на друга, что ломает стандартный механизм сборки мусора. Избежать подобных проблем при ассоциации помогают слабые ссылки (модуль weakref).
  7. Дополнительная инфа
    1. Бинарные деревья
      1. Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.