为啥使用 from __future__ import print_function 会破坏 Python2 样式的打印? [关闭]

Posted

技术标签:

【中文标题】为啥使用 from __future__ import print_function 会破坏 Python2 样式的打印? [关闭]【英文标题】:Why does using from __future__ import print_function breaks Python2-style print? [closed]为什么使用 from __future__ import print_function 会破坏 Python2 样式的打印? [关闭] 【发布时间】:2015-11-09 01:06:03 【问题描述】:

我是使用 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
$

【问题讨论】:

您将 print 作为函数导入,但 您仍将其视为语句 您不能在没有括号的情况下调用 print,因为您已将 print 更改为函数 print(args) 另见What is __future__ in Python used for and how/when to use it, and how it works 您仍在使用 python 2 打印语法,但是您从未来导入了打印函数(也就是 python 3 中的打印函数)。它用新语法替换旧的打印语法,从而产生错误 另外,我不知道为什么当 python 3 出来的时候你还在使用 python 2,但是无论如何。 【参考方案1】:

首先,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__ 语句需要靠近文件顶部,因为它们改变了语言的基本内容,因此编译器需要从一开始就知道它们。来自the documentation:

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

文档还提到,可以在 __future__ 语句之前的唯一内容是模块文档字符串、cmets、空行和其他未来语句。

【讨论】:

谢谢...但是,现在打印的是 0123456789 而不是 0 1 2 3 4 5 6 7 8 9。我该如何解决? @UHMIS,做end=' ' @UHMIS,它不是没用的,只是在那个特定的代码中没用,因为每次调用 print 只打印一件事。例如,如果您正在执行print(x, x**2, sep=' ', end=' '),那么它会很有用,因为它会在每个项目之间放置一个分隔符(在本例中为xx**2)。当然,默认的sep' ',所以无论如何你都不必指定。 @AvinashRaj,你能告诉我你的意思吗? @AvinashRaj,我不知道;你得问UHMIS。但正如我在对您的回答的评论中所说的那样,也许 OP 做出了改变并且没有提及它。而OP的第一条评论还是有错误。

以上是关于为啥使用 from __future__ import print_function 会破坏 Python2 样式的打印? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

from __future__ import print_function的使用

from __future__ import print_function的作用

使用from __future__ import unicode_literals

from __future__ import print_function

Python学习from __future__ import print_function用法

from __future__ import print_function 介绍