Поиск по блогу

понедельник, 13 января 2014 г.

Строки (Python)

Это фрагменты кода к одноименной главе из книги М.Лутца... Перечень основных атрибутов, экранированные последовательности, неформатированные строки, обход элементов строки в цикле, доступ по индексам и извлечение подстроки, форматирование строк из словаря ...

In []:
S = ‘’             Пустая строка
S = spams       Строка в кавычках
S = s\np\ta\x00m Экранированные последовательности block = “””...””” Блоки в тройных кавычках
S = r\temp\spam  Неформатированные строки
S = bspam        Строки байтов в версии 3.0 (глава 36)
S = uspam        Строки с символами Юникода. Только в версии 2.6 (глава 36)
S1 + S2  S * 3     Конкатенация, повторение
S[i]   S[i:j]      Обращение к символу по индексу, извлечение подстроки (среза), 
len(S) длина
a %s parrot % kind          Выражение форматирования строки
a {0} parrot.format(kind)   Строковый метод форматирования в 2.6 и 3.0
S.find(pa)          Вызов строкового метода: поиск
S.rstrip()            Удаление ведущих и конечных пробельных символов
S.replace(pa, xx) Замена
S.split(,)          Разбиение по символу-разделитлю
S.isdigit()           Проверка содержимого
S.lower()             Преобразование регистра символов
S.endswith(spam)    Проверка окончания строки
spam.join(strlist)  Сборка строки из списка
S.encode(latin-1)   Кодирование строк Юникода

Экранированные последовательности

В конечном строковом объекте символ \ и один или более следующих за ним символов замещаются единственным символом, который имеет двоичное значение, определяемое экранированной последовательностью. Например, ниже приводится строка из пяти символов, в которую вставлены символ новой строки и табуляции:
In [4]:
 s = 'a\nb\tc'
 print s   
a
b c

In [5]:
len(s)
Out[5]:
5
In []:
Последовательность Назначение
\newline Игнорируется (продолжение на новой строке)
\\ Сам символ обратного слеша (остается один символ \)
\ Апостроф (остается один символ )
\ Кавычка (остается один символ )
\a Звонок
\b Забой
\f Перевод формата
\n Новая строка (перевод строки)
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция
\xhh Символ с шестнадцатеричным кодом hh (не более 2 цифр)
\ooo Символ с восьмеричным кодом ooo (не более 3 цифр)
\0 Символ Null (не признак конца строки)
\N{id} Идентификатор ID базы данных Юникода 
\uhhhh 16-битный символ Юникода в шестнадцатеричном представлении
\Uhhhhhhhh 32-битный символ Юникода в шестнадцатеричном представленииa
\другое Не является экранированной последовательностью (символ обратного слеша сохраняется)
Некоторые экранированные последовательности позволяют указывать абсолютные двоичные значения в байтах строк. Например, ниже приводится пример строки из пяти символов, содержащей два нулевых байта:
In [7]:
s = 'a\0b\0c'
s
Out[7]:
'a\x00b\x00c'
In [8]:
len(s)
Out[8]:
5
В языке Python нулевой байт (символ null) не является признаком завершения строки, как в языке C. Интерпретатор просто сохраняет в памяти как текст самой строки, так и ее длину. Фактически в языке Python вообще нет символа, который служил бы признаком завершения строки.
Ниже приводится строка, полностью состоящая из экранированных кодов, – двоичные значения 1 и 2 (записаны в восьмеричной форме), за которыми следует двоичное значение 3 (записано в шестнадцатеричной форме):
In [9]:
s = '\001\002\x03'
s
Out[9]:
'\x01\x02\x03'
In [10]:
len(s)
Out[10]:
3
Обратите внимание, что интерпретатор Pythonon отображает непечатаемые символы в шестнадцатеричном представлении, независимо от того, в каком виде они были указаны внутри литерала. Вы без ограничений можете комбинировать абсолютные экранированные значения с другими типами экранированных последовательностей, которые приводятся в табл. Следующая строка содержит символы “spam”, символ табуляции и символ новой строки, а также нулевой символ, заданный в шестнадцатеричном представлении:
In [11]:
S = "s\tp\na\x00m"
S
Out[11]:
's\tp\na\x00m'
In [13]:
len(S)
Out[13]:
7
In [14]:
print S
s p
am

