Книга: PyNEng
Назад: 10. Полезные функции
Дальше: Функция range

Функция print

Функция print

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

print(*items, sep=' ', end='\n', file=sys.stdout, flush=False) 

Функция print выводит все элементы, разделяя их значением sep, и завершает вывод значением end.

Все элементы, которые передаются как аргументы, конвертируются в строки:

In [4]: def f(a):    ...:     return a    ...:  In [5]: print(1, 2, f, range(10)) 1 2 <function f at 0xb4de926c> range(0, 10) 

Для функций f и range результат равнозначен применению str():

In [6]: str(f) Out[6]: '<function f at 0xb4de926c>'  In [7]: str(range(10)) Out[7]: 'range(0, 10)' 

sep

Параметр sep контролирует то, какой разделитель будет использоваться между элементами.

По умолчанию используется пробел:

In [8]: print(1, 2, 3) 1 2 3 

Но можно изменить значение sep на любую другую строку:

In [9]: print(1, 2, 3, sep='|') 1|2|3  In [10]: print(1, 2, 3, sep='\n') 1 2 3  In [11]: print(1, 2, 3, sep='\n'+'-'*10+'\n') 1 ---------- 2 ---------- 3 

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

В некоторых ситуациях функция print может заменить метод join:

In [12]: items = [1,2,3,4,5]  In [13]: print(*items, sep=', ') 1, 2, 3, 4, 5 

end

Параметр end контролирует то, какое значение выведется после вывода всех элементов.

По умолчанию используется перевод строки:

In [19]: print(1,2,3) 1 2 3 

Можно изменить значение end на любую другую строку:

In [20]: print(1,2,3, end='\n'+'-'*10) 1 2 3 ---------- 

file

Параметр file контролирует то, куда выводятся значения функции print. По умолчанию все выводится на стандартный поток вывода - sys.stdout.

Но Python позволяет передавать file как аргумент любой объект с методом write(string). За счет этого с помощью print можно записывать строки в файл:

In [1]: f = open('result.txt', 'w')  In [2]: for num in range(10):    ...:     print('Item {}'.format(num), file=f)    ...:  In [3]: f.close()  In [4]: cat result.txt Item 0 Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 7 Item 8 Item 9 

flush

По умолчанию при записи в файл или выводе на стандартный поток вывода вывод буферизируется. Функция print позволяет отключать буферизацию.

Это можно контролировать и в файле

Пример скрипта, который выводит число от 0 до 10 каждую секунду (файл print_nums.py):

import time  for num in range(10):     print(num)     time.sleep(1) 

Попробуйте запустить скрипт и убедиться, что числа выводятся раз в секунду.

Теперь, аналогичный скрипт, но числа будут выводиться в одной строке (файл print_nums_oneline.py):

import time  for num in range(10):     print(num, end=' ')     time.sleep(1) 

Попробуйте запустить функцию. Числа не выводятся по одному в секунду, а выводятся все через 10 секунд.

Это связано с тем, что при выводе на стандартный поток вывода flush выполняется после перевода строки.

Чтобы скрипт отрабатывал как нужно, необходимо установить flush равным True (файл print_nums_oneline_fixed.py):

import time  for num in range(10):     print(num, end=' ', flush=True)     time.sleep(1) 
Назад: 10. Полезные функции
Дальше: Функция range