34 open source библиотеки Python (2019)
Мы просмотрели и сравнили 10 000 open source библиотек для Python и выбрали 34 самые полезные.
![]()
Статья переведена при поддержке компании EDISON Software, которая пишет на Питоне, а также занимается разработкой мобильных приложений Android и iOS.
Python Toolkit
1. Pipenv: Python Development Workflow for Humans.
2. Pyxel: Разработка ретро-игр на Python.
3. PyTest v3.5: Фреймворк, помогающий писать короткие тесты, и масштабируется для сложных функциональных тестов.
4. Poetry: Упрощает dependency management и packaging.
6. Faust: библиотека для стриминговых/потоковых приложений.
7. Pampy: The Pattern Matching о котором вы мечтали.
8. Pyre-check: Performant type-checking.
9. Delorean, библиотека для работы со временем и датами.
10. Cirq: библиотека для работы с схемами Noisy Intermediate Scale Quantum (NISQ).
11. Python-nubia: Фреймворк для работы с командной строкой.
12. Requests-HTML: HTML Parsing for Humans.
13. Bokeh: интерактивная визуализация данных в современных браузерах.
14. Vibora: быстро, клёво, асинхронно.
15. Pywebview v2.0: Отображаем HTML-контент в отдельном окне.
16. WhatWaf: Обнаружение и обход брандмауэров и систем защиты веб-приложений.
17. Molten: минималистичный и быстрый фреймворк для создания HTTP API.
Terminal
18. Termtosvg: записываем сессии работы с терминалом как SVG-анимацию.
19. Asciinema v2.0: записываем терминальные сессии.
20. Termgraph: инструменты для командной строки, рисует графики.
Code Editor
21. Black: бескомпромиссный code formatter.
22. Algojammer: экспериментальный редактор кода для написания алгоритмов.
23. Bowler: инструмент рефакторинга на уровне синтаксического дерева.
Debugging
24. Py-spy: позволяет визуализировать, на что ваша программа тратит время, не перезапуская программу.
25. Birdseye: графический дебаггер, использующий AST.
26. Icecream: няшный дебаггер.
Compiler
27. Transcrypt: транслятор Python 3.7 to JavaScript.
28. Pyodide: datascience-стек в браузере.
Data Related
29. Voluptuous: валидация данных.
30. Botflow: Data driven programming framework for Data pipeline work (Web Crawler, Machine Learning, Quantitative Trading.etc).
31. Fast-Pandas: сравнительные тесты производительности в Pandas операциях.
Chart
32. A Tour in the Wonderland of Math with Python: коллекция скриптов для рисования красивых фигур и анимации алгоритмов.
33. Chartify: помогает data scientists создавать графики.
34. Hypertools v0.5: A инструмент для геометрического представления многомерных данных.
Как создать свой первый open source проект на Python (17 шагов)
Каждый разработчик ПО должен знать как создать библиотеку с нуля. В процессе работы Вы можете многому научиться. Только не забудьте запастись временем и терпением.
Может показаться, что создать библиотеку с открытым исходным кодом сложно, но Вам не нужно быть потрепанным жизнью ветераном своего дела, чтобы разобраться в коде. Также как Вам не нужна мудреная идея продукта. Но точно понадобятся настойчивость и время. Надеюсь, что данное руководство поможет Вам создать первый проект с минимальной затратой и первого, и второго.
В этой статье мы пошагово разберем процесс создания базовой библиотеки на Python. Не забудьте заменить в приведенном ниже коде my_package, my_file и т.п. нужными вам именами.
Шаг 1: Составьте план
Мы планируем создать простую библиотеку для использования в Python. Данная библиотека позволит пользователю легко конвертировать блокнот Jupyter в HTML-файл или Python-скрипт.
Первая итерация нашей библиотеки позволит вызвать функцию, которая выведет определенное сообщение.
Теперь, когда мы уже знаем, что хотим делать, нужно придумать название для библиотеки.
Шаг 2: Дайте имя библиотеке
Придумывать имена сложно. Они должны быть короткими, уникальными и запоминающимися. Также они должны быть написаны строчными буквами, без прочерков и прочих знаков препинания. Подчеркивание не рекомендуется. В процессе создания библиотеки убедитесь, что придуманное Вами имя доступно на GitHub, Google и PyPi.
Если Вы надеетесь и верите, что однажды Ваша библиотека получит 10000 звезд GitHub, то стоит проверить, доступно ли данное имя в социальных сетях. В данном примере я назову свою библиотеку notebookc, потому что это имя доступное, короткое и более-менее описывает суть моей задумки.
Шаг 3. Настройте среду
Убедитесь, что у вас установлены и настроены Python 3.7, GitHub и Homebrew. Если вам нужно что-то из этого, вот подробности:
Python
Скачайте Python 3.7 здесь и установите его.
GitHub
Если у вас нет учетной записи GitHub, перейдите по этой ссылке и оформите бесплатную подписку. Посмотрите, как установить и настроить Git здесь. Вам потребуется утилита командной строки. Перейдите по ссылкам, скачайте и установите все, что Вам понадобится, придумайте юзернейм и укажите электронную почту.
Homebrew
Homebrew — менеджер библиотек для Mac. Инструкции по установке найдете здесь.
Начиная с Python 3.6 рекомендуется использовать venv для создания виртуальной среды для разработки библиотек. Существует множество способов управления виртуальными средами с помощью Python и все они со временем изменяются. Можете ознакомиться с обсуждением здесь, но, как говорится, доверяй, но проверяй.
Начиная с версии Python 3.3 venv входит в систему по умолчанию. Обратите внимание, что venv устанавливает pip и setuptools начиная с Python 3.4.
Создайте виртуальную среду Python 3.7 с помощью следующей команды:
Замените my_env вашим именем. Активируйте среду таким образом:
Теперь вы должны наблюдать (my_env) (или имя, которое вы выбрали для вашей виртуальной среды) в крайнем левом углу терминала.
Теперь давайте настроим GitHub.
Шаг 4: Создайте организацию в GitHub
GitHub — лидер на рынке реестров контроля версий. Еще две популярные опции — GitLab и Bitbucket. В данном гиде мы будем использовать именно GitHub.
Вам придется часто обращаться к Git и GitHub, поэтому если Вы не знакомы с системой, то можете обратиться к моей статье.
Создайте новую организацию в GitHub. Следуйте инструкциям. Я назвал свою организацию notebooktoall. Вы можете создать репозиторий под своей личной учетной записью, но одна из целей работы — научиться создавать проект с открытым исходным кодом для более широкого сообщества.
Шаг 5: Настройте GitHub Repo
Создайте новый репозиторий. Я назвал свой notebookc.
Рекомендую выбрать лицензию в списке Выбрать лицензию. Она определяет, что могут делать пользователи Вашего репозитория. Одни лицензии позволяют больше других. Если Вы ничего не выбираете, то автоматически начинают действовать стандартные законы об авторских правах. Узнайте больше о лицензиях здесь.
Для этого проекта я выбрал третью версию Открытого лицензионного соглашения GNU, потому что она популярная, проверенная и “гарантирует пользователям свободу использования, изучения, обмена и изменения программного обеспечения” — источник.
Шаг 6: Клонируйте и добавьте директории
Выберите, куда Вы хотите клонировать Ваш репозиторий или выполните следующую функцию:
git clone https://github.com/notebooktoall/notebookc.git
Подставьте свою организацию и репозиторий.
Ваши исходные папки и файлы должны выглядеть так:
.git
.gitignore
LICENSE
README.rst
Создайте вложенную папку для основных файлов проекта. Я советую назвать ее так же, как и вашу библиотеку. Убедитесь, что в имени нет пробелов.
Создайте файл с именем __init__.py в основной вложенной папке. Этот файл пока останется пустым. Он необходим для импорта файлов.
Содержимое моей директории notebookc выглядит следующим образом:
.git
.gitignore
LICENSE
README.rst
notebookc/__init__.py
notebookc/notebookc.py
Шаг 7: Скачайте и установите requirements_dev.txt
На верхнем уровне директории проекта создайте файл requirements_dev.txt. Часто этот файл называют requirements.txt. Назвав его requirements_dev.txt, Вы показываете, что эти библиотеки могут устанавливаться только разработчиками проекта.
В файле укажите, что должны быть установлены pip и wheel.
Обратите внимание, что мы указываем точные версии библиотек с двойными знаками равенства и полными номерами версии.
Закрепите версии вашей библиотеку в requirements_dev.txt
Соавтор, который разветвляет репозиторий проекта и устанавливает закрепленные библиотеки require_dev.txt с помощью pip, будет иметь те же версии библиотеки, что и Вы. Вы знаете, что эта версия будет работать у них. Кроме того, Read The Docs будет использовать этот файл для установки библиотек при сборке документации.
В вашей активированной виртуальной среде установите библиотеку в файл needs_dev.txt с помощью следующей команды:
Настоятельно рекомендую обновлять эти библиотеки по мере выхода новых версий. На данный момент установите любые последние версии, доступные на PyPi.
В следующей статье расскажу, как установить инструмент, облегчающий этот процесс. Подпишитесь, чтобы не пропустить.
Шаг 8: Поработайте с кодом
В целях демонстрации давайте создадим базовую функцию. Свою собственную крутую функцию сможете создать позже.
Вбейте следующее в Ваш основной файл (для меня это notebookc/notebookc/notebookc.py):
Вот наша функция во всей красе.
Строки документа начинаются и заканчиваются тремя последовательными двойными кавычками. Они будут использованы в следующей статье для автоматического создания документации.
Сохраните изменения. Если хотите освежить память о работе с Git, то можете заглянуть в эту статью.
Шаг 9: Создайте setup.py
Файл setup.py — это скрипт сборки для вашей библиотеки. Функция setup из Setuptools создаст библиотеку для загрузки в PyPI. Setuptools содержит информацию о вашей библиотеке, номере версии и о том, какие другие библиотеки требуются для пользователей.
Вот мой пример файла setup.py:
Обратите внимание, что long_description установлен на содержимое файла README.md. Список требований (requirements), указанный в setuptools.setup.install_requires, включает в себя все необходимые зависимости для работы вашей библиотеки.
В отличие от списка библиотек, требуемых для разработки в файле require_dev.txt, этот список должен быть максимально разрешающим. Узнайте почему здесь.
Ограничьте список install_requires только тем, что Вам надо — Вам не нужно, чтобы пользователи устанавливали лишние библиотеки. Обратите внимание, что необходимо только перечислить те библиотеки, которые не являются частью стандартной библиотеки Python. У Вашего пользователя и так будет установлен Python, если он будет использовать вашу библиотеку.
Наша библиотека не требует никаких внешних зависимостей, поэтому Вы можете исключить четыре библиотеки, перечисленных в примере выше.
Соавтор, который разветвляет репозиторий проекта и устанавливает закрепленные библиотеки с помощью pip, будет иметь те же версии, что и Вы. Это значит, что они должны работать.
Измените информацию setuptools так, чтобы она соответствовала информации вашей библиотеки. Существует множество других необязательных аргументов и классификаторов ключевых слов — см. перечень здесь. Более подробные руководства по setup.py можно найти здесь и здесь.
Сохраните свой код в локальном репозитории Git. Пора переходить к созданию библиотеки!
Шаг 10: Соберите первую версию
Twine — это набор утилит для безопасной публикации библиотек Python на PyPI. Добавьте библиотеку Twine в следующую пустую строку файла require_dev.txt таким образом:
Затем закрепите Twine в Вашей виртуальной среде, переустановив библиотеки needs_dev.txt.
Затем выполните следующую команду, чтобы создать файлы библиотеки:
На компьютере пользователя pip будет по мере возможности устанавливать библиотеки как wheels/колеса. Они устанавливаются быстрее. Когда pip не может этого сделать, он возвращается к исходному архиву.
Давайте подготовимся к загрузке нашего колеса и исходного архива.
Шаг 11: Создайте учётную запись TestPyPI
PyPI — каталог библиотек Python (Python Package Index). Это официальный менеджер библиотек Python. Если файлы не установлены локально, pip получает их оттуда.
TestPyPI — это работающая тестовая версия PyPI. Создайте здесь учетную запись TestPyPI и подтвердите адрес электронной почты. Обратите внимание, что у Вас должны быть отдельные пароли для загрузки на тестовый сайт и официальный сайт.
Шаг 12: Опубликуйте библиотеку в PyPI
Используйте Twine для безопасной публикации вашей библиотеки в TestPyPI. Введите следующую команду — никаких изменений не требуется.
Вам будет предложено ввести имя пользователя и пароль. Не забывайте, что TestPyPI и PyPI имеют разные пароли!
При необходимости исправьте все ошибки, создайте новый номер версии в файле setup.py и удалите старые артефакты сборки: папки build, dist и egg. Перестройте задачу с помощью python setup.py sdist bdist_wheel и повторно загрузите с помощью Twine. Наличие номеров версий в TestPyPI, которые ничего не значат, особой роли не играют — Вы единственный, кто будет использовать эти версии библиотек.
После того, как Вы успешно загрузили свою библиотеку, давайте удостоверимся, что Вы можете установить его и использовать.
Шаг 13: Проверьте и используйте установленную библиотеку
Создайте еще одну вкладку в командном интерпретаторе и запустите другую виртуальную среду.
Вот официальные инструкции по установке вашей библиотеки из TestPyPI:
Вы можете заставить pip загружать библиотеки из TestPyPI вместо PyPI, указав это в index-url.
Если хотите, чтобы pip также извлекал и другие библиотеки из PyPI, Вы можете добавить — extra-index-url для указания на PyPI. Это полезно, когда тестируемая библиотека имеет зависимости:
Если у вашей библиотеки есть зависимости, используйте вторую команду и подставьте имя вашей библиотеки.
Вы должны увидеть последнюю версию библиотеки, установленного в Вашей виртуальной среде.
Чтобы убедиться, что Вы можете использовать свою библиотеку, запустите сеанс IPython в терминале следующим образом:
Импортируйте свою функцию и вызовите ее со строковым аргументом. Вот как выглядит мой код:
После я получаю следующий вывод:
(Когда-нибудь я конвертирую для тебя блокнот, Джефф)
Шаг 14: Залейте код на PyPI
Загрузить код можно так:
Обратите внимание, что Вам нужно обновить номер версии в setup.py, если Вы хотите залить новую версию в PyPI.
Отлично, теперь давайте загрузим нашу работу на GitHub.
Шаг 15: Залейте библиотеку на GitHub
Убедитесь, что Ваш код сохранен.
Моя папка проекта notebookc выглядит так:
Шаг 16: Создайте и объедините PR
Шаг 17: Обновите рабочую версию на GitHub
Создайте новую версию библиотеки на GitHub, кликнув на релизы на главной странице репозитория. Введите необходимую информацию о релизе и сохраните.
На сегодня достаточно!
Мы научимся добавлять другие файлы и папки в будущих статьях.
А пока давайте повторим шаги, которые мы разобрали.
Итог: 17 шагов к рабочей библиотеке
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:
Справочник
Встроенные функции Python
Возвращает абсолютную величину (модуль числа).
all(iterable)
Проверяет, все ли указанные элементы принимают значение «истина».
iterable : Объект, поддерживающий итерирование.
Вернёт True, если все элементы итерируемого объекта представляются истиной (True).
Внимание: Также возвращает True, если итерируемый объект пуст.
any(iterable)
Проверяет, есть ли среди указанных элементов хотя бы один, принимающий значение «истина».
iterable : Объект, поддерживающий итерирование.
Вернёт True, если любой из элементов итерируемого объекта явится истиной.
Внимание: Возвращает False, если итерируемый объект пуст.
ascii(object)
Возвращает строковое представление объекта с экранированными не-ASCII символами.
object : Объект, для которого требуется создать строковое представление.
Как и repr(), возвращает строковое представление объекта object, но при этом экранирует не-ASCII символы, возвращённые repr() при помощи \x, \u или \U.
Преобразование целого числа в двоичную строку.
Преобразует целое число в двоичную строку. Результатом будет полноценное Python-выражение.
bool([x])
Преобразование к типу bool, использующая стандартную процедуру проверки истинности. Если х является ложным или опущен, возвращает значение False, в противном случае она возвращает True.
bytearray([source[, encoding[, errors]]])
mode : Режим компиляции кода: exec, если код состоит из последовательности инструкций; eval, если код содержит одно выражение; single, если код состоит из одной инструкции. Если код содержит несколько строк, то при использовании режимов single и eval (а до версии 3.2 ещё и exec), нужно завершить ввод не меньшей мере одним символом перевода строки.
Если исходный код содержит ошибку возбуждается исключение SyntaxError, если он содержит нулевые байты — исключение TypeError.
Объекты кода могут быть исполнены при помощи exec() или eval().
complex([real[, imag]])
Преобразование к комплексному числу.
delattr(obj, name)
Удаляет из объекта указанный атрибут.
obj : object Объект, из которого следует удалить атрибут.
name : str Строка с именем атрибута, который должен быть удалён из указанного объекта.
Атрибут объекта (свойство, метод, элемент) будет удалён в случае, если объект разрешает/поддерживает это действие.
Метод зачастую используется в случаях, когда имя атрибута заранее неизвестно и содержится в переменной.
Синоним: директива del.
Для возвращения атрибута используется getattr(). Для установки атрибута используется setattr(). Для проверки существования атрибута используется hasattr().
dir([obj])
Возвращает имена [переменных], доступные в локальной области, либо атрибуты указанного объекта в алфавитном порядке.
obj : Объект, для которого следует вернуть имена атрибутов.
При вызове без аргумента, возвращает имена [переменных], доступные в локальной области, иначе — атрибуты указанного объекта.
Определение в классе метода dir(), возвращающего список и имён, позволяет варьировать результат выполнения данной функии для экземпляров класса. Это может быть особенно полезно, когда класс определяет также методы доступа к атрибутам: getattr() и getattribute().
Для объектов, класс которых не определил dir(), функция попытается определить атрибуты по данным dict.
Возвращаемый список может включать не все атрибуты, особенно в случаях с переопределенным getattr().
Механизм извлечения имён может быть реализован по разному для различных типов: 1. Если объект является модулем, список будет содержать имена атрибутов модуля; 2. Если объект является типом или классом, список будет содержать имена атрибутов данного объекта и его родителей (вычисляются рекурсивно). 3. В других случаях список будет содержать имена атрибутов самого объекта, его класса, и классов-родителей (вычисляются рекурсивно).
dict([object])
Создаёт новый словарь. Объект dict является классом словаря.
divmod()
Для целочисленного деления возвращает пару частное-остаток от деления аргументов.
a : Число. Делимое.
b : Число. Делитель.
Если аргументы являются разными типами действуют правила двоичной арифметики.
Для целых результат аналогичен (a // b, a % b).
enumerate(sequence[, start=0])
Возвращает генератор, отдающий пары счётчик-элемент для элементов указанной последовательности.
sequence : iterable Любая последовательность, итератор, или объект, поддерживающий итерирование.
start=0 : int Начальное значение счётчика.
Функция применяется в случаях, когда необходим счётчик количества элементов в последовательности.
Позволяет избавиться от необходимости инициализировать и обновлять отдельную переменную-счётчик:
eval(expression, globals=None, locals=None)
Разбирает и исполняет указанное выражение.
expression : Выражение, которое требуется исполнить, в виде строки. Либо объект кода.
globals=None : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить выражение. Если указан, но не содержит атрибута builtins данные указанного пространства будут дополнены данными общего глобального пространства, перед разбором выражения. Таким образом, выражение будет иметь доступ ко всем встроенным модулям.
locals=None : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить выражение. Если не указано, то используется словарь глобального пространства. Если оба аргумента опущены, то выражение будет выполнено в среде, где был осуществлён вызов функции. В случае ошибок возбуждает SyntaxError.
Данная функция также может быть использована для выполнения произвольных объектов кода, например тех, что возвращает compile().
Если объект кода собран в режиме exec будет возвращено None.
exec(obj[, globals[, locals]])
Динамически исполняет указанный код.
obj : Строка кода, либо объект кода. Поддерживается ввод данных из файлов (считываются до EOF). Если передана строка, она разбирается в набор инструкций, который потом исполняется (если отсутствуют синтаксические ошибки). Если передан объект кода, то он исполняется. Необязательные аргументы (см. ниже) могут быть указаны в виде кортежа прямо после инструкции.
globals : Ожидается dict. Словарь глобального пространства, относительно которого следует исполнить код. Если locals не передан, будет использован globals. Если словарь не имеет значения по ключу builtins, на это место вставляется ссылка на значение аналогичного атрибута глобального пространства. Модифицировав builtins словаря передаваемого в функцию, вы можете контролировать, какие какие из встроенных инструментов будут доступны коду.
locals : Ожидается объект-отображение (например, dict). Локальное пространство, в котором следует исполнить код.
Если дополнительные параметры опущены, код исполняется в текущем пространстве.
Не следует пытаться модифицировать словарь locals (см. описание locals()). Если требуется влияние кода, исполненного exec() на локальную область, явно передавайте словарь locals.
filter((func, iterable)
При помощи указанной функции фильтрует элементы переданного объекта.
func : Фильтрующая функция. Должна принимать элемент фильтруемого объекта. Если функция вернёт False, данный элемент не попадёт в результат. Если передано None, считается что требуется применить тождественное отображение (lambda *args: args), таким образом все элементы, оцениваемые как False будут отфильтрованы.
iterable : Объект, элементы которого следует отфильтровать. Может быть последовательностью, объектом поддерживающим итерирование, либо итератором. Если объект является строкой, или кортежем, результат будет соответствующего типа, в остальных случаях возвращается список.
float([x])
Преобразование к числу с плавающей точкой. Если аргумент не указан, возвращается 0.0.
format(value[, format_spec])
Форматирует указанное значение.
value : Значение, которое требуется отформатировать.
format_spec : Настройки формата, в соответствии с которыми требуется выполнить форматирование. Интерпретация настроек зависит от типа значения. По умолчанию — пустая строка (обычно приводит к тому же эффекту, что и применение str ()).
Интерпретация настроек форматирования зависит от типа переданного значения, однако большинство встроенных типов используют общий мини-язык форматирования.
Вызов этой функции format(value, formatspec) транслируется в type(value).format(value, formatspec), при этом словарь экземпляра при поиске метода format() во внимание не берётся.
frozenset([iterable])
Возвращает неизменяемое множество.
getattr(obj, name[, default])
Возвращает значение атрибута объекта.
obj : object Объект, значение атрибута которого требуется получить.
name : str Имя атрибута, значение которого требуется получить.
default : Значение по умолчанию, которое будет возвращено, если объект не располагает указанным атрибутом. Если не задано, и атрибут отсутствует, возбуждается исключение AttributeError. Функция возвращает значение атрибута указанного объекта по имени.
Обычно используется в тех случаях, когда объект и/или имя атрибута может варьироваться (является переменной).
Для установки атрибута используется setattr(). Для удаления атрибута используется delattr(). Для проверки существования атрибута используется hasattr().
globals()
Возвращает словарь с глобальной таблицей символов, определённых в модуле.
Возвращает словарь с глобальной таблицей символов — словарь текущего модуля.
Если вызвана внутри функции/метода возвращает словарь модуля, в котором функция или метод определены, но не модуля из которых они были вызваны.
hasattr(obj, name)
Возвращает флаг, указывающий на то, содержит ли объект указанный атрибут.
obj : object Объект, существование атрибута в котором нужно проверить.
name : str Имя атрибута, существование которого требуется проверить. Возвращает True, если атрибут существует, иначе — False.
Функция основывается на вызове getattr() с последующей проверкой на предмет случившегося исключения.
Для возвращения атрибута используется getattr(). Для установки атрибута используется setattr(). Для удаления атрибута используется delattr().
hash(obj)
Возвращает хеш указанного объекта.
Хеш используется, в частности, для быстрого сравнения ключей при поиске по словарям. Равные числовые значения имеют одинаковый хеш, даже если значения принадлежат разным типам (например, 1 и 1.0).
Пользовательские типы могут переопределять метод hash(), результат которого будет использован при вызове hash(). Однако, следует помнить, что функция hash() обрезает значение в соответствии с битностью хоста.
Возвращает строку с шестнадцатеричным представлением указанного целого.
Получаемая строка имеет нижний регистр и префикс 0x.
id(obj)
Возвращает идентификатор указанного объекта.
obj : Объект, идентификатор которого требуется получить.
Возвращает целое, гарантированно являющееся уникальным и постоянным для объекта на время его существования.
Таким образом, объекты, периоды существования которых не пересекаются, могут иметь одинаковый идентификатор.
input([prompt])
Считывает и возвращает строку входных данных.
prompt : Строка-приглашение, которая должна быть отправлена на стандартное устройство вывода (заключительный перевод каретки при этом удаляется). Если загружен модуль readline, тогда функция воспользуется им для удобства ввода пользователя (например, для поддержки истории команд).
Функция считывает строку данных, полученную с устройства ввода и возвращает её без заключительного перевода каретки.
В случае считывания EOF (признак конца файла), поднимается исключение EOFError.
int([x=0, [base=10]])
Преобразует x к целому числу в десятичной системе счисления. Вместо десятичной системы можно указать любое основание от 2 до 36 включительно.
import(name, globals=None, locals=None, fromlist=(), level=0)
iter(obj[, sentinel])
Возвращает объект итератора.
obj : Объект коллекции, поддерживающей итерирование (реализует iter()), либо объект, поддерживающий протокол последовательности (реализует getitem(), где аргумент целое, начиная с нуля). Если передан другой объект, возбуждается TypeError.
sentinel : Если этот аргумент предоставлен, то ожидается, что obj содержит объект, поддерживающий вызов. В этом случае, созданный итератор будет вызывать указанный объект (без аргументов) с каждым обращением к своему next() и проверять полученное значение на равенство с sentinel. Если полученное значение равно sentinel, возбуждается StopIteration, иначе возвращается полученное значение. Функция возвращает итератор по объекту, поддерживающему итерирование по его элементам.
Одно из применений sentinel — чтение строк, пока не будет достигнута нужная. Следующий пример считывает файл, пока метод readline() не вернёт пустую строку:
Пользовательский тип, определивший call():
isinstance()
Возвращает флаг, указывающий на то, является ли указанный объект экземпляром указанного класса (классов).
issubclass(cls, classinfo)
Возвращает флаг, указывающий на то, является ли указанный класс подклассом указанного класса (классов).
cls : Класс, требующий проверки.
classinfo : Класс, либо кортеж с классами. Если аргумент не является классом, либо кортежем с классами, возбуждается TypeError. Возвращает True, если указанный класс является подклассом указанного класса (классов). Класс считается подклассом самого себя.
Для проверки того, является ли объект экземпляром класса (классов) используйте isinstance.
len(obj)
Возвращает число элементов в указанном объекте-контейнере.
obj : Объект-контайнер, число элементов в котором требуется определить. Возвращает число элементов в контейнерах: объекте-последовательности (строка, байты, кортеж, список, диапазон) или объекте-коллекции (словарь, множество, неизменяемое множество и пр.).
list([iterable])
locals()
Возвращает словарь, представляющий текущую локальную таблицу символов.
Обновляет и возвращает словарь с текущей локальной таблицей символов.
Если функция вызвана внутри другой функции, то она возвращает также свободные (объявленные вне функции, но используемые внутри неё) переменные.
map(func, iterable, …)
Применяет указанную функцию к каждому элементу указанной последовательности/последовательностей.
func : Функция, которую следует применить к элементам последовательности или последовательностей. Должна принимать количество элементов равное количеству последовательностей. Если передано None, считается что требуется применить тождественное отображение (lambda *args: args), при этом, если передано несколько последовательностей результат будет содержать кортежи с данными из каждой из них.
iterable : Последовательность (или объект, поддерживающий итерирование), к элементам которой требуется применить функцию. Если в какой‑либо из последовательностей количество элементов меньше, чем в остальных, недостающие элементы считаются None. Итератор останавливается, когда самая короткая из последовательностей исчерпана.
max(iterable, *args[, key, default])
Возвращает элемент с набольшим значением из переданных в функцию.
iterable : Если указан один позиционный аргумент, то ожидается, что он является итерируемым объектом. Возвращается элемент с максимальным значением, найденный среди элементов этого объекта.
args : Если указано несколько позиционных аргументов, элемент с наибольшим значением разыскивается среди них.
default : Этим аргументом можно указать значение, которое следует вернуть, если итерируемый объект окажется пустым. Если последовательность пуста и аргумент не указан, возбуждается ValueError.
В указанном итерируемом объекте, или среди аргументов, обнаруживает и возвращает элемент с набольшим значением.
memoryview(obj)
Создает объект memoryview.
Возвращает элемент с наименьшим значением из переданных в функцию.
iterable: Если указан один позиционный аргумент, то ожидается, что он является итерируемым объектом. Возвращается элемент с минимальным значением, найденный среди элементов этого объекта.
args: Если указано несколько позиционных аргументов, элемент с наименьшим значением разыскивается среди них.
default: Этим аргументом можно указать значение, которое следует вернуть, если итерируемый объект окажется пустым. Если последовательность пуста и аргумент не указан, возбуждается
В указанном итерируемом объекте, или среди аргументов, обнаруживает и возвращает элемент с наименьшим значением.
next(iter[, default])
Возвращает следующий элемент итератора.
iter : Объект итератора, возвращающий элементы.
default : Значение, которое должно быть возвращено вместо возбуждения StopIteration, в случае исчерпания элементов при итерации.
Функция вызывает метод next() указанного объекта для получения следующего элемента.
При исчерпании элементов, возбуждается исключение StopIteration.
object()
Возвращает безликий объект, являющийся базовым для всех объектов.
open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Открывает файл и возвращает представляющий его объект.
file : Строка или байтовая строка, представляющая путь (абсолютный, либо относительный для текущей рабочей директории) к файлу, который требуется открыть. Либо целое, являющееся дескриптором файла (он будет закрыт при закрытии возвращаемого объекта ввода/вывода, при условии, что closefd установлен в True).
mode=r : Строка, обозначающая режим, в котором следует открыть файл.
buffering=-1 : Целое. Политика буферизации. 0 — отключить буферизацию (только для двоичного режима); 1 — построчная буферизация (только для текстового режима); > 1 — размер буфера в байтах. Если не указана, используются политика буферизации по умолчанию (см. ниже).
encoding=None : Имя кодировки для кодирования/декодирования файла. Следует указывать только для текстовых файлов. Если не указана, используется системная кодировка: для определения вызывается locale.getpreferredencoding(False). При чтении и записи двоичных файлов указывать кодировку не следует. Список поддерживаемых кодировок можно найти в модуле codecs.
errors=None : Строка, обозначающая режим, в котором будут обрабатываться ошибки кодирования/декодирования. Следует использовать только для текстовых файлов. В модуле codecs предопределено несколько режимов, пользовательские могут быть зарегистрированы при помощи codecs.register_error().
newline=None : Строка, определяющая режим работы универсальных переводов строк. Следует использовать только для текстовых файлов. Варианты: None, пустая строка, \n, \r, и \r\n. None — при чтении потока будут использованы универсальные переводы строк (\n, \r и \r\n будут преобразованы в \n); при записи — \n преобразуются в разделитель, используемый в системе (os.linesep). Пустая строка — при чтении также используются универсальные переводы строк, однако символы не будут преобразованы в \n; при записи преобразование не происходит. Другие значения — при чтении разбивка на строки осуществляется при помощи значения, преобразование не производится; при записи \n преобразуются в указанное значение.
closefd=True : Флаг необходимости закрытия файлового дескриптора. Используется только, если в file указан дескриптор, иначе возбуждается исключение. Если False, то дескриптор будет оставлен открытым даже после закрытия файла.
opener=None : Пользовательский объект, поддерживающий вызов, который следует использовать для открытия файла. Этот объект получая на входе file и flags, должен возвращать открытый дескриптор файла (возврат os.open и None при этом функционально идентичны). Описание объектов типа file можно найти в одноимённом разделе — file.
Если файл не может быть открыт, возбуждается исключение OSError.
ord(chr)
Возвращает числовое представление для указанного символа.
chr : Символ, который следует представить в виде целого.
pow(x, y[, z])
Возвращает результат возведения числа в степень, с опциональным делением по модулю.
x : Число, которое требуется возвести в степень.
y : Число, являющееся степенью, в которую нужно возвести первый аргумент. Если число отрицательное, аргумент z не принимается.
z : Число, на которое требуется произвести деление по модулю. Если число указано, ожидается, что x и y положительны и имеют тип int.
Ожидаются аргументы численных типов.
Если переданы операнды разных типов, приведение производится по правилам двоичной арифметики.
Случай использования только первых двух аргументов pow(x, y) эквивалентен использованию оператора возведения в степень: x ** y. Нотация с тремя аргументами используется для возведения в степень по модулю.
property(fget=None, fset=None, fdel=None, doc=None)
print(*objs, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
Выводит заданные объекты на экран или отправляет их текстовым потоком в файл.
objs : Объекты, которые требуется отправить в файл.
sep=»» : Строка, которой следует разделить объекты. None — использовать значение по умолчанию. Ожидается, что аргумент будет передан по имени.
end=\n** : Строка, которой следует поставить после всех объектов. None — использовать значение по умолчанию. Ожидается, что аргумент будет передан по имени.
file=sys.stdout : Ожидается объект, реализующий метод wrtite(string). Если значение не указано, либо None будет использован sys.stdout. Ожидается, что аргумент будет передан по имени.
flush= False : Если True поток будет сброшен в файл принудительно. Обычно же необходимость буферизации определяется типом файла.
Объекты будут преобразованы в строку по тем же правилам, по которым работает str()
Если объекты не указаны, запишет значение из параметра end.
range(start, stop[, step])
Арифметическая прогрессия от start до stop с шагом step.
repr(obj)
Возвращает формальное строковое представление указанного объекта.
obj : Объект для которого требуется получить формальное строковое представление. Для многих типов функция возвращает строку, которая при передаче в eval() может произвести объект с тем же значением, что и исходный.
В других случаях представление является строкой, обрамлённой угловыми скобками ( ), содержащей название типа и некую дополнительную информацию, часто — название объекта и его адрес в памяти.
reversed(seq)
round(number[, ndigits])
Возвращает число с плавающей запятой, округлённое до указанного количества цифр после запятой.
number : Число, которое требуется округлить.
ndigits : Количество знаков после запятой. Если не указано, то равно 0.
Для встроенных типов, поддерживающих функцию, значения округляются до ближайшего кратного 10 в степени минус ndigits; если два кратных одинаково близки, округление производится в сторону чётного. Так, например, и round(0.5) и round(-0.5) равны 0, но round(1.5) равно 2.
set(object, name, value)
setattr(obj, name, value)
Добавляет объекту указанный атрибут.
obj : object Объект, который следует дополнить атрибутом.
name : str Строка с именем атрибута. Можно указывать как имя нового, так и существующего атрибута.
value : Произвольное значение атрибута.
Атрибут объекта (свойство, метод, элемент) будет добавлен в случае, если объект разрешает/поддерживает это действие.
Метод зачастую используется в случаях, когда имя атрибута и/или значение заранее неизвестно и содержится в переменной.
Для возвращения атрибута используется getattr().
Для удаления атрибута используется delattr().
Для проверки существования атрибута используется hasattr().
sorted(iterable[, key][, reverse])
Возвращает новый отсортированный список, составленный из элементов итерирующегося объекта.
iterable : Объект, поддерживающий итерирование, элементы которого требуется упорядочить.
cmp=None : Ожидается в форме именованного аргумента. Функция, принимающая аргументами два стоящих рядом элемента, которая должна вернуть отрицательное число (если первый меньше второго), нуль (если равны) и положительное (если первый больше второго). Например: cmp=lambda x,y: cmp(x.lower(), y.lower()). Использование сочетаний key + reverse намного быстрее эквивалентной cmp-функции из‑за того, что в первом случае обращение к каждому из элементов происходит единожды, а во втором по несколько раз.
key=None : Ожидается в форме именованного аргумента. Функция, принимающая аргументом элемент, используемая для получения из этого элемента значения для сравнения его с другими. None — сравнить элементы напрямую. Например: key=str.lower.
reverse=False : Ожидается в форме именованного аргумента. Флаг, указывающий следует ли производить сортировку в обратном порядке.
Сортировка при помощи данной функции является стабильной — гарантирует неизменность расположения равных между собой элементов. Такое поведение полезно при сортировке в несколько проходов (например, сортировка по отделу и уровню заработной платы).
str(object=»)
Строковое представление объекта.
staticmethod(function)
Представляет указанную функцию статичным методом.
function : Функция, которую следует представить статичным методом.
Может использоваться к качестве декоратора.
В статичные методы, в отличие, скажем, от обычных или от classmethod(), не передаётся первый аргумент неявным образом. Статичные методы в Питоне похожи на аналогичные в C++ или Java.
Для объявления статичного метода используйте staticmethod в качестве декоратора:
Вызывается как через класс — C.f() —, так и через экземпляр — C().f(), при этом данные экземпляра игнорируются, а принимаются во внимание только данные его класса.
sum(iterable[, start])
Суммирует элементы указанного объекта и возвращает результат.
iterable : Объект, поддерживающий итерацию по его элементам. Ожидается, что элементы этого объекта являются числами, но не строками. Если объект пуст, функция вернёт начальное значение (start).
start=0 : Число, с которого следует начать суммирование.
super([type[, object-or-type]])
Возвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
type : Тип, от которого следует начать поиск объекта-посредника. Ранее атрибут был обязателен.
obj-or-type : Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого isinstance(obj, type) возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого issubclass(subtype, type) возвращает True. Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.
Порядок поиска метода тот же, что и при getattr(), только type пропускается: тип имеет атрибут mro, в котором задаётся порядок поиска методов, используемый как getattr(), так и super(). Атрибут динамический и может изменяться по мере обновления иерархии наследования.
Типичные случаи использования super()
В иерархиях с единичным наследованием используется для обращения к родительским классам, чтобы явно не указывать их имена, это упрощает поддержку кода в дальнейшем. Данный тип использования имеет родственников в других языках программирования.
Второй вариант используется для поддержки совместного множественного наследования в динамическом окружении. Вариант уникален для Питона и отсутствует в языках статически компилируемых или поддерживающих только единичное наследование. Он делает возможным обращение с ромбовидными иерархиями (см. проблема ромба), при которых несколько базовых классов задают реализацию метода с одним и тем же именем. Правила хорошего проектирования требуют того, чтобы во всех случаях метод имел одну и ту же сигнатуру (в связи с тем, что порядок вызовов определяется во время исполнения, потому как он задаётся при изменении иерархии, и потому что в цепи могут присутствовать собратья, неизвестные до момента исполнения).
Без аргументов функция работает только внутри определения класса: необходимые для идентификации класса и доступа к методам его объекта детали заполняет компилятор.
tuple([iterable])
Преобразование к кортежу.
type(object)
Возвращает тип объекта.
vars([obj])
Возвращает словарь из атрибута dict указанного объекта.
obj : Объект, для которого следует вернуть словарь атрибутов (dict).
Возвращает словарь атрибутов (dict) указанного объекта — модуля, класса, экземпляра, и любого другого объекта, имеющего атрибут dict.
Внимание
Следует помнить, что атрибут dict модулей и экземпляров поддерживает изменение, однако другие объекты могут налагать запрет его модификацию (так, например, классы используют прокси для предотвращения прямой модификации этого словаря).
Если функция vars вызвана без аргументов, результат подобен вызову locals()
zip(*iterables)
Возвращает итератор по кортежам, где i-тый кортеж содержит i-тый элемент каждой из указанных последовательностей.
iterables : Итерируемые объекты, элементы которых следует упаковать в кортежи. Если передана одна последовательность, вернётся итератор по кортежам, состоящим из единственного элемента. Если последовательности не переданы, возвращается пустой итератор.
Итератор останавливается, когда исчерпана кратчайшая из последовательностей.
Гарантируется вычисление слева направо, что делает возможным следующую идиому кластеризации данных по группам n-длины — zip(*[iter(s)] * n):
В сочетании с оператором * функция может быть использована для распаковки списка:





