Python/Учебник Python 2.6: различия между версиями

Содержимое удалено Содержимое добавлено
Удалено имя страницы из «внутристраничных» ссылок; ссылка на w:GNU Readline.
Строка 95:
<source lang="python">import sys; sys.exit()</source>
 
Особенности редактирования строк в интерпретаторе не оказываются, обычно, чересчур сложными. Те, кто установил интерпретатор на машину Unix, потенциально имеют поддержку библиотеки <tt>[[w:GNU readline</tt>Readline|GNU Readline]], обеспечивающей усовершенствованное интерактивное редактирование и сохранение истории. Самый быстрый, наверное, способ проверить, поддерживается ли расширенное редактирование командной строки, заключается в нажатии <tt>Ctrl-P</tt> в ответ на первое полученное приглашение Python. Если вы услышите сигнал — значит вам доступно редактирование командной строки — тогда обратитесь к [[Учебник Python 2.6 — Приложения#Интерактивное редактирование входных данных и подстановка истории|Приложению об Интерактивном редактировании входных данных]] за описанием клавиш. Если на ваш взгляд ничего не произошло или отобразился символ <tt>^P</tt> — редактирование командной строки недоступно — удалять символы из текущей строки возможно будет лишь использованием клавиши <tt>Backspace</tt>.
 
Интерпретатор ведёт себя сходно шеллу Unix: если он вызван, когда ''стандартный ввод'' привязан к устройству <tt>tty</tt> — он считывает и выполняет команды в режиме диалога; будучи вызванным с именем файла в качестве аргумента или с файлом, назначенным на ''стандартный ввод'' — он читает и выполняет сценарий из этого файла.
Строка 139:
В случае появления ошибки интерпретатор выводит сообщение об ошибке, завершая его стеком вызовов. В интерактивном режиме он снова возвращается в состояние приглашения для ввода команд; если ввод происходит из файла — интерпретатор выходит с ненулевым статусом, сразу после распечатки стека вызовов. (Исключения, обрабатываемые в блоке <code>except</code> оператора <code>try</code> в этом контексте не считаются ошибками.) Некоторые ошибки исключительно фатальны и вызывают собой принудительное завершение работы с ненулевым статусом — это применимо к внутренним противоречиям языка и к некоторым случаям нехватки памяти. Все сообщения об ошибках выводятся в ''стандартный поток ошибок'' (<tt>error stream</tt>). Обычный вывод исполняемых команд направляется в ''стандартный вывод''.
 
Нажатие клавиш прерывания процесса (обычно <tt>Ctrl-C</tt> или <tt>DEL</tt>), в ответ на приглашение в основном или вспомогательном режиме, отменяет ввод и возвращает вас к основному приглашению.<ref>Известная проблема в пакете <tt>GNU Readline</tt> может этому помешать.</ref> Символ прерывания, набранный во время выполнения какой-либо команды порождает исключение <code>KeyboardInterrupt</code>, которое, в свою очередь, может быть перехвачено оператором <code>try</code>.
 
==== Исполняемые скрипты на Python ====
Строка 831:
Зарезервированное слово <code>def</code> предваряет ''определение'' функции. За ним должны следовать имя функции и заключённый в скобки список формальных параметров. Выражения, формирующие тело функции, начинаются со следующей строки и должны иметь отступ.
 
Первым выражением в теле функции может быть строковой литерал — этот литерал является строкой документации функции, или ''док-строкой'' (<tt>docstring</tt>). (Больше информации о ''док-строках'' вы найдёте в разделе [[Учебник Python 2.6#Строки документации|Строки документации]]) Существуют инструменты, которые используют ''док-строки'' для того, чтобы сгенерировать печатную или онлайн-документацию или чтобы позволить пользователю перемещаться по коду интерактивно; добавление строк документации в ваш код — это хорошая практика, постарайтесь к ней привыкнуть.
 
''Исполнение'' функции приводит к созданию новой таблицы символов<ref>''(Прим. перев.)'' Здесь слово «символ» используется не в привычном значении — под ''символом'' подразумевается нечто лингвистическое, описывающее какую-либо сущность (близко к значению ''символизировать''), в данном случае: имя переменной — саму переменную.</ref>, использующейся для хранения локальных переменных функции. Если быть более точными, все присваивания переменных в функции сохраняют значение в локальной таблице символов; при обнаружении ссылки на переменную, в первую очередь просматривается локальная таблица символов, затем локальная таблица символов для окружающих функций, затем глобальная таблица символов и, наконец, таблица встроенных имён. Таким образом, глобальным переменным невозможно прямо присвоить значения внутри функций (до тех пор, пока они поименованы в глобальном выражении) несмотря на то, что ссылки на них могут использоваться.
Строка 1047:
==== Списки аргументов произвольной длины ====
 
Наконец, наиболее редко используется возможность указания того, что функция может быть вызвана с произвольным числом аргументов. При этом сами аргументы будут обёрнуты в кортеж (см. раздел [[Учебник_Python_2.6#.D0.9A.D0.BE.D1.80.D1.82.D0.B5.D0.B6.D0.B8_.D0.B8_.D0.BF.D0.BE.D1.81.D0.BB.D0.B5.D0.B4.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B8Кортежи и последовательности|Кортежи и последовательности]]). Переменное количество аргументов могут предварять ноль или более обычных аргументов.
 
<source lang="python">def write_multiple_items(file, separator, *args):
Строка 1138:
<code><source lang="python">spam(ham[1], {eggs: 2}, 3, 4) #правильно
spam( ham[ 1 ], { eggs: 2 }, 3 , 4 ) #неправильно</source></code>
* Называйте ваши классы и функции единообразно; соглашение следующее: используйте <code>CamelCase</code><ref>''(Прим. перев.)'' <tt>CamelCase</tt> (''ВерблюжийСтиль'') — стиль именования идентификаторов, при котором все слова, записанные строчными буквами, объединяются в одно и первая буква каждого слова выделяется заглавной буквой — такая запись напоминает верблюжьи горбы, в связи с чем и названа.</ref> для именования классов и <code>нижний_регистр_с_подчёркиваниями</tt><ref>''(Прим. перев.)'' Пусть данный пример по вине переводчика и использует русские буквы, соглашение корректно настаивает на использовании латиницы для именования идентификаторов, см. следующий пункт соглашения</ref> для функций и методов. (обращайтесь к разделу [[Учебник Python 2.6#Первый взгляд на классы|Первый взгляд на классы]] за дополнительной информации о классах и методах)
* Не используйте в вашем коде изощрённых кодировок<ref>''(Прим. перев.)'' В строковых литералах (не комментариях) это, конечно же, позволено</ref>, если он рассчитан на использование в интернациональной среде. Стандартный набор ASCII всегда работает на ура<ref>''(Прим. перев.)'' Не кодировка, а именно набор символов — латиница, пунктуация и несколько служебных символов. Кодировка по умолчанию для файлов с исходными кодами, начиная с Python 3.0, всегда UTF-8 — дабы существовала возможность использовать национальные символы в строковых литералах и, в редких случаях — комментариях.</ref>.
 
Строка 1347:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]</source>
 
В разделе [[Учебник Python 2.6#Распаковка списков аргументов|Распаковка списков аргументов]] описано предназначение звёздочки в этих строках.
 
=== Оператор <code>del</code> ===
Строка 1686:
Если импортируется модуль с именем <code>spam</code>, интерпретатор ищет файл с именем <tt>spam.py</tt> в текущем каталоге, а затем в каталогах, указанных в переменной окружения <code>PYTHONPATH</code>. У неё такой же синтаксис, как и у переменной шелла <code>PATH</code>, которая, в свою очередь, является перечислением каталогов. Когда переменная <code>PYTHONPATH</code> не установлена, или файл не найден в описанных в ней местах, поиск продолжается по пути по умолчанию, зависящему от указанного при установке; на Unix это обычно <tt>.:/usr/local/lib/python</tt>.
 
В действительности, поиск модулей производится в списке каталогов, передающемся в переменной <code>sys.path</code>, которая инициируется: каталогом, содержащим сценарий на входе (или текущий каталог), <code>PYTHONPATH</code> и умолчанием для каталога, указанного при установке. Это позволяет программам на Python (которые знают что делают) изменять или подменять путь поиска модулей. Заметьте — поскольку каталог, содержащий запускаемый вами сценарий, также находится в пути поиска — важно чтобы имя сценария не совпадало с именем стандартного модуля, иначе — когда этот модуль будет импортироваться — Python будет пытаться загрузить в виде модуля сам сценарий, в большинстве случаев это будет ошибкой. Для более подробной информации обратитесь к разделу [[Учебник Python 2.6#Стандартные модули|Стандартные модули]].
 
==== „Скомпилированные“ файлы Python ====
Строка 2362:
Большинство исключений определяются именем, заканчивающимся на «<code>Error</code>», сходно именованию стандартных исключений.
 
Много стандартных модулей определяют собственные исключения, сообщающие об ошибках, которые могут появится в определяемых ими модулях. Больше информации о классах представлено в главе 1.10, [[Учебник Python 2.6#Классы|Классы]]
 
=== Определение действий при подчистке ===