Россия |
Буферизированный (потоковый) ввод-вывод. Часть 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.