为什么使用 from __future__ import print_function 会中断 Python2 风格的打印?
Why does using from __future__ import print_function breaks Python2-style print?
我是 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
$
首先,from __future__ import print_function
需要是脚本中的第一行代码(除了下面提到的一些例外情况)。其次,正如其他答案所说,您现在必须使用 print
作为函数。这就是 from __future__ import print_function
的重点;将 print
function 从 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__
语句需要靠近文件的顶部,因为它们改变了语言的基本内容,因此编译器需要从一开始就知道它们。来自 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.
文档还提到,可以在 __future__
语句之前的唯一内容是模块文档字符串、注释、空行和其他未来语句。
我是 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
$
首先,from __future__ import print_function
需要是脚本中的第一行代码(除了下面提到的一些例外情况)。其次,正如其他答案所说,您现在必须使用 print
作为函数。这就是 from __future__ import print_function
的重点;将 print
function 从 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__
语句需要靠近文件的顶部,因为它们改变了语言的基本内容,因此编译器需要从一开始就知道它们。来自 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.
文档还提到,可以在 __future__
语句之前的唯一内容是模块文档字符串、注释、空行和其他未来语句。