Reputation: 1789
I tried this code in 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)
But I get an error that says:
$ python2 xy.py
File "xy.py", line 5
print x, sep=' ', end=''
^
SyntaxError: invalid syntax
$
I thought that using the __future__
import should make it possible to use sep
and end
in a print
statement, but now it apparently doesn't work at all.
Why not?
Upvotes: 166
Views: 296086
Reputation: 12022
The whole point of from __future__ import print_function
is to bring the print
function from Python 3 into Python 2.6+. Thus, it must be used like a function here:
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__
statements change fundamental things about the language. From the documentation:
A future statement is recognized and treated specially at compile time: Changes to the semantics of core constructs are often implemented by generating different code. It may even be the case that a new feature introduces new incompatible syntax (such as a new reserved word), in which case the compiler may need to parse the module differently. Such decisions cannot be pushed off until runtime.
(For the same reason, they must also appear first in the source code, before any other import
s. The only things that can precede a __future__
statement are the module docstring, comments, blank lines, and other future statements.)
Upvotes: 265