Запускаем змея
Круг задач Python.
Запуск интерпретатора, режимы работы.
Разжигаем аппетит
Если вы много работаете за компьютером, то периодически обнаруживаете задачи, которые хотели бы автоматизировать. Например, вы были бы не против ускорить операцию поиска и замены большого количества текстовых файлов, или как-то своеобразно переименовать и отсортировать набор фотографий. Возможно, вам хотелось бы написать небольшую базу данных на заказ, специализированное графическое приложение или простую игру.
Если вы профессиональный разработчик программных продуктов (что вряд ли) — вероятно, вы привыкли работать с несколькими библиотеками на C/C++/Java, но находите обычный цикл написания/компиляции/тестирования/перекомпиляции кода чересчур медленным. Возможно, вы пишете набор тестов для такой библиотеки и процесс написания тестирующего кода воспринимается утомительным. Или же вы написали программу, которая должна использовать специальный язык для расширений и не хотите проектировать и разрабатывать полностью новый язык для вашего приложения.
Python — именно тот язык, который вам подойдёт.
Вы можете написать сценарий интерпретатора команд для Unix или использовать пакетные файлы Windows для некоторых из этих задач, но сценарии интерпретаторов команд хороши лишь для перемещения файлов и замены текстовых данных — они вряд ли подойдут для написания приложений, снабженных графическим интерфейсом, или игр. Вы можете написать программу на C/C++/Java, но разработка может занять довольно много времени — даже на то, чтобы получить первый рабочий набросок, его требуется немало. Python — проще в использовании, доступен на операционных системах Windows, Mac OS X и Unix, и поможет сделать работу намного быстрее.
Несмотря на лёгкость использования, Python — полноценный язык программирования, предлагающий много больше возможностей для структурирования и поддержки крупных программ, чем могут позволить себе сценарии интерпретаторов команд или пакетные файлы. С другой стороны, Python также предоставляет намного больше информации для отладки ошибок, чем C и, будучи сверх-высокоуровневым-языком, имеет встроенные высокоуровневые типы данных — такие, как гибкие массивы и словари. Благодаря наличию обобщённых типов данных Python можно применять для более широкого круга задач, чем Awk или даже Perl, и при этом очень многие вещи сделать в Python не сложнее, чем в этих языках.
Python позволяет вам разделить вашу программу на модули, которые могут быть заново использованы в других программах на Python. Он поставляется вместе с внушительной коллекцией стандартных модулей, которые вы можете использовать в качестве фундамента ваших программ; или в качестве примеров для того, чтобы начать изучение Python. Многие из этих модулей предоставляют различную полезную функциональность: например, ввод-вывод для файлов, системные вызовы, сокеты, и даже инструменты для создания графического пользовательского интерфейса.
Python — интерпретируемый язык, и это может сохранить вам немало времени при разработке — в компиляции и связывании нет необходимости. Интерпретатор может использоваться в интерактивном режиме, что позволяет легко экспериментировать с возможностями языка, писать программы-однодневки или проверять функции во время разработки программ методом снизу-вверх. И, кроме всего прочего — это удобный настольный калькулятор.
Python даёт возможность писать компактные и читабельные программы. Программы, написанные на Python отличаются большей краткостью чем эквиваленты на C, C++ или Java, по нескольким причинам:
· высокоуровневые типы данных позволяют вам выражать сложные операции в одной инструкции;
· группировка инструкций выполняется отступами, а не операторными скобками;
· нет необходимости в описании переменных или аргументов.
Python расширяем: если вы знаете, как программировать на C, то вам легко будет добавить к интерпретатору новую встроенную функцию или модуль, выполнить критические операции на максимальной скорости или связать программы на Python с библиотеками, которые могут быть доступны только в бинарной форме (например, зависящие от поставщика графические библиотеки). Если вы действительно увлечены — вы можете привязать интерпретатор Python к приложению, написанному на C — чтобы использовать его как язык расширений или командный язык этого приложения.
Теперь, когда ваш интерес к Python полностью пробужден, вам наверняка захочется изучить его более детально. В связи с тем, что лучший способ выучить язык — использовать его — автор приглашает вас использовать интерпретатор Python в процессе чтения.
Использование интерпретатора Python
Интерпретатор Python после установки располагается в подпапке program files, или прямо на диске C: в папке C:\Python26. Добавление каталога, куда установлен питон, к пути поиска (переменная PATH) позволит запустить интерпретатор набором команды
python
прямо из командной строки. Чтобы добавить этот каталог к вашему пути поиска, вы можете набрать в окне DOS следующую команду, в ответ на приглашение:
set path=%path%;C:\python26
Особенности редактирования строк в интерпретаторе не оказываются, обычно, чересчур сложными. Если интерпретатор вызван, когда стандартный ввод привязан к клавиатуре — он считывает и выполняет команды в режиме диалога; будучи вызванным с именем файла в качестве аргумента или с файлом, назначенным на стандартный ввод — он читает и выполняет сценарий из этого файла.
Другой способ запустить интерпретатор — директива
python -c команда [arg] ...
При её использовании поочередно выполняются инструкции(-ция) из команды. В связи с тем, что инструкции Python часто содержат пробелы или другие специальные для шелла символы, рекомендуется заключать команды полностью в одинарные кавычки.
Некоторые модули Python оказываются полезными при использовании их в качестве сценариев. Они могут быть запущены в этом виде командой
python -m модуль [arg] ...
Таким образом исполняется исходный файл модуля (как произошло бы, если бы вы ввели его полное имя в командной строке).
При использовании файла сценария иногда полезно иметь возможность запустить сценарий и затем войти в интерактивный режим. Это может быть сделано через указание параметра -i перед именем сценария.
В случае если интерпретатору известны имя сценария и дополнительные аргументы, с которыми он вызван — все они передаются сценарию в переменной sys.argv, представляющей собой список (list) строк. Длина (length) списка — минимум, единица; если не переданы ни имя сценария, ни аргументы — то sys.argv[0] содержит пустую строку. Когда в качестве имени сценария передан '-' (означает стандартный ввод), sys.argv[0] устанавливается в '-'. Если используется директива -c команда — sys.argv[0] содержит '-c'. В случае, если используется директива -m модуль — то sys.argv[0] устанавливается равным полному имени модуля по расположению. Опции, обнаруженные после сочетаний -c команда или -m модуль не обрабатываются интерпретатором Python, но остаются в переменной sys.argv, дабы обеспечить возможность отслеживания в самой команде или в модуле.
Интерактивный режим
Если команды считываются с клавиатуры — говорят, что интерпретатор находится в интерактивном режиме (режиме диалога). В этом режиме он приглашает к вводу следующей команды, отобразив основное приглашение >>>. В то же время, для продолжающих строк выводится вспомогательное приглашение — три точки (...). Перед выводом первого приглашения интерпретатор отображает приветственное сообщение, содержащее номер его версии и пометку о правах копирования:
python
Python 2.6 (#1, Feb 28 2007, 00:02:06)
Type "help", "copyright", "credits" or "license" for more information.
>>>
Продолжающие строки используются в случаях, когда необходимо ввести многострочную конструкцию. Взгляните, например, на следующий оператор if:
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
... print "Be careful not to fall off!"
...
Be careful not to fall off!
Обработка ошибок
В случае появления ошибки интерпретатор выводит сообщение об ошибке, завершая его стеком вызовов. В интерактивном режиме он снова возвращается в состояние приглашения для ввода команд; если ввод происходит из файла — интерпретатор выходит с ненулевым статусом, сразу после распечатки стека вызовов. (Исключения, обрабатываемые в блоке except оператора try в этом контексте не считаются ошибками.) Некоторые ошибки исключительно фатальны и вызывают собой принудительное завершение работы с ненулевым статусом — это применимо к внутренним противоречиям языка и к некоторым случаям нехватки памяти. Все сообщения об ошибках выводятся в стандартный поток ошибок (error stream). Обычный вывод исполняемых команд направляется в стандартный вывод.
Нажатие клавиш прерывания процесса (обычно Ctrl-C, Ctrl-Z или DEL), в ответ на приглашение в основном или вспомогательном режиме, отменяет ввод и возвращает вас к основному приглашению. Символ прерывания, набранный во время выполнения какой-либо команды порождает исключение KeyboardInterrupt, которое, в свою очередь, может быть перехвачено оператором try.
Исполняемые скрипты
на Python
На Unix-системах семейства BSD сценарии на Python могут быть сделаны исполняемыми, также как и шелл-сценарии, путём добавления следующей строки:
#! /usr/bin/env python
или можно писать так:
#! /usr/bin/python
(предполагается,
что интерпретатор может быть найден по одному из путей, указанных в
пользовательской переменной PATH)
в начало сценария и установки файла в исполняемый режим. Символы #! должны быть
первыми символами в файле. На некоторых платформах строка должна оканчиваться
символом конца строки в стиле Unix
('\n'), а не в стиле Windows ('\r\n'). Заметьте, что символ
решётки '#' используется в Python для указания начала комментария.
Исполняемый режим (или разрешение на исполнение) может быть установлен сценарию использованием команды chmod:
$ chmod +x myscript.py
У систем с операционной системой Windows нет такого понятия, как исполняемый режим. Установщик Python автоматически связывает файлы .py с файлом python.exe, таким образом двойной клик на файле Python запустит его в виде сценария (программы). Расширение может быть и .pyw в случае, если окно консоли (которое, обычно, отображается) при запуске скрипта подавляется.
Кодировка исходных файлов
В исходных файлах Python (*.py) возможно использовать кодировки, отличные от ASCII. Лучший способ сделать это — добавить специальный комментарий следом за строкой #! — дабы описать кодировку исходного файла:
# -*- coding: encoding -*-
Если используется это описание — все символы в этом файле будут распознаваться как имеющие соответствующую кодировку. Существует несколько кодировок – вы наверняка слышали что-то про Юникод, ASCII, не так ли? Так вот, питон по-умолчанию ждёт от нас юникод (utf-8). Но, поскольку мы работаем под windows, писать в родной cp1251 нам гораздо проще и естественней. Так? Нет, не так. Системная кдировка весьма ограничена, и не может отобразить даже значок евро. В этом плане нам очень повезло – несравненный и обожаемый Notepad++ поддерживает огромное число кодировок. Ну как обожаемый… вы то с ним едва знакомы. Но мне он жутко нравится. Потому что мы запросто можем преобразовать нашу программу в utf-8, после чего написать первой строчкой:
# -*- coding: utf-8 -*-
Или, например, для написания таких символов в кодировке Unicode, как, например, знак валюты Евро — может быть использована кодировка ISO-8859-15, где знак Евро имеет порядковый номер 164. Этот сценарий выведет значение 8346 (место в таблице Unicode, соответствующее символу Евро) и затем выполнит выход:
# -*- coding: iso-8859-15 -*-
currency = u"€"
print ord(currency)
Немного о принятых обозначениях
В приведенных далее примерах, ввод и вывод различаются присутствием и отсутствием приглашений соответственно (приглашениями являются >>> и ...): чтобы воспроизвести пример — вам нужно ввести всё, что следует за приглашением, после его появления; строки, не начинающиеся с приглашений являются выводом интерпретатора. Обратите внимание, что строка, в которой содержится лишь вспомогательное приглашение ("... ") означает, что вам нужно ввести пустую строку — этот способ используется для завершения многострочных команд.
Большинство примеров в этом руководстве — даже те, которые вводятся в интерактивном режиме — содержат комментарии. Комментарии в Python начинаются с символа решетки # (hash) — и продолжаются до физического конца строки. Комментарии могут находиться как в начале строки, так и следовать за пробельными символами или кодом — но не содержаться внутри строки. Символ решётки в строке остаётся лишь символом решётки. Поскольку комментарии предназначены для того, чтобы сделать код более понятным, и не интерпретируются Python - при вводе примеров они могут быть опущены.
Несколько примеров:
# это первый комментарий
SPAM = 1 # а это второй комментарий
# ... и наконец третий!
STRING = "# Это не комментарий."
Практическое задание
1) Добавить каталог, куда установлен питон, к пути поиска (переменная PATH)
2) Удостовериться что интерпретатор запускается по команде python