In [15]:
print (S)
s p
am

Наконец, последняя строка в табл. 7.2 предполагает, что если интерпретатор не распознает символ после \ как корректный служебный символ, он просто оставляет символ обратного слеша в строке:
In [16]:
x = 'C:\py\code' # Символ \ сохраняется в строке
x
Out[16]:
'C:\\py\\code'
In [17]:
len(x)
Out[17]:
10
Чтобы явно добавить символ обратного слеша в строку, нужно указать два символа обратного слеша, идущие подряд (\\ – экранированный вариант представления символа \)

Неформатированные строки подавляют экранирование

Очень часто, например, можно увидеть, как начинающие программисты пытаются открыть файл, передавая аргумент с именем файла, который имеет примерно следующий вид:
In []:
myfile = open(C:\new\text.dat, w) #  последовательность \n интерпретируется как символ новой строки,        
                                      #а последовательность \t замещается символом табуляции
Именно в таких случаях удобно использовать неформатированные строки. Если перед кавычкой, открывающей строку, стоит символ r (в верхнем или в нижнем регистре), он отключает механизм экранирования.
In [18]:
myfile = open(r'C:\new\text.dat', 'w') # не забывайте добавлять символ r
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-18-4803b16f59b1> in <module>()
----> 1 myfile = open(r'C:\new\text.dat', 'w') # не забывайте добавлять символ r

IOError: [Errno 2] No such file or directory: 'C:\\new\\text.dat'
Как вариант, учитывая, что два идущих подряд символа обратного слеша интерпретируются как один символ, можно просто продублировать символы обратного слеша:
In []:
myfile = open(r'C:\\new\\text.dat', 'w')
Интерпретатор не позволяет смешивать строки и числа в выражениях сложения: ‘abc’ + 9 вызовет ошибку вместо того, чтобы автоматически преобразовать число 9 в строку
In [19]:
'abc' + 9
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-19-eb615d95d582> in <module>()
----> 1 'abc' + 9

TypeError: cannot concatenate 'str' and 'int' objects

Строки в действии

In [20]:
'abc' + 'de' # Конкатенация: новая строка
Out[20]:
'abcde'
In [21]:
'Ni!' * 4 # Повторение: подобно “Ni!” + “Ni!” + ...
Out[21]:
'Ni!Ni!Ni!Ni!'
В отличие от массивов символов в языке C, при работе со строками в языке Python вам не нужно выделять или управлять памятью массивов – вы просто создаете объекты строк, когда в этом возникает необходимость, и позволяете интерпретатору самому управлять памятью, выделяемой для этих объектов. Как уже говорилось в главе 6, Python автоматически освобождает память, занятую ненужными объектами, используя стратегию сборки мусора, основанную на подсчете количества ссылок.
In [25]:
myjob = 'hacker'
for c in myjob: print(c+' '), # Обход элементов строки в цикле ...в 3 версии print(c, end=’ ‘)
h  a  c  k  e  r 

In [27]:
"k" in myjob # Найдено
Out[27]:
True
In [28]:
'spam' in 'abcspamdef' # Поиск подстроки, позиция не возвращается
Out[28]:
True

Доступ по индексам и извлечение подстроки

