Нужна версия print () для Python 3.4 из __future__

В настоящее время, когда я

from __future__ import print_function

из Python 2.7.6 я, очевидно, получаю версию print() до добавления flush Аргумент ключевого слова, который вошел в Python 3.3 в соответствии с документами. Python3, установленный в моей системе (Ubuntu), является Python 3.4, и я проверил, что его функция print() имеет flush аргумент.

Как мне импортировать print() функция от 3.4? Откуда __future__ получать старую функцию печати?

1 ответ

Решение

Вы не можете получить версию из 3.4, импортированную в Python 2.7, нет. Просто промойте sys.stdout вручную после печати:

import sys

print(...)
sys.stdout.flush()

Или вы можете создать функцию обертки вокруг print() если вам нужно что-то, что принимает аргумент ключевого слова:

from __future__ import print_function
import sys
try:
    # Python 3
    import builtins
except ImportError:
    # Python 2
    import __builtin__ as builtins


def print(*args, **kwargs):
    sep, end = kwargs.pop('sep', ' '), kwargs.pop('end', '\n')
    file, flush = kwargs.pop('file', sys.stdout), kwargs.pop('flush', False)
    if kwargs:
        raise TypeError('print() got an unexpected keyword argument {!r}'.format(next(iter(kwargs))))
    builtins.print(*args, sep=sep, end=end, file=file)
    if flush:
        file.flush()

Это создает заменяющую версию, которая будет работать так же, как версия в 3.3 и выше.

Другие вопросы по тегам