Общие вопросы по Python

Общая информация

Что такое Python?

Python - это интерпретируемый, интерактивный, объектно-ориентированный язык программирования. Он включает в себя модули, исключения, динамическую типизацию, динамические типы данных очень высокого уровня и классы. Он поддерживает множество парадигм программирования, помимо объектно-ориентированного программирования, таких как процедурное и функциональное программирование. Python сочетает в себе удивительную мощь с очень понятным синтаксисом. Он имеет интерфейсы для многих системных вызовов и библиотек, а также для различных оконных систем, и расширяется на C или C++. Его также можно использовать в качестве языка расширения для приложений, которым нужен программируемый интерфейс. Наконец, Python переносим: он работает на многих разновидностях Unix, включая Linux и macOS, а также на Windows.

Чтобы узнать больше, начните с Самоучитель по Python. Ссылки на Beginner’s Guide to Python ведут к другим вводным учебникам и ресурсам для изучения Python.

Что такое Фонд программного обеспечения Python?

Python Software Foundation - это независимая некоммерческая организация, которой принадлежат авторские права на Python версии 2.1 и новее. Миссия PSF заключается в продвижении технологий с открытым исходным кодом, связанных с языком программирования Python, и популяризации использования Python. Домашняя страница PSF находится по адресу https://www.python.org/psf/.

Пожертвования в PSF не облагаются налогом в США. Если вы используете Python и находите его полезным, пожалуйста, сделайте пожертвование через the PSF donation page.

Зачем вообще был создан Python?

Вот очень краткое изложение того, с чего все началось, написанное Гвидо ван Россумом:

У меня был большой опыт реализации интерпретируемого языка в группе ABC в CWI, и, работая с этой группой, я многое узнал о дизайне языка. Отсюда берут начало многие особенности Python, в том числе использование отступов для группировки высказываний и включение типов данных очень высокого уровня (хотя в Python все детали другие).

У меня был ряд претензий к языку ABC, но мне также нравились многие его особенности. Расширить язык ABC (или его реализацию), чтобы устранить мои претензии, было невозможно - фактически отсутствие расширяемости было одной из его самых больших проблем. У меня был некоторый опыт использования Modula-2+, я общался с разработчиками Modula-3 и читал отчет по Modula-3. Modula-3 - это источник синтаксиса и семантики, используемых для исключений, и некоторых других возможностей Python.

Я работал в группе распределенных операционных систем Amoeba в CWI. Нам нужен был лучший способ администрирования системы, чем написание программ на C или скриптов оболочки Bourne, поскольку Amoeba имела свой собственный интерфейс системных вызовов, который не был легко доступен из оболочки Bourne. Опыт работы с ошибками в Amoeba заставил меня остро осознать важность исключений как функции языка программирования.

Мне пришло в голову, что язык сценариев с синтаксисом, подобным ABC, но с доступом к системным вызовам Amoeba, удовлетворил бы эту потребность. Я понял, что было бы глупо писать язык, специфичный для Amoeba, и решил, что мне нужен язык, который можно расширять в целом.

Во время рождественских каникул 1989 года у меня было много свободного времени, и я решил попробовать. В течение следующего года, продолжая работать над ним в основном в свободное время, Python использовался в проекте Amoeba со все большим успехом, а отзывы коллег заставили меня добавить множество ранних улучшений.

В феврале 1991 года, после чуть более года разработки, я решил написать в USENET. Остальное находится в файле Misc/HISTORY.

Для чего нужен Python?

Python - это высокоуровневый язык программирования общего назначения, который можно применять для решения множества различных задач.

Язык поставляется с большой стандартной библиотекой, которая охватывает такие области, как обработка строк (регулярные выражения, Unicode, вычисление различий между файлами), интернет-протоколы (HTTP, FTP, SMTP, XML-RPC, POP, IMAP), разработка программного обеспечения (модульное тестирование, протоколирование, профилирование, разбор кода Python) и интерфейсы операционной системы (системные вызовы, файловые системы, сокеты TCP/IP). Посмотрите оглавление Стандартная библиотека Python, чтобы получить представление о том, что доступно. Также доступно множество расширений от сторонних разработчиков. Обратитесь к the Python Package Index, чтобы найти интересующие вас пакеты.

Как работает схема нумерации версий в Python?

Версии Python имеют нумерацию «A.B.C» или «A.B»:

  • A - это основной номер версии - он увеличивается только для действительно важных изменений в языке.

  • B - это номер минорной версии - он увеличивается для менее значительных изменений.

  • C - это номер микроверсии - он увеличивается для каждого выпуска исправления.

Не все релизы являются релизами исправлений. В преддверии выхода новой функции выпускается серия релизов разработки, обозначаемых как альфа-версия, бета-версия или релиз-кандидат. Альфа-версии - это ранние выпуски, в которых интерфейсы еще не доработаны; нет ничего удивительного в том, что между двумя альфа-версиями интерфейс меняется. Бета-версии более стабильны, в них сохраняются существующие интерфейсы и, возможно, добавляются новые модули, а релиз-кандидат - это «замороженный» релиз, в который не вносятся никакие изменения, кроме тех, которые необходимы для исправления критических ошибок.

Альфа-, бета- и релиз-кандидат версии имеют дополнительный суффикс:

  • Суффикс альфа-версии - это «aN», обозначающий некоторое небольшое число N.

  • Суффикс бета-версии - «bN», обозначающий некоторое небольшое число N.

  • Суффикс для версии-кандидата на выпуск - «rcN» для некоторого небольшого числа N.

Другими словами, все версии, помеченные 2.0aN, предшествуют версиям, помеченным 2.0bN, которые предшествуют версиям, помеченным 2.0rcN, а все предшествуют 2.0.

Вы также можете встретить номера версий с суффиксом «+», например, «2.2+». Это невыпущенные версии, собранные непосредственно из репозитория разработки CPython. На практике после выпуска финального минорного релиза версия увеличивается до следующей минорной версии, которая становится версией «a0», например «2.4a0».

Смотрите Developer’s Guide, чтобы узнать больше о цикле разработки, и PEP 387, чтобы узнать больше о политике обратной совместимости Python. См. также документацию по sys.version, sys.hexversion и sys.version_info.

Как получить копию исходного текста Python?

Последняя версия исходного дистрибутива Python всегда доступна на сайте python.org по адресу https://www.python.org/downloads/. Последние исходные тексты для разработки можно получить по адресу https://github.com/python/cpython/.

Дистрибутив представляет собой gzipped tar-файл, содержащий полный исходный текст на языке C, документацию в формате Sphinx, библиотечные модули Python, примеры программ и несколько полезных частей свободно распространяемого программного обеспечения. Исходный код компилируется и запускается «из коробки» на большинстве платформ UNIX.

Обратитесь к Getting Started section of the Python Developer’s Guide за дополнительной информацией о получении исходного кода и его компиляции.

Как получить документацию по Python?

Стандартная документация по текущей стабильной версии Python доступна по адресу https://docs.python.org/3/. PDF, обычный текст и загружаемые HTML-версии также доступны по адресу https://docs.python.org/3/download.html.

Документация написана на языке reStructuredText и обрабатывается the Sphinx documentation tool. Исходный текст reStructuredText для документации является частью дистрибутива исходного кода Python.

Я никогда раньше не программировал. Есть ли учебник по Python?

Существует множество учебных пособий и книг. Стандартная документация включает Самоучитель по Python.

Обратитесь к the Beginner’s Guide, чтобы найти информацию для начинающих программистов на Python, включая списки учебных пособий.

Есть ли группа новостей или список рассылки, посвященный Python?

Есть группа новостей, comp.lang.python, и список рассылки, python-list. Группа новостей и список рассылки являются шлюзами друг для друга - если вы можете читать новости, нет необходимости подписываться на список рассылки. comp.lang.python имеет высокий трафик, получая сотни сообщений каждый день, и читатели Usenet зачастую лучше справляются с этим объемом.

Объявления о новых выпусках программ и событиях можно найти в comp.lang.python.announce - модерируемом списке с низким трафиком, в который поступает около пяти сообщений в день. Он доступен как the python-announce mailing list.

