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

В сети

Пользователей: 64
Из них просматривают:
Аналоги: 17. Даташиты: 6. Инструкции: 4. Новости: 11. Остальное: 3. Ошибки: 1. Программы: 2. Теги: 2. Торрент: 1. Форум: 16. Чат: 1.
Участников: 3
Гостей: 61

Google , wolf170571 , Яндекс , далее...
Рекорд 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
<< Меню >>  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити

Разное

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

Интересно

Если на шприц отсоса припоя надеть отрезок силиконовой трубки.

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