справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
65 значение. Методы hex() и fromhex() могут использоваться для обработки чи- сел с плавающей точкой в низкоуровневом двоичном представлении. В библиотечных модулях определены некоторые дополнительные число- вые типы. Модуль decimal обеспечивает поддержку обобщенной десятич- ной арифметики. Модуль fractions определяет тип рациональных чисел. Подробнее эти модули рассматриваются в главе 14 «Математика». Последовательности Последовательности используются для представления упорядоченных множеств объектов, элементы которых индексируются целыми положи- тельными числами. К этой категории относятся строки, списки и корте- жи. Строки – это последовательности символов, а списки и кортежи – это последовательности произвольных объектов. Строки и кортежи относятся к разряду неизменяемых объектов; списки допускают возможность добав- ления, удаления и изменения своих элементов. Все последовательности поддерживают итерации. Операции, общие для всех типов последовательностей В табл. 3.2 перечислены операторы и методы, которые могут применять- ся к любым типам последовательностей. Получить доступ к i-му элементу последовательности s можно с помощью оператора индексирования s[i]. Выбрать фрагмент последовательности можно с помощью оператора среза s[i:j] или его расширенной версии s[i:j:stride] (эти операторы описываются в главе 4). Длину любой последовательности можно определить с помощью встроенной функции len(s). Отыскать минимальное и максимальное зна- чения в последовательности можно с помощью встроенных функций min(s) и max(s). Однако эти функции могут действовать только с последовательно- стями, содержащими элементы, допускающие возможность упорядочения (обычно это строки и числа). Функция sum(s) возвращает сумму элементов последовательности, но она действует только с числовыми данными. В табл. 3.3 перечислены дополнительные операторы, которые могут при- табл. 3.3 перечислены дополнительные операторы, которые могут при- табл. 3.3 перечислены дополнительные операторы, которые могут при- . 3.3 перечислены дополнительные операторы, которые могут при- 3.3 перечислены дополнительные операторы, которые могут при- меняться к изменяемым последовательностям, таким как списки. Таблица 3.2. Операторы и функции, общие для всех типов последовательностей Оператор или функция Описание s[i] Возвращает i-й элемент последовательности s s[i:j] Возвращает срез s[i:j:stride] Расширенная операция получения среза len( s) Возвращает число элементов в последовательности s min( s) Возвращает минимальное значение в последователь- ности s max( s) Возвращает максимальное значение в последователь- ности s 66 Глава 3. Типы данных и объекты Оператор или функция Описание sum( s [,initial]) Возвращает сумму элементов последовательности s all( s) Проверяет, оцениваются ли все элементы последова- тельности s, как True any( s) Проверяет, оценивается ли хотя бы один элемент по- следовательности s, как True Таблица 3.3. Операторы, применяемые к изменяемым последовательностям Оператор Описание s[i] = v Присваивает значения элементу s[ i:j] = t Присваивает последовательность срезу s[ i:j:stride] = t Расширенная операция присваивания срезу del s[i] Удаляет элемент del s[i:j] Удаляет срез del s[i:j:stride] Расширенная операция удаления среза Списки Методы, поддерживаемые списками, перечислены в табл. 3.4. Встроенная функция list(s) преобразует любой итерируемый объект в список. Если аргумент s уже является списком, эта функция создает новый список, ис- пользуя операцию поверхностного копирования. Метод s.append(x) добав- ляет в конец списка новый элемент x. Метод s.index(x) отыскивает в списке первое вхождение элемента x. В случае отсутствия искомого элемента воз- буждается исключение ValueError. Точно так же метод s.remove(x) удаляет из списка первое вхождение элемента x или возбуждает исключение Val- ueError , если искомый элемент отсутствует в списке. Метод s.extend(t) рас- ширяет список s, добавляя в конец элементы последовательности t. Метод s.sort() сортирует элементы списка и может принимать функцию вычисления ключа и признак сортировки в обратном порядке – оба эти аргумента должен передаваться как именованные аргументы. Функция вычисления ключа применяется к каждому элементу списка перед выпол- нением операции сравнения в процессе сортировки. Эта функция должна принимать единственный элемент и возвращать значение, которое будет использоваться при сравнении. Функцию вычисления ключа удобно ис- пользовать, когда требуется реализовать особые виды сортировки, такие как сортировка списка строк без учета регистра символов. Метод s.reverse() изменяет порядок следования элементов в списке на обратный. Оба метода, sort() и reverse(), изменяют сам список и возвращают None. Таблица 3.2 (продолжение) Встроенные типы представления данных 67 Таблица 3.4. Методы списков Метод Описание list( s) Преобразует объект s в список. s.append( x) Добавляет новый элемент x в конец списка s. s.extend( t) Добавляет новый список t в конец списка s. s.count( x) Определяет количество вхождений x в список s. s.index(x [, start [,stop]]) Возвращает наименьшее значение индекса i, где s[i] == x . Необязательные значения start и stop определяют индексы начального и конечного эле- ментов диапазона, где выполняется поиск. s.insert( i,x) Вставляет x в элемент с индексом i. s.pop([ i]) Возвращает i-й элемент и удаляет его из списка. Если индекс i не указан, возвращается последний элемент. s.remove( x) Отыскивает в списке s элемент со значением x и уда- ляет его. s.reverse() Изменяет порядок следования элементов в списке s на обратный. s.sort([ key [, reverse]]) Сортирует элементы списка s. key – это функция, которая вычисляет значение ключа. reverse – при- знак сортировки в обратном порядке. Аргументы key и reverse всегда должны передаваться как име- нованные аргументы. Строки В языке Python 2 имеется два типа строковых объектов. Байтовые стро- Python 2 имеется два типа строковых объектов. Байтовые стро- 2 имеется два типа строковых объектов. Байтовые стро- ки – это последовательности байтов, содержащих 8-битные данные. Они могут содержать двоичные данные и байты со значением NULL. Строки Юникода – это последовательности декодированных символов Юнико- да, которые внутри представлены 16-битными целыми числами. Это по- по- по- зволяет определить до 65 536 различных символов. Стандарт Юникода предусматривает поддержку до 1 миллиона отдельных символов, тем не менее эти дополнительные символы не поддерживаются в языке Python по умолчанию. Они кодируются, как специальные двухсимвольные (4-байто- вые) последовательности, именуемые суррогатной парой;обязанность по их интерпретации возлагается на само приложение. В качестве дополни- тельной возможности язык Python позволяет хранить символы Юникода в виде 32-битных целых чисел. Когда эта возможность включена, Python позволяет представлять полный диапазон значений Юникода от U+000000 до U+110000. Все функции, работающие со строками Юникода, поддержива- ют эту особенность. Строки поддерживают методы, перечисленные в табл. 3.5. Все эти методы оперируют экземплярами строк, однако ни один из них в действительно- 68 Глава 3. Типы данных и объекты сти не изменяет сами строки, находящиеся в памяти. То есть такие мето- ды, как s.capitalize(), s.center() и s.expandtabs(), никогда не модифицируют строку s и всегда возвращают новую строку. Методы проверки символов, такие как s.isalnum() и s.isupper(), возвращают True или False, если все сим- волы в строке удовлетворяют критерию проверки. Кроме того, эти функ- ции всегда возвращают значение False для строк с нулевой длиной. Методы s.find(), s.index(), s.rfind() и s.rindex() используются для поиска подстроки. Все эти методы возвращают целочисленный индекс подстро- ки в строке s. Кроме того, если подстрока не будет найдена, метод find() возвращает -1, тогда как метод index() возбуждает исключение ValueError. Метод s.replace() используется для замены подстроки другой подстрокой. Важно отметить, что все эти методы работают только с простыми подстро- ками. Для поиска с помощью регулярных выражений используются функ- ции из библиотечного модуля re. Методы s.split() и s.rsplit() разбивают строку по указанному разделите- лю, создавая список полей. Методы s.partition() и s.rpartition() отыски- вают подстроку-разделитель и разбивают исходную строку s на три части: текст до разделителя, строка-разделитель и текст после разделителя. Многие строковые методы принимают необязательные аргументы start и end, которые должны быть целочисленными значениями, определяющи- ми начальный и конечный индексы в строке s. В большинстве случаев эти аргументы могут принимать отрицательные значения, в этом случае от- счет индексов начинается с конца строки. Метод s.translate() обеспечивает улучшенную возможность подстановки символов, например, для быстрого удаления из строки всех управляющих символов. В качестве аргумента он принимает таблицу замены, содержа- щую отображение «один-к-одному» символов оригинальной строки в сим- волы результата. Для 8-битных строк таблица замены представляет собой 256-символьную строку. Для строк Юникода в качестве таблицы можно использовать любую последовательность s, для которой выражение s[n] возвращает целочисленный код символа или символ Юникода, соответ- ствующий символу Юникода с целочисленным кодом n. Методы s.encode() и s.decode() используются для преобразования строковых данных в или из указанной кодировки и принимают название кодировки, например: ‘ascii’, ‘utf-8’ или ‘utf-16’. Чаще всего эти методы используют- ся для преобразования строк Юникода в данные с кодировкой, подходя- щей для операций ввода-вывода и подробнее описываются в главе 9 «Ввод и вывод». Не забывайте, что в Python 3 метод encode() доступен только для строк, а метод decode() – только для данных типа bytes. Метод s.format() используется для форматирования строк. Он принимает комбинацию позиционных и именованных аргументов. Символы подста- новки в строке s обозначаются как {item} и замещаются соответствующими аргументами. Ссылки на позиционные аргументы обозначаются как {0}, {1} и т. д. Ссылки на именованные аргументы обозначаются как {name}, где name – имя аргумента. Например: Встроенные типы представления данных 69 >>> a = “Вас зовут {0} и вам {age} лет” >>> a.format(“Майк”, age=40) ‘Вас зовут Майк и вам 40 лет’ >>> Символы подстановки {item} в строках формата могут также включать про- стые индексы и атрибуты поиска. Символ подстановки {item[n]}, где n – это число, замещается n-м элементом последовательности item. Символ под- становки {item[key]}, где key – это строка, замещается элементом словаря item[“key”] . Символ подстановки {item.attr} замещается значением атрибу- та attr объекта item. Дополнительные подробности о методе format() приво- дятся в разделе «Форматирование строк» главы 4. Таблица 3.5. Строковые методы Метод Описание s.capitalize() Преобразует первый символ в верхний ре- гистр. s.center(width [, pad]) Центрирует строку в поле шириной width. Аргумент pad определяет символ, которым оформляются отступы слева и справа. s.count(sub [,start [,end]]) Подсчитывает число вхождений заданной подстроки sub. s.decode([encoding [,errors]]) Декодирует строку и возвращает строку Юникода (только для байтовых строк). s.encode([encoding [,errors]]) Возвращает кодированную версию строки (только для строк Юникода). s.endswith(suffix [,start [,end]]) Проверяет, оканчивается ли строка подстро- кой suffix. s.expandtabs([tabsize]) Замещает символы табуляции пробелами. s.find(sub [, start [,end]]) Отыскивает первое вхождение подстроки sub или возвращает -1. s.format(*args, **kwargs) Форматирует строку s. s.index(sub [, start [,end]]) Отыскивает первое вхождение подстроки sub или возбуждает исключение. s.isalnum() Проверяет, являются ли все символы в стро- ке алфавитно-цифровыми символами. s.isalpha() Проверяет, являются ли все символы в стро- ке алфавитными символами. s.isdigit() Проверяет, являются ли все символы в стро- ке цифровыми символами. s.islower() Проверяет, являются ли все символы в стро- ке символами нижнего регистра. s.isspace() Проверяет, являются ли все символы в стро- ке пробельными символами. 70 Глава 3. Типы данных и объекты Метод Описание s.istitle() Проверяет, являются ли первые символы всех слов символами верхнего регистра. s.isupper() Проверяет, являются ли все символы в стро- ке символами верхнего регистра. s.join(t) Объединяет все строки, находящиеся в по- следовательности t, используя s как строку- разделитель. s.ljust(width [, fill]) Выравнивает строку s по левому краю в поле шириной width. s.lower() Преобразует символы строки в нижний регистр. s.lstrip([chrs]) Удаляет начальные пробельные символы или символы, перечисленные в аргументе chrs s.partition(sep) Разбивает строку по подстроке-разделителю sep . Возвращает кортеж (head , sep , tail) или ( s, “”,””) , если подстрока sep отсутствует в строке s. s.replace(old, new [,maxreplace]) Замещает подстроку old подстрокой new. s.rfind(sub [,start [,end]]) Отыскивает последнее вхождение подстроки. s.rindex(sub [,start [,end]]) Отыскивает последнее вхождение подстроки или возбуждает исключение. s.rjust(width [, fill]) Выравнивает строку s по правому краю в поле шириной width. s.rpartition(sep) Разбивает строку по подстроке-разделителю sep, но поиск выполняется с конца строки. s.rsplit([sep [,maxsplit]]) Разбивает строку, начиная с конца, по подстроке-разделителю sep. Аргумент maxsplit определяет максимальное число разбиений. Если аргумент maxsplit не ука- зан, идентичен методу split(). s.rstrip([chrs]) Удаляет конечные пробельные символы или символы, перечисленные в аргументе chrs. s.split([sep [,maxsplit]]) Разбивает строку по подстроке-разделителю sep . Аргумент maxsplit определяет макси- мальное число разбиений. s.splitlines([keepends]) Преобразует строку в список строк. Если аргумент keepnds имеет значение 1, завер- шающие символы перевода строки остаются нетронутыми. Таблица 3.5 (продолжение) Встроенные типы представления данных 71 Метод Описание s.startswith(prefix [,start [,end]]) Проверяет, начинается ли строка подстро- кой prefix. s.strip([chrs]) Удаляет начальные и конечные пробельные символы или символы, перечисленные в аргументе chrs. s.swapcase() Приводит символы верхнего регистра к нижнему, и наоборот. s.title() Возвращает версию строки, в которой пер- вые символы всех слов приведены к верхне- му регистру. s.translate(table [,deletechars]) Выполняет преобразование строки в соот- ветствии с таблицей замены table, удаля- ет символы, перечисленные в аргументе deletechars . s.upper() Преобразует символы строки в верхний регистр. s.zfill(width) Дополняет строку нулями слева до достиже- ния ею длины width. Объекты xrange() Встроенная функция xrange([i,]j [,stride]) создает объект, представляю- щий диапазон целых чисел k, где i <= k < j. Первый индекс i и шаг stride по умолчанию являются необязательными и имеют значения 0 и 1 соот- ветственно. Объект xrange вычисляет свои значения в момент обращения к нему, и хотя он выглядит, как последовательность, тем не менее он имеет ряд ограничений. Например, он не поддерживает ни один из стандартных операторов среза. Область применения объекта xrange ограничена просты- ми циклами. Следует отметить, что в Python 3 функция xrange() была переименована в range(). Однако она действует точно так же, как описано выше. |