Более подробную информацию о других списках рассылки и группах новостей можно найти на сайте https://www.python.org/community/lists/.

Как получить бета-тестовую версию Python?

Альфа- и бета-версии доступны по адресу https://www.python.org/downloads/. Все релизы анонсируются в группах новостей comp.lang.python и comp.lang.python.announce, а также на домашней странице Python по адресу https://www.python.org/; доступна RSS-лента новостей.

Вы также можете получить доступ к версии Python для разработки через Git. Подробности см. в разделе The Python Developer’s Guide.

Как отправлять сообщения об ошибках и исправлениях для Python?

Чтобы сообщить об ошибке или прислать исправление, воспользуйтесь трекером проблем по адресу https://github.com/python/cpython/issues.

Для получения дополнительной информации о том, как разрабатывается Python, обратитесь к the Python Developer’s Guide.

Есть ли какие-нибудь опубликованные статьи о Python, на которые я могу сослаться?

Вероятно, лучше всего будет сослаться на вашу любимую книгу о Python.

Книга very first article о Python была написана в 1991 году и на сегодняшний день уже довольно устарела.

Гвидо ван Россум и Джелке де Бур, «Интерактивное тестирование удаленных серверов с помощью языка программирования Python», CWI Quarterly, том 4, выпуск 4 (декабрь 1991), Амстердам, стр. 283–303.

Есть ли какие-нибудь книги по Python?

Да, их много, и еще больше публикуется. Список можно найти на вики python.org по адресу https://wiki.python.org/moin/PythonBooks.

Вы также можете поискать «Python» в книжных интернет-магазинах и отфильтровать упоминания Monty Python; или, возможно, поискать «Python» и «язык».

В какой части света находится сайт www.python.org?

Инфраструктура проекта Python расположена по всему миру и управляется командой Python Infrastructure Team. Подробности here.

Почему он называется Python?

Когда он начал внедрять Python, Гвидо ван Россум также читал опубликованные сценарии «Monty Python’s Flying Circus», комедийного сериала BBC 1970-х годов. Ван Россум подумал, что ему нужно короткое, уникальное и немного загадочное имя, поэтому он решил назвать язык Python.

Должен ли я любить «Летающий цирк Монти Пайтона»?

Нет, но это помогает. :)

Python в реальном мире

Насколько стабилен Python?

Очень стабильная. С 1991 года новые стабильные релизы выходили примерно каждые 6-18 месяцев, и, судя по всему, так будет и впредь. Начиная с версии 3.9, Python будет выпускать новые функции каждые 12 месяцев (PEP 602).

Разработчики выпускают релизы с исправлениями старых версий, поэтому стабильность существующих релизов постепенно повышается. Релизы с исправлениями, обозначаемые третьим компонентом номера версии (например, 3.5.3, 3.6.2), управляются для обеспечения стабильности; в релиз с исправлениями включаются только исправления известных проблем, и гарантируется, что интерфейсы останутся неизменными на протяжении всей серии релизов с исправлениями.

Последние стабильные релизы всегда можно найти на Python download page. Существует две готовые к производству версии Python: 2.x и 3.x. Рекомендуемая версия - 3.x, которая поддерживается большинством широко используемых библиотек. Хотя 2.x все еще широко используется, it is not maintained anymore.

Сколько людей используют Python?

Вероятно, количество пользователей исчисляется миллионами, хотя точный подсчет затруднителен.

Python доступен для бесплатной загрузки, поэтому нет данных о продажах, и он доступен на многих сайтах и упакован со многими дистрибутивами Linux, поэтому статистика загрузок также не говорит о всей истории.

Группа новостей comp.lang.python очень активна, но не все пользователи Python пишут в эту группу или даже читают ее.

Выполнялись ли на Python какие-либо значимые проекты?

Список проектов, использующих Python, см. на сайте https://www.python.org/about/success. Если обратиться к материалам по past Python conferences, можно обнаружить вклад множества различных компаний и организаций.

Среди известных проектов на Python - the Mailman mailing list manager и the Zope application server. Несколько дистрибутивов Linux, в частности Red Hat, частично или полностью написали на Python свои программы установки и системного администрирования. Среди компаний, использующих Python внутри компании, - Google, Yahoo и Lucasfilm Ltd.