Смещения и срезы: положительные смещения отсчитываются  от левого конца (первый элемент имеет смещение 0), а отрицательные  отсчитываются от правого конца (последний элемент имеет смещение –1) При выполнении  операций  индексации  и  получения  среза  можно использовать любые виды  смещений
In [29]:
from IPython.display import Image
Image(filename='C:\\Users\\kiss\\Pictures\\for_blogs\\py_str.PNG')
Out[29]:
In [30]:
S = 'spam'
S[0], S[-2] # Индексация от начала или от конца
Out[30]:
('s', 'a')
In [31]:
S[1:3], S[1:], S[:-1] # Получение среза: извлечение подстроки
Out[31]:
('pa', 'pam', 'spa')
Первый элемент имеет смещение 0
• Отрицательные индексы определяют смещения в обратном порядке – от конца, или справа.
• Выражение S[0] извлекает первый элемент.
• Выражение S[-2] извлекает второй с конца элемент (так же, как и выражение S[len(S)-2]).
• Операция извлечения подстроки (S[i:j]) извлекает непрерывный раздел последовательности:
• Элемент с индексом, равным верхней границе, не включается в срез.
Если границы не указаны, по умолчанию они принимаются равными 0 и длине последовательности.
• Выражение S[1:3] извлекает элементы со смещениями от 1 до 3 (не включая элемент со смещением 3).
• Выражение S[1:] извлекает элементы, начиная со смещения 1 и до конца (длина последовательности).
• Выражение S[:3] извлекает элементы, начиная со смещения 0 и до 3 (не включая его).
• Выражение S[:-1] извлекает элементы, начиная со смещения 0 и до последнего (не включая его).
• Выражение S[:] извлекает элементы, начиная со смещения 0 и до конца, – это эффективный способ создать поверхностную копию последовательности S.

Расширенная операция извлечения подстроки: третий предел

В версии Python 2.3 в операцию извлечения подстроки была добавлена поддержка необязательного третьего индекса, используемого как шаг (иногда называется как шаг по индексу). Величина шага добавляется к индексу каждого извлекаемого элемента.
In [32]:
S = '0123456789'
S[1:10:2]
Out[32]:
'13579'
Можно также использовать отрицательное значение шага. Например, выражение “hello”[::-1] вернет новую строку “olleh”.
In [33]:
S='hello'
S[::-1]
Out[33]:
'olleh'
Пропуск элементов и изменение порядка их следования – это наиболее типичные случаи использования операции получения среза с тремя пределами.
In [34]:
# File echo.py
import sys
print sys.argv
['-c', '-f', 'C:\\Users\\kiss\\.ipython\\profile_default\\security\\kernel-539c5006-cfd5-4db7-b4f3-9df98cfec8fa.json', "--IPKernelApp.parent_appname='ipython-notebook'", '--profile-dir', 'C:\\Users\\kiss\\.ipython\\profile_default', '--interrupt=1828', '--parent=1644']

In []:

Преобразование строк

In [36]:
int("42"), str(42) # Преобразование из/в строки
Out[36]:
(42, '42')
In [37]:
repr(42) # Преобразование в строку, как если бы она была  литералом в программном коде
Out[37]:
'42'
Функция int преобразует строку в число, а функция str преобразует число в строковое представление (по сути – в то, что выводится на экран). Функция repr (и прежний ее эквивалент, обратные апострофы, который был удален в Python 3.0) также преобразует объект в строковое представление, но возвращает объект в виде строки программного кода, который можно выполнить, чтобы воссоздать объект. Подробнее о различиях между функциями str иrepr можно прочитать во врезке «Форматы представления repr и str», в главе 5.

Преобразование кодов символов

Имеется также возможность выполнить преобразование одиночного символа в его целочисленный код ASCII, для чего нужно передать этот символ функции ord – она возвращает фактическое числовое значение соответствующего байта в памяти. Обратное преобразование выполняется с помощью функции chr, она получает целочисленный код ASCII и преобразует его в соответствующий символ:
In []:

In []:
S.capitalize()                                   S.ljust(width [, fill])
S.center(width [, fill]))                        S.lower()
S.count(sub [, start [, end]])                   S.lstrip([chars])
S.encode([encoding [,errors]])                   S.maketrans(x[, y[, z]])
S.endswith(suffix [, start [,end]]) 
S.partition(sep)
S.expandtabs([tabsize])                          S.replace(old, new [, count])
S.find(sub [, start [, end]])                    S.rfind(sub [,start [,end]])
S.format(fmtstr, *args, **kwargs)                S.rindex(sub [, start [, end]])
S.index(sub [, start [, end]])                   S.rjust(width [, fill])
S.isalnum()                                      S.rpartition(sep)
S.isalpha()                                      S.rsplit([sep[, maxsplit]])
S.isdecimal()                                    S.rstrip([chars])
S.isdigit()                                      S.split([sep [,maxsplit]])
S.isidentifier()                                 S.splitlines([keepends])
S.islower()                                      S.startswith(prefix [, start [, end]])
S.isnumeric()                                    S.strip([chars])
S.isprintable()                                  S.swapcase()
S.isspace()                                      S.title()
S.istitle()                                      S.translate(map)
S.isupper()                                      S.upper()
S.join(iterable)                                 S.zfill(width)
In [42]:
help(S.split)
Help on built-in function split:

