为什么从__future__ import 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
您将print作为函数导入了,但是您仍将它作为语句处理
jonrsharpe

4
您不能在没有括号的情况下调用print,因为您已将print更改为函数print(args)
Charlie Parker

Answers:


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=' '
Cyphase

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,我确实提到了这一点,但是在第一段中并不清楚,所以我解决了这个问题。感谢您指出。
Cyphase

1
@AvinashRaj,我不知道;您必须问UHMIS。但是正如我在对您的答案的评论中所说的那样,OP可能做了更改,但没有提及。和OP的第一个评论有仍然是一个错误。
Cyphase
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.