Буферизированный (потоковый) ввод-вывод. Часть II
7.1.4. Вывод средствами языка Perl
Для вывода средствами языка Perl используется функции: die, print, printf и write. Их описание смотри ниже.
| Синтаксис: |
print ДЕСКРИПТОР СПИСОК print СПИСОК; print |
| Описание: | Выводит список строковых данных в файл, связанный с дескриптором: ДЕСКРИПТОР. Если этот параметр опущен, то вывод осуществляется в стандартный файл вывода STDOUT, или текущий файл, установленный функцией select(). Если отсутствует параметр: СПИСОК, то выводится содержимое специальной переменной: $_. |
| printf | |
| Синтаксис: |
printf ДЕСКРИПТОР ФОРМАТ, СПИСОК printf ФОРМАТ, СПИСОК |
| Описание: | Выводит форматированный список строковых данных в файл, связанный с дескриптором: ДЕСКРИПТОР. Если этот параметр опущен, то вывод осуществляется в стандартный файл вывода STDOUT, или текущий файл, установленный функцией select(). Параметр: ФОРМАТ - представляет собой строку, содержащую символы форматирования, полностью совпадающие с символами форматирования системной функции UNIX printf (смотри приложение №2 к "Буферизированный (потоковый) ввод-вывод" данного курса). |
| write | |
| Синтаксис: |
write ДЕСКРИПТОР write |
| Описание: | Осуществляет форматированный вывод в файл, связанный с заданным дескриптором: ДЕСКРИПТОР, в соответствии с определённым форматом. Если параметр: ДЕСКРИПТОР - не задан, то выводит в стандартный файл вывода: STDOUT, - или в файл, выбранной функцией: select(). |
Информацию о форматированном выводе данных смотри, например, в [18].
Пример 7.3.
#!perl -w
# File ex07003.pl
# Данный пример тестировался интерпретатором языка
# ActiveState Perl 5.8.0.
#
# Данная функция запрашивает имя и возраст пользовател
# и выводит приветствие.
#
# Определение строки форматирования:
$format_out = "Добрый день, %s!\nВаш возраст, %-.10s, - %3d лет\n";
# Ввод персональных данных
print "\nВведите своё имя: ";
$name = <>;
print "\nВведите Ваш возраст: ";
$age = <>;
# Выбор приветстви
if( $age < 40 )
{
printf $format_out, "Молодой человек", $name, $age;
}
else
{
printf $format_out, "Папаша", $name, $age;
}
# Завершение работы
print STDERR "\nPress key Enter to Exit...";
$junk = <STDIN>;
# Конец файла7.1.5. Вывод средствами языка Python
Для вывода в стандартный поток вывода на языке Python используются следующие функции (смотри абзацы ниже).
| ФУНКЦИЯ: | |
| НАЗНАЧЕНИЕ: | Осуществляет форматированный вывод списка переменных в поток; |
| СИНТАКСИС: |
print ДЕСКРИПТОР, '"строка форматов"' % (СПИСОК) print '"строка форматов"' % (СПИСОК) |
| ОПИСАНИЕ: | Выводит список строковых данных в файл, связанный с дескриптором: ДЕСКРИПТОР. Если этот параметр опущен, то вывод осуществляется в стандартный файл вывода STDOUT. Строка форматов имеет то же описание параметров, как и в функции printf на языке Си (смотри Приложение №2 к "Буферизированный (потоковый) ввод-вывод" данного курса); |
| ФУНКЦИЯ: | STR |
| НАЗНАЧЕНИЕ: | Вывод символов в поток; |
| СИНТАКСИС: | str( object ) |
| ОПИСАНИЕ: | Возвращает строку, содержащую представление object для печати. Функция расставляет или убирает кавычки, то есть выполняет оформление объекта. Основное отличие от функции repr() в том, что данная функция формирует строку для человеческого восприятия, а не для eval(). |
| ФУНКЦИЯ: | REPR |
| НАЗНАЧЕНИЕ: | Вывод символов в поток; |
| СИНТАКСИС: | repr( object ) |
| ОПИСАНИЕ: | Возвращает строку, содержащую представление object для печати. Основная задача функции - формирование строки для использования в функции eval(). |
В Питоне имеется несколько способов форматированного ввода/вывода. Самый простой из них - оператор print, печатающий переменные и строковые константы, применяя формат по умолчанию. Другой простой способ вывода данных на дисплей - функция str(), которая выводит любую переменную, используя также формат по умолчанию. Есть также функция repr(), которая выводит данные в машинном(неформатированном) виде. Некоторые типы переменных, которые не могут должным образом отформатироваться функцией str(), обрабатываются схоже с repr().
Пример 7.4.
# Пример тестировался на интерпретаторе
# ActiveState Python 2.5
>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> 's' # Такое выражение значит то же, что и repr(s)
"'Hello, world.'"#Машинный формат
>>> str(0.1) # Переменная с точкой
'0.1'
>>> '0.1' # repr(0.1)
'0.10000000000000001' # Ошибка округления чисел с точкой
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'Значение x равно' + `x` + ', а значение y равно ' + `y` + '...'#Использование операции
... #строк для форматировани
>>> print s
Значение x равно 32.5, а y равно 40000...
>>> # Заключение переменных в кавычки работает для всех типов данных
... p = [x, y]
>>> ps = repr(p)
>>> ps
'[32.5, 40000]'
>>> # Окружение строки дополнительными кавычками
... hello = 'hello, world\n'
>>> hellos = `hello`
>>> print hellos
'hello, world\n'
>>> # Можно заключать в кавычки и константные списки
... `x, y, ('Linux', 'BSD')`
"(32.5, 40000, ('Linux', 'BSD'))"Для форматированного вывода удобно использовать выравнивание по краю. Для этой цели в Питоне предусмотрены следующие функции модуля string: string.rjust(), string.ljust() и string.center(). Эти функции возвращают выровненную строку по правому и левому краю, а также по центру до определённого количества символов. Они принимают два параметра: саму строку и количество символов, зарезервированных под строку(если строка длиннее, то она выводится как есть, а для удаления лишних символов воспользуйтесь "string.ljust(x, n)[0:n]". На примере это выглядит так:
Пример 7.5.
# Пример тестировался на интерпретаторе # ActiveState Python 2.5 >>> import string >>> for x in range(1, 11): ... print string.rjust(`x`, 2), string.rjust(`x*x`, 3), ... # В предыдущем операторе print была поставлена в конце запятая, перевода строки нет: ... print string.rjust(`x*x*x`, 4) Для этой же цели можно использовать оператор print со строкой формата, аналогичной Си (смотри приложение №2 к лекции 06 данного курса): >>> for x in range(1,11): ... print '%2d %3d %4d' % (x, x*x, x*x*x) # %d означает целое число
Пример 7.6.
#! %PYTHON%/python # -*- coding: cp866 -*- # # Пример тестировался на интерпретаторе # ActiveState Python 2.5 # # File ex07006.pl # Данная функция запрашивает имя и возраст пользовател # и выводит приветствие. # def ex07006(): # Определение строки форматирования: format_out0 = 'Добрый день, %s!' format_out1 = 'Ваш возраст, %-.10s,' format_out2 = ' - %3d лет' # Ввод персональных данных name = raw_input( 'Введите своё имя: ' ) age = int( raw_input( 'Введите Ваш возраст: ' ) ) # Выбор приветстви if( age < 40 ): print format_out0 % 'Молодой человек' else: print format_out0 % 'Папаша' print format_out1 % name, print format_out2 % age # Завершение работы junk = raw_input( 'Press key Enter to Exit...') # Конец файлаЛистинг 7.6. Реализация алгоритма из примера 7.2.