Перейти до змісту

Функція print

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

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

Функція print виводить усі елементи, розділяючи їх значенням sep, та завершує виведення значенням end.

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

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=f"\n{'-' * 10}\n")
1
----------
2
----------
3

Note

Всі аргументи, які керують поведінкою функції 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
----------

flush

За замовчуванням під час запису у файл або виведення на стандартний потік виводу буферизується вивід. Параметр flush дозволяє вимкнути буферизацію.

Приклад скрипта, який виводить число від 0 до 10 кожну секунду:

import time

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

Спробуйте запустити скрипт і переконатися, що цифри виводяться раз на секунду.

Тепер, аналогічний скрипт, але числа виводитимуться в одному рядку

import time

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

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

Це пов'язано з тим, що при виведенні на стандартний потік виведення, flush виконується після символу нового рядка.

Щоб скрипт відпрацьовував як потрібно, необхідно встановити flush рівним True:

import time

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