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

В сети

Пользователей: 45
Из них просматривают:
Аналоги: 15. Даташиты: 7. Инструкции: 3. Новости: 6. Остальное: 4. Партнёры: 1. Программы: 1. Профиль пользователя: 1. Форум: 7.
Участников: 2
Гостей: 43

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

Партнёры


Партнёры

Оглавление

7.1. Форматированный вывод

До сих пор мы использовали два способа вывода: вывод значений выражений в интерактивном режиме и с помощью инструкции print (третий способ — метод объектов-файлов write()).

Часто возникает желание иметь больший контроль над форматированием вывода, чем просто выводить значения, разделённые пробелом. Конечно, Вы можете сами обрабатывать строки: с помощью операций среза и объединения можно создать любое расположение, какое только Вы сможете представить. Строки имеют методы, позволяющие дополнять их пробелами до необходимой ширины колонки1. Другой путь — использовать оператор % со строкой в качестве левого аргумента. Оператор % интерпретирует строку справа как строку формата в стиле функции sprintf() в C, которую нужно применить к правому аргументу, и возвращает строку с результатом форматирования.

Безусловно, остаётся еще один вопрос: как получить строковое представление для значений различного типа? К счастью, Python предоставляет возможность преобразовывать значение любого типа в строку: с помощью функции str(). Фактически язык предоставляет две функции для получения строкового представления — repr() (тот же эффект можно получить просто заключив выражение в обратные кавычки: `expr`) и str(). Первый способ, например, используется интерпретатором для вывода значений выражений в интерактивном режиме, второй — для вывода аргументов инструкцией print. Функция str() по возможности возвращает представление, наиболее пригодное для вывода, а функция repr() — для ввода выражения в интерактивном режиме. Приведём несколько примеров:

 

>>> x = 10 * 3.14

 

Число 31.4 не может быть точно представлено в двоичном виде, поэтому:

 

>>> x
31.400000000000002

 

Однако функция str() выведет число с разумной точностью:

 

>>> y = 200*200
>>> s = 'Значение x равно ' + str(x) + \
... ', значение y равно ' + str(y) + '...'
>>> print s
Значение x равно 31.4, значение y равно 40000...

 

Длинные целые числа записываются в языке Python с суффиксом 'L'. Начиная с версии 1.6, функция str() его не выводит:

 

>>> repr(1000L)
'1000L'
>>> str(1000L)
'1000'

 

Строковое представление можно получить и для других типов:

 

>>> p = [x, y]
>>> ps = repr(p)
>>> ps
'[31.400000000000002, 40000]'
>>> `x, y, ('spam', 'eggs')`
"(31.400000000000002, 40000, ('spam', 'eggs'))"

 

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

 

>>> hello = 'hello, world\n'
>>> print hello
hello, world

>>> hellos = `hello`
>>> print hellos
'hello, world\n'

 

Выведем таблицу квадратов и кубов двумя описанными способами:

 

>>> for x in range(1, 11):
...     print str(x).rjust(2), str(x*x).rjust(3),
...     # Обратим внимание на завершающую запятую
...     print str(x*x*x).rjust(4)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

 

>>> for x in range(1,11):
...     print '%2d %3d %4d' % (x, x*x, x*x*x)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

 

(Обратите внимание на то, что один пробел между колонками был добавлен инструкцией print.)

Этот пример демонстрирует использование метода строк rjust(), который выравнивает строку вправо в поле заданной ширины, дополняя её слева пробелами. Аналогично действуют методы ljust() и center(). Они не выводят ничего — просто возвращают новую строку. Если исходная строка слишком длинная, она не обрезается, а возвращается в неизменном виде: обычно лучше внести беспорядок в расположение колонок, чем вывести неверное значение. (Если Вы действительно хотите её обрезать, воспользуйтесь операцией среза: 's.ljust(n)[0:n]'.)

Также может быть полезна функция zfill(), определённая в модуле string, которая дополняет слева нулями строку с числом, корректно обрабатывая знаки плюс и минус:

 

>>> import string
>>> string.zfill('12', 5)
'00012'
>>> string.zfill('-3.14', 7)
'-003.14'
>>> string.zfill('3.14159265359', 5)
'3.14159265359'

 

Использование оператора % выглядит примерно так:

 

>>> import math
>>> print 'Значение PI приблежённо равно %5.3f.' % \
... math.pi
Значение PI приблежённо равно 3.142.

 

Если в строке нужно вывести несколько значений, в качестве правого операнда используется кортеж:

 

>>> table = {'Sjoerd': 4127, 'Jack' : 4098, 'Dcab' : 7678}
>>> for name, phone in table.items():
...     print '%-10s ==> %10d' % (name, phone)
...
Dcab       ==>       7678
Jack       ==>       4098
Sjoerd     ==>       4127

 

Большинство форматов работают точно так же, как и в C. Однако, если типы аргументов не соответствуют формату, интерпретатор приводит их к необходимому типу (например, выражение любого типа может быть преобразовано в строку с помощью встроенной функции str()) или, если это невозможно, генерирует исключение2. Вы можете использовать * для того, чтобы передать отдельным параметром ширину поля или точность.

Заметим, что если правый аргумент кортеж, он всегда считается списком аргументов:

 

>>> def f(x):
...     print 'Функции передано значение "%s"' % x
...
>>> f(1)
Функции передано значение "1"
>>> f([1, 2])
Функции передано значение "[1, 2]"
>>> # интерпретируется не так, как вы ожидали
... f((1,))
Функции передано значение "1"
>>> # ошибка
... f((1, 2))
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "<stdin>", line 2, in f
TypeError: not all arguments converted during string formatting

 

В данном случае надёжнее будет использовать в качестве правого операнда кортеж, состоящий из одного элемента:

 

>>> def f(x):
...     print 'Функции передано значение "%s"' % (x,)
...
>>> # Теперь всё правильно
... f((1,))
Функции передано значение "(1,)"
>>> f((1, 2))
Функции передано значение "(1, 2)"
>>> f(1)
Функции передано значение "1"
>>> f([1,2])
Функции передано значение "[1, 2]"

 

В случае длинных строк формата, Вы можете захотеть ссылаться на переменные по имени вместо их положения. Это можно сделать, используя расширенную запись в виде %(name)format, например:

 

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print 'Jack: %(Jack)d; Sjoerd: %(Sjoerd)d; Dcab: %(Dcab)d' % table
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

 

Такая запись особенно полезна в комбинации со встроенной функцией vars(), которая возвращает словарь с переменными в текущей области видимости.

Более подробно операции над строками описаны в разделе 11.2.1.

Примечания:
  • Эти методы строк появились в версии 1.6 языка Python. В предыдущих версия они доступны в виде функций, определенных в модуле string.
  • Из этого правила есть исключение: интерпретатор не будет преобразовывать строку к числовому типу.
5
<< Меню >>  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

При замене радиодетали освободить отверстие от припоя можно заострённой спичкой.

Интересно

При замене радиодетали освободить отверстие от припоя можно заострённой спичкой.

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