Разделы инструкций

В сети

Пользователей: 100
Из них просматривают:
Аналоги: 34. Даташиты: 10. Инструкции: 5. Новости: 24. Остальное: 6. Ошибки: 1. Программы: 1. Теги: 2. Форум: 13. Чат: 4.
Участников: 6
Гостей: 94

an , KT315 , alex01981 , Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

Оглавление

3.1.2. Строки

Кроме чисел, Python также может работать со строками (string), которые могут быть записаны различными путями1. Они могут быть заключены в одинарные или двойные кавычки:

 

>>> 'spam eggs'
'spam eggs'
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> ""Yes," he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

 

Длинные строковые выражения могут быть разбиты различными способами на несколько строк. Символ новой строки может быть "спрятан" с помощью обратной косой черты (' \ '), например:

 

>>> hello = "Это длинное строковое выражение, содержащее\n\
... несколько строк текста, как Вы бы это сделали в C.\n\
...     Обратите внимание, что пробелы в\
...   начале строки\nимеют значения.\n"
>>> print hello

 

Результат будет следующим:

 

Это длинное строковое выражение, содержащее
несколько строк текста, как Вы бы это сделали в C.
        Обратите внимание, что пробелы в  начале строки
имеют значения.

 

По-другому, текст может быть заключен в утроенные кавычки: """ или '''. Концы строк не нужно "прятать" при использовании утроенных кавычек, но они будут включены в текст.

 

print """
Usage: thingy [OPTIONS]
    -h Display this usage message
    -H hostname Hostname to connect to
"""

 

выведет следующее:

 

Usage: thingy [OPTIONS]
        -h Display this usage message
        -H hostname Hostname to connect to

 

Интерпретатор выводит результат строковых операций в том же виде, в котором они могли бы быть набраны: в кавычках, обходя кавычки и другие специальные символы с помощью управляющих последовательностей, начинающихся с обратной косой черты (' \ '). Текст заключается в двойные кавычки, если он не содержит двойные кавычки, во всех остальных случаях, он выводится в одинарных кавычках. Инструкция print, описанная ниже, может быть использована для вывода текста без кавычек и специальных последовательностей.

Существует также "необрабатываемый" режим ввода строк, задаваемый с помощью буквы 'r' или 'R' перед кавычками: в этом случае символ обратной косой черты также может быть использован для маскировки символов одинарной и двойной кавычек, если им предшествует нечетное число символов обратной косой черты, однако сам символ обратной косой черты остается частью строки. Даже в таком режиме строка не может заканчиваться нечетным количеством символов обратной косой черты. Необрабатываемый режим наиболее полезен в тех случаях, когда необходимо вводить значительное количество символов обратной косой черты, например, в регулярных выражениях.

Строки можно объединить (склеить) с помощью оператора + и размножить оператором *:

 

>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'

 

Две строки, записанные друг за другом, автоматически объединяются. Первая строка в приведенном примере может быть также записана как "word = 'Help' 'A'". Такой метод работает только для строк записанных непосредственно, но не для произвольных строковых выражений.

 

>>> 'str' 'ing' # Правильно
'string'
>>> 'str'.strip() + 'ing' # Правильно
'string'
>>> 'str'.strip() 'ing' # Ошибка
  File "<stdin>", line 1
    'str'.strip() 'ing' # Ошибка
                      ^
SyntaxError: invalid syntax

 

Строка — последовательность символов с произвольным доступом, Вы можете получить любой символ строки по его индексу. Подобно C, первый символ имеет индекс 0. Нет отдельного типа для символа, символ — это просто строка единичной длины. Подобно Icon, подстрока может быть определена с помощью среза — двух индексов, разделенных двоеточием.

 

>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'

 

Строки в языке Python невозможно изменить. Попытка изменить символ в определённой позиции или подстроку вызовет ошибку:

 

>>> word[0] = 'x'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[:-1] = 'Splat'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

 

Индексы среза имеют полезные значения по умолчанию: опущенный первый индекс считается равным 0, опущенный второй индекс дает такой же результат, как если бы он был равен длине строки.

 

>>> word[:2] # Первые два символа
'He'
>>> word[2:] # Вся строка, кроме первых двух символов
'lpA'

 

Полезный инвариант операции среза: s[:i] + s[i:] равно s.

 

>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'

 

Срезы с вырожденными индексами обрабатываются изящно: слишком большой индекс обрабатывается, как если бы он был равен длине строки; если верхняя граница меньше нижней, то возвращается пустая строка.

 

>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''

 

Индексы могут иметь отрицательные значения, для отсчета с конца:

 

>>> word[-1] # Последний символ
'A'
>>> word[-2] # Предпоследний символ
'p'
>>> word[-2:] # Последние два символа
'pA'
>>> word[:-2] # Кроме последних двух символов
'Hel'

 

Однако -0 обозначает то же самое, что и 0, то есть не будет отсчитываться с конца.

 

>>> word[-0] # (так как -0 равен 0)
'H'

 

Отрицательные индексы в срезах выходящие за пределы обрабатываются, как если бы они были равны нулю, но не пытайтесь использовать это для простых индексов (с одним элементом):

 

>>> word[-100:]
'HelpA'
>>> word[-10] # Ошибка
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

 

Лучший способ запомнить, как определяются индексы в срезе — считать их указывающими между символами, с номером 0 на левой границе первого символа. А правая граница последнего символа имеет индекс равный длине строки, например:

 

Рис

 

Первая строка чисел показывает позиции в строке, на которые указывают индексы от 0 до 5, вторая — соответствующие отрицательные индексы. Срез от i до j включает в себя все символы между краями, помеченными i и j, соответственно.

Для неотрицательных индексов длина подстроки равняется разности индексов, если они оба не выходят за пределы диапазона, например, длина подстроки word[1:3] равна 2.

Встроенная функция len() возвращает длину строки:

 

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

Примечания:
  • В настоящее время Python считает печатными 7-битное подмножество символов. Представление же остальных символов выводится с использованием управляющих последовательностей, что делает работу в интерактивном режиме, например, с русским языком неудобной. По этой причине текст в некоторых примерах данной книги оставлен без перевода.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

Канифоль можно изготовить самому, собрав в лесу сосновую (не еловую!) смолу и перетопив ее в консервной банке.

Интересно

Крупную деталь можно паять и обычным паяльником (25-40 Вт), если разогреть ее, например, на газовой плите.

Похожие инструкции