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

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

>последовательность[нач:кон:шаг]

где >нач — промежуток начала среза, >кон — конца среза, >шаг — шаг. По умолчанию >нач=0, >кон=len(последовательность), >шаг=1, если >шаг не указан, второе двоеточие можно опустить.

А теперь пример работы со срезами:

>>>> s = range(10)

>>>> s

>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>> s[0:3]

>[0, 1, 2]

>>>> s[-1:]

>[9]

>>>> s[::3]

>[0, 3, 6, 9]

>>>> s[0:0] = [-1, -1, -1]

>>>> s

>[-1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>>> del s[:3]

>>>> s

>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Как видно из этого примера, с помощью срезов удобно задавать любую подстроку, даже если она нулевой длины, как для удаления элементов, так и для вставки в строго определенное место.

Тип dict

Словарь (хэш, ассоциативный массив) — это изменчивая структура данных для хранения пар ключ–значение, где значение однозначно определяется ключом. В качестве ключа может выступать неизменчивый тип данных (число, строка, кортеж и т.п.). Порядок пар ключ–значение произволен. Ниже приведен литерал для словаря и пример работы со словарем:

>d = {1: 'one', 2: 'two', 3: 'three', 4: 'four'}

>d0 = {0: 'zero'}

>print d[1] # берется значение по ключу

>d[0] = 0   # присваивается значение по ключу

>del d[0]   # удаляется пара ключ–значение с данным ключом

>print d

>for key, val in d.items(): # цикл по всему словарю

> print key, val

>for key in d.keys(): # цикл по ключам словаря

> print key, d[key]

>for val in d.values(): # цикл по значениям словаря

> print val

>d.update(d0) # пополняется словарь из другого

>print len(d) # количество пар в словаре

Тип file

Объекты этого типа предназначены для работы с внешними данными. В простом случае — это файл на диске. Файловые объекты должны поддерживать основные методы: >read(), >write(), >readline(), >readlines(), >seek(), >tell(), >close() и т.п.

Следующий пример показывает копирование файла:

>f1 = open("file1.txt", "r")

>f2 = open("file2.txt", "w")

>for line in f1.readlines():

> f2.write(line)

>f2.close()

>f1.close()

Стоит заметить, что кроме собственно файлов в Python используются и файлоподобные объекты. В очень многих функциях просто неважно, передан ли ей объект типа >file или другого типа, если он имеет все те же методы (и в том же смысле). Например, копирование содержимого по ссылке (URL) в файл >file2.txt можно достигнуть, если заменить первую строку на

>import urllib

>f1 = urllib.urlopen("http://python.onego.ru")

О модулях, классах, объектах и функциях будет говориться на других лекциях.

Выражения

В современных языках программирования принято производить большую часть обработки данных в выражениях. Синтаксис выражений у многих языков программирования примерно одинаков. Синтаксис выражений Python не удивит программиста чем–то новым. (Разве что цепочечные сравнения могут приятно порадовать.)

Приоритет операций показан в нижеследующей таблице (в порядке уменьшения). Для унарных операций >x обозначает операнд. Ассоциативность операций в Python — слева–направо, за исключением операции возведения в степень (>**), которая ассоциативна справа налево.

ОперацияНазвание
>lambdaлямбда–выражение
>orлогическое ИЛИ
>andлогическое И
>not xлогическое НЕ
>in, >not inпроверка принадлежности
>is, >is notпроверка идентичности
><, ><=, >>, >>=, >!=, >==сравнения
>|побитовое ИЛИ
>^побитовое исключающее ИЛИ
>&побитовое И
><<, >>>побитовые сдвиги
>+>-сложение и вычитание
>*, >/, >%умножение, деление, остаток
>+x, >-xунарный плюс и смена знака
>~xпобитовое НЕ
>**возведение в степень
>x.атрибутссылка на атрибут
>x[индекс]взятие элемента по индексу
>x[от:до]выделение среза (от и до)
>f(аргумент, ...)вызов функции
>( ... )скобки или кортеж
>[ ... ]список или списковое включение
>{кл:зн, ...}словарь пар ключ–значение
>`выражения`преобразование к строке (repr)

Таким образом, порядок вычислений операндов определяется такими правилами:

1. Операнд слева вычисляется раньше операнда справа во всех бинарных операциях, кроме возведения в степень.

2. Цепочка сравнений вида >a < b < c ... y < z фактически равносильна: >(а < b) and (b < c) and ... and (y < z).

3. Перед фактическим выполнением операции вычисляются нужные для нее операнды. В большинстве бинарных операций предварительно вычисляются оба операнда (сначала левый), но операции >or и >and, а также цепочки сравнений вычисляют такое количество операндов, которое достаточно для получения результата. В невычисленной части выражения в таком случае могут даже быть неопределенные имена. Это важно учитывать, если используются функции с побочными эффектами.

4. Аргументы функций, выражения для списков, кортежей, словарей и т.п. вычисляются слева–направо, в порядке следования в выражении.

В случае неясности приоритетов желательно применять скобки. Несмотря на то, что одни и те же символы могут использоваться для разных операций, приоритеты операций не меняются. Так, >% имеет тот же приоритет, что и >*, а потому в следующем примере скобки просто необходимы, чтобы операция умножения произошла перед операцией форматирования:

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

Выражения могут фигурировать во многих операторах Python и даже как самостоятельный оператор. У выражения всегда есть результат, хотя в некоторых случаях (когда выражение вычисляется ради побочных эффектов) этот результат может быть «ничем» —


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

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


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


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

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


MFC и OpenGL

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


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

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


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

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