Что именно мы можем импортнуть из будущих версий? Явно не всё, иначе это была бы, собственно, новая версия. В ˍˍfutureˍˍ выносятся только ключевой функционал, от которого серьезно зависит синтаксис или использование возможностей языка. Самое очевидное это директива print, которая в Python3 стала функцией print().
from __future__ import print_function
Что стало удобней с этой функцией?
🔸 Теперь это функция а не ключевое слово, её можно передать как аргумент или вернуть как результат
def get_logger():
if condition:
return some_handler.write
else:
return print
🔸 С помощью аргументов sep и end можем настроить минимальное форматирование вывода.
sep: разделитель для нескольких объектов
end: последний символ вместо перехода на новую строку
>>> items1 = [1, 2, 3]
>>> items2 = [4, 5, 6]
>>> print(*items1, sep='-', end='-')
>>> print(*items2, sep='-')
1-2-3-4-5-6
🔸 Аргумент flush форсированно пробрасывает буфер аутпута в файл. Полезно для вывода из блокирующих операций. Например, когда вам нужно в stdout выводить прогресс операции, запущенной в subprocess. Если не сделать flush то весь аутпут прилетит только по завершению процесса.
for i in range(100):
print(f'Progress: {i}%', flush=True)
time.sleep(1)
Этот прогресс мы можем отслеживать в реальном времени.
А вот так приходилось делать раньше:
import sys
sys.stdout.write(text + '\n')
sys.stdout.flush()
🔸 Аргумент file позволяет перенаправить вывод в другой поток. Например в файл, сеть или что угодно, что имеет метод write.
print(text, file=open('filename.txt', 'w'))
___________
Ну да, теперь приходится писать лишние скобочки и сложно переучиться на новый лад. Но плюсов, я думаю, больше.
#2to3#tricks