Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 7:

Буферизированный (потоковый) ввод-вывод. Часть II

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

7.1.4. Вывод средствами языка Perl

Для вывода средствами языка Perl используется функции: die, print, printf и write. Их описание смотри ниже.

die
Синтаксис: die СПИСОК
Описание: Вне тела функции eval выводит значения элементов списка, заданных параметром: СПИСОК, в стандартный файл ошибок STDERR и завершает выполнение сценария Perl с текущим значением специальной переменной $!. Если используется в теле функции eval(), то сообщение об ошибке помещается в переменную: $@, и функция eval завершается неопределённым значением. Такое поведение позволяет использовать функцию: die - для генерирования исключительных ситуаций.

print
Синтаксис:
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 ДЕСКРИПТОР СПИСОК
print СПИСОК
ОПИСАНИЕ: Выводит список строковых данных в файл, связанный с дескриптором: ДЕСКРИПТОР. Если этот параметр опущен, то вывод осуществляется в стандартный файл вывода STDOUT ;

Примечание: В конец вывода переменной print автоматически вставляется символ новой строки ( "EOL" ). Чтобы этого не происходило, после последнего элемента из списка выводимых объектов необходимо поставить запятую.

ФУНКЦИЯ: PRINT
НАЗНАЧЕНИЕ: Осуществляет форматированный вывод списка переменных в поток;
СИНТАКСИС:
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.
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Artem Bardakov
Artem Bardakov
Россия
Андрей Алабин
Андрей Алабин
Россия