为什么使用 from __future__ import print_function 会破坏 Python2 风格的打印? [已关闭]

问题描述 投票:0回答:1

我在 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
$

我认为使用

__future__
导入应该可以在
sep
语句中使用
end
print
,但现在它显然根本不起作用。

为什么不呢?

python python-2.7 loops vim python-import
1个回答
255
投票

首先,

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__
语句需要位于文件顶部附近,因为它们改变了语言的基本内容,因此编译器需要从一开始就了解它们。来自文档

future 语句在编译时会被识别和特殊处理 时间:核心结构语义的改变经常发生 通过生成不同的代码来实现。甚至可能是这样的情况 新功能引入了新的不兼容语法(例如新的 保留字),在这种情况下编译器可能需要解析 模块不同。这样的决定不能推迟到运行时。

文档还提到,在

__future__
语句之前唯一可以出现的是模块文档字符串、注释、空行和其他未来语句。

© www.soinside.com 2019 - 2024. All rights reserved.