Какие новые разработки ожидают Python в будущем?

Смотрите https://peps.python.org/ для предложений по улучшению Python (PEPs). PEP - это проектные документы, описывающие предлагаемую новую функцию для Python, содержащие краткую техническую спецификацию и обоснование. Ищите PEP с заголовком «Python X.Y Release Schedule», где X.Y - это версия, которая еще не была публично выпущена.

Новые разработки обсуждаются на the python-dev mailing list.

Разумно ли предлагать несовместимые изменения в Python?

В общем, нет. В мире уже существуют миллионы строк кода на Python, поэтому любые изменения в языке, которые делают недействительными более чем очень малую часть существующих программ, должны вызывать неодобрение. Даже если вы можете предоставить программу преобразования, остается проблема обновления всей документации; о Python написано множество книг, и мы не хотим одним махом лишить их всех законной силы.

Если необходимо изменить какую-либо функцию, необходимо обеспечить постепенное обновление. PEP 5 описывает процедуру внедрения обратно несовместимых изменений с минимальными неудобствами для пользователей.

Является ли Python хорошим языком для начинающих программистов?

Да.

По-прежнему принято начинать изучение процедурных и статически типизированных языков, таких как Pascal, C или подмножество C++ или Java. Возможно, студентам будет полезнее изучать Python в качестве первого языка. Python имеет очень простой и последовательный синтаксис и большую стандартную библиотеку, и, что самое важное, использование Python в начальном курсе программирования позволяет студентам сосредоточиться на таких важных навыках программирования, как декомпозиция задач и проектирование типов данных. С помощью Python студенты могут быстро познакомиться с такими базовыми понятиями, как циклы и процедуры. Возможно, они даже смогут работать с пользовательскими объектами уже на первом курсе.

Для студента, который никогда раньше не программировал, использование статически типизированного языка кажется неестественным. Это создает дополнительные сложности, которые студент должен освоить, и замедляет темп курса. Студенты пытаются научиться думать как компьютер, декомпозировать задачи, разрабатывать последовательные интерфейсы и инкапсулировать данные. Хотя обучение использованию статически типизированного языка важно в долгосрочной перспективе, это не самая лучшая тема для первого курса программирования для студентов.

Многие другие аспекты Python делают его хорошим первым языком. Как и Java, Python имеет обширную стандартную библиотеку, поэтому в самом начале курса студентам можно поручать проекты по программированию, которые делают что-то. Задания не ограничиваются стандартными программами для четырехфункционального калькулятора и балансировки чеков. Используя стандартную библиотеку, студенты могут получить удовольствие от работы над реалистичными приложениями в процессе изучения основ программирования. Использование стандартной библиотеки также учит студентов повторному использованию кода. Сторонние модули, такие как PyGame, также помогают расширить кругозор учащихся.

Интерактивный интерпретатор Python позволяет студентам тестировать возможности языка в процессе программирования. Они могут держать окно с интерпретатором запущенным, пока вводят исходный текст своей программы в другом окне. Если они не могут запомнить методы для списка, они могут сделать что-то вроде этого:

>>> L = []
>>> dir(L) 
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
'__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
'reverse', 'sort']
>>> [d for d in dir(L) if '__' not in d]
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> help(L.append)
Help on built-in function append:

append(...)
    L.append(object) -> None -- append object to end

>>> L.append(1)
>>> L
[1]

С помощью переводчика документация никогда не отходит от студента во время программирования.

Существуют также хорошие IDE для Python. IDLE - кроссплатформенная IDE для Python, написанная на Python с использованием Tkinter. Пользователи Emacs будут рады узнать, что для Emacs существует очень хороший режим Python. Все эти среды программирования обеспечивают подсветку синтаксиса, автоинтенсификацию и доступ к интерактивному интерпретатору во время написания кода. Полный список сред редактирования Python можно найти в the Python wiki.

Если вы хотите обсудить использование Python в образовании, вам может быть интересно присоединиться к the edu-sig mailing list.