Язык программирования 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 "Обработка гарантированно завершена"


Рекомендуем почитать
Pro Git

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


Java 7

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


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


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

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