>>> s = [0, 1, 2, 3, 4]
>>> print s[0], s[-1], s[3]
0 4 3
>>> s[2] = -2
>>> print s
[0, 1, -2, 3, 4]
>>> del s[2]
>>> print s
[0, 1, 3, 4]
Примечание:
Удалять элементы можно только из изменчивых последовательностей и желательно не делать этого внутри цикла по последовательности.
Несколько интереснее обстоят дела со срезами. Дело в том, что в Python при взятии среза последовательности принято нумеровать не элементы, а промежутки между ними. Поначалу это кажется необычным, тем не менее, очень удобно для указания произвольных срезов. Перед нулевым (по индексу) элементом последовательности промежуток имеет номер 0, после него — 1 и т.д.. Отрицательные значения отсчитывают промежутки с конца строки. Для записи срезов используется следующий синтаксис:
последовательность[нач:кон:шаг]
где нач
— промежуток начала среза, кон
— конца среза, шаг
— шаг. По умолчанию нач=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]
Как видно из этого примера, с помощью срезов удобно задавать любую подстроку, даже если она нулевой длины, как для удаления элементов, так и для вставки в строго определенное место.
Словарь (хэш, ассоциативный массив) — это изменчивая структура данных для хранения пар ключ–значение, где значение однозначно определяется ключом. В качестве ключа может выступать неизменчивый тип данных (число, строка, кортеж и т.п.). Порядок пар ключ–значение произволен. Ниже приведен литерал для словаря и пример работы со словарем:
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) # количество пар в словаре
Объекты этого типа предназначены для работы с внешними данными. В простом случае — это файл на диске. Файловые объекты должны поддерживать основные методы: 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) |
Таким образом, порядок вычислений операндов определяется такими правилами:
Читать дальше
Конец ознакомительного отрывка
Купить книгу