- en
- Language: ru
- Documentation version: latest
Функция 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)