Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Списки
16.10. Разбор списков
Обычно, когда мы читаем файл, мы хотим что-то сделать, а не просто вывести на экран всю строку. Часто мы хотим найти "интересные строки", а затем разобрать строки, чтобы найти некоторые интересные части строки. Как быть, если мы хотим распечатать день недели у тех строк, которые начинаются с "From ".
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
Метод split очень эффективен, когда сталкивается с подобной проблемой. Мы можем написать небольшую программу, которая ищет строки, начинающиеся с "From ", а затем разделить (split) эти строки и распечатать третье слово в строке:
fhand = open('mbox-short.txt') for line in fhand: line = line.rstrip() if not line.startswith('From ') : continue words = line.split() print words[2]
Мы используем условие if, которое пропускает все строки, начинающиеся не с 'From '.
Результат работы программы будет следующим:
Sat Fri Fri Fri Fri Fri ...
16.11. Объекты и значения
Если мы выполним эти операторы присваивания:
a = 'banana' b = 'banana'
Мы знаем, что a и b ссылаются на строку, но мы не знаем, ссылаются ли они на одну и ту же строку. Возможны два варианта:
В первом случае, а и b ссылаются на два различных объекта, которые имеют некоторое значение. Во втором случае, они ссылаются на один и тот же объект.
Чтобы проверить, ссылаются ли две переменные на один и тот же объект, вы можете использовать оператор is.
>>> a = 'banana' >>> b = 'banana' >>> a is b True
В этом примере Python создает только один строковый объект, a и b ссылаются на него.
Но когда вы создаете два списка, вы получите два объекта:
>>> a = [1, 2, 3] >>> b = [1, 2, 3] >>> a is b False
На диаграмме это выглядит следующим образом:
В этом случае мы можем сказать, что два списка эквивалентны (equivalent), т.к. имеют одинаковые элементы, но не идентичны (identical), т.к. это не один и тот же объект. Если два объекта идентичны, они также эквивалентны, но если они эквивалентны не обязательно, что они идентичны.
До этого момента, мы использовали понятия 'объект' (object) и 'значение' (value), как синонимы, но более точно говорить, что объект имеет значение. Если вы выполните a = [1,2,3], то переменная a ссылается на объект-список, значением которого является определенная последовательность элементов.
16.12. Псевдонимы (Aliasing)
Если a ссылается на объект, и вы присваиваете b = a то, затем обе переменные ссылаются на один и тот же объект:
>>> a = [1, 2, 3] >>> b = a >>> b is a True
Схема выглядит следующим образом:
Ассоциация переменной с объектом называется ссылкой (reference). В этом примере две ссылки на один объект. Объект с более чем одной ссылкой имеет больше одного имени, поэтому мы говорим, что объект имеет псевдонимы (aliased).
Если псевдоним объекта изменяется, то эти изменения касаются других псевдонимов:
>>> b[0] = 17 >>> print a [17, 2, 3]
Хотя такое поведение может быть полезным, существует вероятность ошибиться. В общем, более безопасно избегать псевдонимов при работе с изменяемыми объектами.
Для неизменяемых объектов, таких как строки, псевдонимы не являются большой проблемой.