Подтвердить что ты не робот

Почему использование из __future__ import print_function нарушает печать в стиле Python2?

Я новичок в программировании на python, и я пытаюсь распечатать с разделителем и end, но он все еще дает мне синтаксическую ошибку.

Я использую Python 2.7.

Вот мой код:

from __future__ import print_function
import sys, os, time

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

А вот и ошибка:

$ python2 xy.py
  File "xy.py", line 5
    print x, sep=' ', end=''
          ^
SyntaxError: invalid syntax
$
4b9b3361

Ответ 1

Прежде всего, from __future__ import print_function должна быть первой строкой кода в вашем скрипте (кроме некоторых исключений, упомянутых ниже). Во-вторых, как уже говорили другие ответы, вы должны использовать print как функцию сейчас. В этом весь смысл from __future__ import print_function; перенести функцию print из Python 3 в Python 2. 6+.

from __future__ import print_function

import sys, os, time

for x in range(0,10):
    print(x, sep=' ', end='')  # No need for sep here, but okay :)
    time.sleep(1)

Операторы __future__ должны находиться в верхней части файла, потому что они меняют фундаментальные особенности языка, и поэтому компилятор должен знать о них с самого начала. Из документации:

Будущее утверждение распознается и обрабатывается специально при компиляции время: изменения в семантике основных конструкций часто реализовано путем генерации другого кода. Может даже случиться так, что новая функция вводит новый несовместимый синтаксис (например, новый зарезервированное слово), и в этом случае компилятору может понадобиться Модуль по-разному. Такие решения не могут быть отложены до времени выполнения.

В документации также упоминается, что единственной вещью, которая может предшествовать оператору __future__, являются строка документа, комментарии, пустые строки и другие будущие операторы.