split(...)
    S.split([sep [,maxsplit]]) -> list of strings
    
    Return a list of the words in the string S, using sep as the
    delimiter string.  If maxsplit is given, at most maxsplit
    splits are done. If sep is not specified or is None, any
    whitespace string is a separator and empty strings are removed
    from the result.


Обратите внимание, что ни один из строковых методов не поддерживает шаблоны, – для обработки текста с использованием шаблонов необходимо использовать модуль re, входящий в состав стандартной библиотеки языка Python

Строки невозможно изменить – они являются неизменяемыми. Однако подобного эффекта можно добиться, создав новую строку, – выполнив операцию конкатенации, извлечения среза, форматирования или вызвав метод, такой как replace, – и затем присвоив результат первоначальной переменной.
In []:
s  Строка (для объекта любого другого типа будет выполнен вызов функции str(X), чтобы получить строковое представление объекта)
r s, но использует функцию repr, а не str
c Символ
d Десятичное (целое) число
i Целое число
u То же, что и d (устарел: больше не является представлением целого без знака)
o Восьмеричное целое число
x Шестнадцатеричное целое число
X x, но шестнадцатеричные цифры возвращаются в верхнем регистре
e Вещественное число в экспоненциальной форме
E e, но алфавитные символы возвращаются в верхнем регистре
f Вещественное число в десятичном представлении
F Вещественное число в десятичном представлении
g Вещественное число e или f
G Вещественное число E или а
% Символ %

Форматирование строк из словаря

In [43]:
'%(n)d %(x)s' % {'n':1, 'x':'spam'}
Out[43]:
'1 spam'
В данном случае (n) и (x) в строке формата ссылаются на ключи в словаре в правой части выражения и служат для извлечения соответствующих им значений. Этот прием часто используется в программах, создающих код разметки HTML или XML, – вы можете построить словарь значений и затем подставить их все одним выражением форматирования, которое использует ключи:
In [45]:
reply = """ # Шаблон с замещаемыми спецификаторами формата
Greetings...
Hello %(name)s!
Your age squared is %(age)s
"""
values = {'name': 'Bob', 'age': 40} # Подготовка фактических значений
print reply % values                # Подстановка значений
 # Шаблон с замещаемыми спецификаторами формата
Greetings...
Hello Bob!
Your age squared is 40


