Чому використання імпорту __future__ print_function порушує друк у стилі Python2? [зачинено]


135

Я новачок у програмуванні з python, і я намагаюся роздрукувати з роздільником і закінчити, але це все ще дає мені синтаксичну помилку.

Я використовую 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
$

4
Ви імпортували друк як функцію, але ви все ще трактуєте її як вислів .
jonrsharpe

4
ви не можете зателефонувати друкувати без дужок, тому що ви змінили друк на функцію друку (args)
Charlie Parker

Відповіді:


210

Перш за все, 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__заяві, є модульні докстринг, коментарі, порожні рядки та інші майбутні заяви.


1
First of all, from __future__ import print_function needs to be the first line of code in your script , Я можу знати, чому?
Авінаш Радж

1
@UHMIS, зроби end=' '.
Сифаза

14
Як зазначено в документації ( docs.python.org/2/reference/simple_stmts.html#future ), це не повинно бути першим рядком: A future statement must appear near the top of the module. The only lines that can appear before a future statement are: the module docstring (if any), comments, blank lines, and other future statements.
ngulam

1
@ngulam, я змінив, щоб згадати про це, але в першому абзаці було не ясно, тому я це виправив. Дякуємо, що вказали на це.
Сифаза

1
@AvinashRaj, я не знаю; вам доведеться запитати UHMIS. Але, як я сказав у коментарі до вашої відповіді, можливо, ОП внесла зміни і не згадувала про це. І першим коментарем ОП було те, що все-таки була помилка.
Сифаза
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.