Язык программирования Python - [3]

Шрифт
Интервал

или >True.

Примечание:

Литералы >True и >False для обозначения логических значений появились в Python 2.3. 

Цикл ДЛЯ выполняет тело цикла для каждого элемента последовательности. В следующем примере выводится таблица умножения:

>for i in range(1, 10):

> for j in range(1, 10):

>  print "%2i" % (i*j),

> print

Здесь циклы >for являются вложенными. Функция >range() порождает список целых чисел из полуоткрытого диапазона >[1, 10). Перед каждой итерацией счетчик цикла получает очередное значение из этого списка. Полуоткрытые диапазоны общеприняты в Python. Считается, что их использование более удобно и вызывает меньше программистских ошибок. Например, >range(len(s)) порождает список индексов для списка >s (в Python–последовательности первый элемент имеет индекс >0). Для красивого вывода таблицы умножения применена операция форматирования >% (для целых чисел тот же символ используется для обозначения операции взятия остатка от деления). Строка форматирования (задается слева) строится почти как строка форматирования для >printf из C.

Функции

Программист может определять собственные функции двумя способами: с помощью оператора >def или прямо в выражении, посредством >lambda. Второй способ (да и вообще работа с функциями) будет рассмотрен подробнее в лекции по функциональному программированию на Python, а здесь следует привести пример определения и вызова функции:

>def cena(rub, kop=0):

> return "%i руб. %i коп." % (rub, kop)


>print cena(8, 50)

>print cena(7)

>print cena(rub=23, kop=70)

В этом примере определена функция двух аргументов (из которых второй имеет значение по умолчанию>0). Вариантов вызова этой функции с конкретными параметрами также несколько. Стоит только заметить, что при вызове функции сначала должны идти позиционные параметры, а затем, именованные. Аргументы со значениями по умолчанию должны следовать после обычных аргументов. Оператор >return возвращает значение функции. Из функции можно возвратить только один объект , но он может быть кортежем из нескольких объектов.

После оператора >def имя >cena оказывается связанным с функциональным объектом.

Исключения

В современных программах передача управления происходит не всегда так гладко, как в описанных выше конструкциях. Для обработки особых ситуаций (таких как деление на ноль или попытка чтения из несуществующего файла) применяется механизм исключений. Лучше всего пояснить синтаксис оператора >try–except следующим примером:

>try:

> res = int(open('a.txt').read())/int(open('c.txt').read())

> print res

>except IOError:

> print "Ошибка ввода–вывода"

>except ZeroDivisionError:

> print "Деление на 0"

>except KeyboardInterrupt:

> print "Прерывание с клавиатуры"

>except:

> print "Ошибка"

В этом примере берутся числа из двух файлов и делятся одно на другое. В результате этих нехитрых действий может возникнуть несколько исключительных ситуаций, некоторые из них отмечены в частях >except (здесь использованы стандартные встроенные исключения Python). Последняя часть >except в этом примере улавливает все другие исключения, которые не были пойманы выше. Например, если хотя бы в одном из файлов находится нечисловое значение, функция >int() возбудит исключение >ValueError. Его–то и сможет отловить последняя часть >except. Разумеется, выполнение части >try в случае возникновения ошибки уже не продолжается после выполнения одной из частей >except.

В отличие от других языков программирования, в Python исключения нередко служат для упрощения алгоритмов. Записывая оператор >try–except, программист может думать так: «попробую, а если сорвется — выполнится код в >except». Особенно часто это используется для выражений, в которых значение получается по ключу из отображения:

>try:

> value = dict[key]

>except:

> value = default_value

Вместо

>if dict.has_key(key):

> value = dict[key]

>else:

> value = default_value

Примечание:

Пример уже несколько устаревшей идиомы языка Python иллюстрирует только дух этого подхода: в современном Python лучше записать так >value = dict.get(key, default_value).

Исключения можно возбуждать и из программы. Для этого служит оператор >raise. Заодно следующий пример показывает канонический способ определения собственного исключения:

>class MyError(Exception):

> pass

>try:

> ...

> raise MyError, "my error 1"

> ...

>except MyError, x:

> print "Ошибка:", x

Кстати, все исключения выстроены в иерархию классов, поэтому >ZeroDivisionError может быть поймана как >ArithmeticError, если соответствующая часть >except будет идти раньше.

Для утверждений применяется специальный оператор >assert. Он возбуждает >AssertionError, если заданное в нем условие неверно. Этот оператор используют для самопроверки программы. В оптимизированном коде он не выполняется, поэтому строить на нем логику алгоритма нельзя. Пример:

>c = a + b

>assert c == a + b

Кроме описанной формы оператора, есть еще форма >try–finally для гарантированного выполнения некоторых действий при передаче управления изнутри оператора >try–finally вовне. Он может применяться для освобождения занятых ресурсов, что требует обязательного выполнения, независимо от произошедших внутри катаклизмов:

>try:

> ...

>finally:

> print "Обработка гарантированно завершена"


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Фундаментальные алгоритмы и структуры данных в Delphi

Книга "Фундаментальные алгоритмы и структуры данных в Delphi" представляет собой уникальное учебное и справочное пособие по наиболее распространенным алгоритмам манипулирования данными, которые зарекомендовали себя как надежные и проверенные многими поколениями программистов. По данным журнала "Delphi Informant" за 2002 год, эта книга была признана сообществом разработчиков прикладных приложений на Delphi как «самая лучшая книга по практическому применению всех версий Delphi».В книге подробно рассматриваются базовые понятия алгоритмов и основополагающие структуры данных, алгоритмы сортировки, поиска, хеширования, синтаксического разбора, сжатия данных, а также многие другие темы, тесно связанные с прикладным программированием.


Питон — модули, пакеты, классы, экземпляры

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


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.