In [46]:
food = "spam"
age = 40
vars()
Out[46]:
{'Image': IPython.core.display.Image,
 'In': ['',
  u's = \u2018a\\nb\\tc\u2019',
  u"s = 'a\\nb\\tc'",
  u"s = 'a\\nb\\tc'\ns   ",
  u"s = 'a\\nb\\tc'\ns \nprint s   ",
  u'len(s)',
  u's = \u2018a\\0b\\0c\u2019\ns',
  u"s = 'a\\0b\\0c'\ns",
  u'len(s)',
  u"s = '\\001\\002\\x03'\ns",
  u'len(s)',
  u'S = "s\\tp\\na\\x00m"\nS',
  u'len(S)\nprint S',
  u'len(S)',
  u'print S',
  u'print (S)',
  u"x = 'C:\\py\\code' # \u0421\u0438\u043c\u0432\u043e\u043b \\ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\nx",
  u'len(x)',
  u"myfile = open(r'C:\\new\\text.dat', 'w') # \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b r",
  u"'abc' + 9",
  u"'abc' + 'de' # \u041a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f: \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430",
  u"'Ni!' * 4 # \u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435: \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u201cNi!\u201d + \u201cNi!\u201d + ...",
  u"myjob = 'hacker'\nfor c in myjob: print(c, end=\u2019 \u2018), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c, end=' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c,' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c+' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u'> "k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
  u'"k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
  u"'spam' in 'abcspamdef' # \u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f",
  u"from IPython.display import Image\nImage(filename='C:\\\\Users\\\\kiss\\\\Pictures\\\\for_blogs\\\\py_str.PNG')",
  u"S = 'spam'\nS[0], S[-2] # \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043b\u0438 \u043e\u0442 \u043a\u043e\u043d\u0446\u0430",
  u'S[1:3], S[1:], S[:-1] # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0437\u0430: \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438',
  u"S = '0123456789'\nS[1:10:2]",
  u"S='hello'\nS[::-1]",
  u'# File echo.py\nimport sys\nprint sys.argv',
  u'int(\u201c42\u201d), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
  u'int("42"), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
  u'repr(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430  \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435',
  u'string.__doc__',
  u'str.__doc__',
  u'\u0438 help(S.list)',
  u'help(S.list)',
  u'help(S.split)',
  u"'%(n)d %(x)s' % {'n':1, 'x':'spam'}",
  u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\u2018name\u2019: \u2018Bob\u2019, \u2018age\u2019: 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
  u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\'name\': \'Bob\', \'age\': 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
  u'food = "spam"\nage = 40\nvars()'],
 'Out': {3: 'a\nb\tc',
  5: 5,
  7: 'a\x00b\x00c',
  8: 5,
  9: '\x01\x02\x03',
  10: 3,
  11: 's\tp\na\x00m',
  13: 7,
  16: 'C:\\py\\code',
  17: 10,
  20: 'abcde',
  21: 'Ni!Ni!Ni!Ni!',
  27: True,
  28: True,
  29: <IPython.core.display.Image at 0x61e9cf8>,
  30: ('s', 'a'),
  31: ('pa', 'pam', 'spa'),
  32: '13579',
  33: 'olleh',
  36: (42, '42'),
  37: '42',
  39: "str(object='') -> string\n\nReturn a nice string representation of the object.\nIf the argument is a string, the return value is the same object.",
  43: '1 spam'},
 'S': 'hello',
 '_': '1 spam',
 '_10': 3,
 '_11': 's\tp\na\x00m',
 '_13': 7,
 '_16': 'C:\\py\\code',
 '_17': 10,
 '_20': 'abcde',
 '_21': 'Ni!Ni!Ni!Ni!',
 '_27': True,
 '_28': True,
 '_29': <IPython.core.display.Image at 0x61e9cf8>,
 '_3': 'a\nb\tc',
 '_30': ('s', 'a'),
 '_31': ('pa', 'pam', 'spa'),
 '_32': '13579',
 '_33': 'olleh',
 '_36': (42, '42'),
 '_37': '42',
 '_39': "str(object='') -> string\n\nReturn a nice string representation of the object.\nIf the argument is a string, the return value is the same object.",
 '_43': '1 spam',
 '_5': 5,
 '_7': 'a\x00b\x00c',
 '_8': 5,
 '_9': '\x01\x02\x03',
 '__': "str(object='') -> string\n\nReturn a nice string representation of the object.\nIf the argument is a string, the return value is the same object.",
 '___': '42',
 '__builtin__': <module '__builtin__' (built-in)>,
 '__builtins__': <module '__builtin__' (built-in)>,
 '__doc__': 'Automatically created module for IPython interactive environment',
 '__name__': '__main__',
 '__package__': None,
 '_dh': [u'C:\\Users\\kiss\\Documents\\IPython Notebooks\\web\\oboobs'],
 '_i': u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\'name\': \'Bob\', \'age\': 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
 '_i1': u' s = \u2018a\\nb\\tc\u2019',
 '_i10': u'len(s)',
 '_i11': u'S = "s\\tp\\na\\x00m"\nS',
 '_i12': u'len(S)\nprint S',
 '_i13': u'len(S)',
 '_i14': u'print S',
 '_i15': u'print (S)',
 '_i16': u"x = 'C:\\py\\code' # \u0421\u0438\u043c\u0432\u043e\u043b \\ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\nx",
 '_i17': u'len(x)',
 '_i18': u"myfile = open(r'C:\\new\\text.dat', 'w') # \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b r",
 '_i19': u"'abc' + 9",
 '_i2': u" s = 'a\\nb\\tc'",
 '_i20': u"'abc' + 'de' # \u041a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f: \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430",
 '_i21': u"'Ni!' * 4 # \u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435: \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u201cNi!\u201d + \u201cNi!\u201d + ...",
 '_i22': u"myjob = 'hacker'\nfor c in myjob: print(c, end=\u2019 \u2018), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
 '_i23': u"myjob = 'hacker'\nfor c in myjob: print(c, end=' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
 '_i24': u"myjob = 'hacker'\nfor c in myjob: print(c,' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
 '_i25': u"myjob = 'hacker'\nfor c in myjob: print(c+' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
 '_i26': u'> "k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
 '_i27': u'"k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
 '_i28': u"'spam' in 'abcspamdef' # \u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f",
 '_i29': u"from IPython.display import Image\nImage(filename='C:\\\\Users\\\\kiss\\\\Pictures\\\\for_blogs\\\\py_str.PNG')",
 '_i3': u" s = 'a\\nb\\tc'\n s   ",
 '_i30': u"S = 'spam'\nS[0], S[-2] # \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043b\u0438 \u043e\u0442 \u043a\u043e\u043d\u0446\u0430",
 '_i31': u'S[1:3], S[1:], S[:-1] # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0437\u0430: \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438',
 '_i32': u"S = '0123456789'\nS[1:10:2]",
 '_i33': u"S='hello'\nS[::-1]",
 '_i34': u'# File echo.py\nimport sys\nprint sys.argv',
 '_i35': u'int(\u201c42\u201d), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
 '_i36': u'int("42"), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
 '_i37': u'repr(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430  \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435',
 '_i38': u'string.__doc__',
 '_i39': u'str.__doc__',
 '_i4': u" s = 'a\\nb\\tc'\n s \n print s   ",
 '_i40': u'\u0438 help(S.list)',
 '_i41': u'help(S.list)',
 '_i42': u'help(S.split)',
 '_i43': u"'%(n)d %(x)s' % {'n':1, 'x':'spam'}",
 '_i44': u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\u2018name\u2019: \u2018Bob\u2019, \u2018age\u2019: 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
 '_i45': u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\'name\': \'Bob\', \'age\': 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
 '_i46': u'food = "spam"\nage = 40\nvars()',
 '_i5': u'len(s)',
 '_i6': u's = \u2018a\\0b\\0c\u2019\ns',
 '_i7': u"s = 'a\\0b\\0c'\ns",
 '_i8': u'len(s)',
 '_i9': u"s = '\\001\\002\\x03'\ns",
 '_ih': ['',
  u's = \u2018a\\nb\\tc\u2019',
  u"s = 'a\\nb\\tc'",
  u"s = 'a\\nb\\tc'\ns   ",
  u"s = 'a\\nb\\tc'\ns \nprint s   ",
  u'len(s)',
  u's = \u2018a\\0b\\0c\u2019\ns',
  u"s = 'a\\0b\\0c'\ns",
  u'len(s)',
  u"s = '\\001\\002\\x03'\ns",
  u'len(s)',
  u'S = "s\\tp\\na\\x00m"\nS',
  u'len(S)\nprint S',
  u'len(S)',
  u'print S',
  u'print (S)',
  u"x = 'C:\\py\\code' # \u0421\u0438\u043c\u0432\u043e\u043b \\ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435\nx",
  u'len(x)',
  u"myfile = open(r'C:\\new\\text.dat', 'w') # \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b r",
  u"'abc' + 9",
  u"'abc' + 'de' # \u041a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f: \u043d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430",
  u"'Ni!' * 4 # \u041f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435: \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u201cNi!\u201d + \u201cNi!\u201d + ...",
  u"myjob = 'hacker'\nfor c in myjob: print(c, end=\u2019 \u2018), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c, end=' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c,' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u"myjob = 'hacker'\nfor c in myjob: print(c+' '), # \u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435",
  u'> "k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
  u'"k" in myjob # \u041d\u0430\u0439\u0434\u0435\u043d\u043e',
  u"'spam' in 'abcspamdef' # \u041f\u043e\u0438\u0441\u043a \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f",
  u"from IPython.display import Image\nImage(filename='C:\\\\Users\\\\kiss\\\\Pictures\\\\for_blogs\\\\py_str.PNG')",
  u"S = 'spam'\nS[0], S[-2] # \u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043b\u0438 \u043e\u0442 \u043a\u043e\u043d\u0446\u0430",
  u'S[1:3], S[1:], S[:-1] # \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0437\u0430: \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438',
  u"S = '0123456789'\nS[1:10:2]",
  u"S='hello'\nS[::-1]",
  u'# File echo.py\nimport sys\nprint sys.argv',
  u'int(\u201c42\u201d), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
  u'int("42"), str(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437/\u0432 \u0441\u0442\u0440\u043e\u043a\u0438',
  u'repr(42) # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430  \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u0434\u0435',
  u'string.__doc__',
  u'str.__doc__',
  u'\u0438 help(S.list)',
  u'help(S.list)',
  u'help(S.split)',
  u"'%(n)d %(x)s' % {'n':1, 'x':'spam'}",
  u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\u2018name\u2019: \u2018Bob\u2019, \u2018age\u2019: 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
  u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\'name\': \'Bob\', \'age\': 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
  u'food = "spam"\nage = 40\nvars()'],
 '_ii': u'reply = """ # \u0428\u0430\u0431\u043b\u043e\u043d \u0441 \u0437\u0430\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n"""\nvalues = {\u2018name\u2019: \u2018Bob\u2019, \u2018age\u2019: 40} # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\nprint reply % values # \u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439',
 '_iii': u"'%(n)d %(x)s' % {'n':1, 'x':'spam'}",
 '_oh': {3: 'a\nb\tc',
  5: 5,
  7: 'a\x00b\x00c',
  8: 5,
  9: '\x01\x02\x03',
  10: 3,
  11: 's\tp\na\x00m',
  13: 7,
  16: 'C:\\py\\code',
  17: 10,
  20: 'abcde',
  21: 'Ni!Ni!Ni!Ni!',
  27: True,
  28: True,
  29: <IPython.core.display.Image at 0x61e9cf8>,
  30: ('s', 'a'),
  31: ('pa', 'pam', 'spa'),
  32: '13579',
  33: 'olleh',
  36: (42, '42'),
  37: '42',
  39: "str(object='') -> string\n\nReturn a nice string representation of the object.\nIf the argument is a string, the return value is the same object.",
  43: '1 spam'},
 '_sh': <module 'IPython.core.shadowns' from 'C:\Users\kiss\Anaconda\lib\site-packages\IPython\core\shadowns.pyc'>,
 'age': 40,
 'c': 'r',
 'exit': <IPython.core.autocall.ZMQExitAutocall at 0x5f1af28>,
 'food': 'spam',
 'get_ipython': <bound method ZMQInteractiveShell.get_ipython of <IPython.kernel.zmq.zmqshell.ZMQInteractiveShell object at 0x0000000005F1A198>>,
 'help': Type help() for interactive help, or help(object) for help about object.,
 'myjob': 'hacker',
 'quit': <IPython.core.autocall.ZMQExitAutocall at 0x5f1af28>,
 'reply': ' # \xd0\xa8\xd0\xb0\xd0\xb1\xd0\xbb\xd0\xbe\xd0\xbd \xd1\x81 \xd0\xb7\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x89\xd0\xb0\xd0\xb5\xd0\xbc\xd1\x8b\xd0\xbc\xd0\xb8 \xd1\x81\xd0\xbf\xd0\xb5\xd1\x86\xd0\xb8\xd1\x84\xd0\xb8\xd0\xba\xd0\xb0\xd1\x82\xd0\xbe\xd1\x80\xd0\xb0\xd0\xbc\xd0\xb8 \xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x82\xd0\xb0\nGreetings...\nHello %(name)s!\nYour age squared is %(age)s\n',
 's': '\x01\x02\x03',
 'sys': <module 'sys' (built-in)>,
 'values': {'age': 40, 'name': 'Bob'},
 'x': 'C:\\py\\code'}
In [47]:
"%(age)d %(food)s" % vars()
Out[47]:
'40 spam'
Метод форматирования строк Новые методы форматирования стоит рассмотреть отдельно

Комментариев нет:

Отправить комментарий