how to use from __future__ import print_function
我刚开始使用python编程,我试图用一个分隔符打印出来,但它仍然给了我一个语法错误。我使用的是python 2.7我正在从VIM编辑器编码,下面是我的代码:
1 2 3 4 5 6
| import sys, os, time
from __future__ import print_function
for x in range(0,10):
print x, sep=' ', end=''
time.sleep(1) |
请帮忙。使用我的代码,告诉我应该在哪里实际使用from __future__ import print_function谢谢你
- 您将print作为函数导入,但仍将其作为语句处理。
- 没有圆括号不能调用print,因为您已将print更改为函数print(args)
- 另请参见python中的__future__是用于什么、如何/何时使用以及如何工作的。
首先,from __future__ import print_function需要是脚本中的第一行代码(除了下面提到的一些例外)。其次,正如其他答案所说,您现在必须使用print作为函数。这就是from __future__ import print_function的全部要点;将print函数从python 3引入python 2.6+。
1 2 3 4 5 6 7
| 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__语句需要靠近文件的顶部,因为它们会更改语言的基本内容,因此编译器需要从一开始就了解它们。从文档中:
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__语句之前只能有模块docstring、注释、空行和其他未来语句。
- 我能知道为什么吗?
- 谢谢。。。但是,现在它正在打印0123456789而不是0 1 2 3 4 5 6 7 8 9。我如何解决这个问题?
- @呃,我是end=' '的。
- 如文档(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,我确实编辑提到过,但第一段不清楚,所以我修改了。谢谢你指出。
- 那么,为什么在第二行增加未来是可行的呢?
- @嗯,它不是无用的,只是在特定的代码中没有用处,因为每次调用print时只打印一件东西。例如,如果您正在执行print(x, x**2, sep=' ', end=' '),那么它将非常有用,因为它在每个项目之间放置了一个分隔符(在本例中,x和x**2)。当然,默认的sep是' ',所以您不必指定它。
- @阿维纳什,你能告诉我你的意思吗?
- @Cyphase Op说,如果我将未来的导入添加为第二行,我的答案仍然有效。
- 好的,抓住。谢谢大家
- @阿维纳斯拉吉,让我们在你答案的评论中讨论一下你的答案,以便于子孙后代:)。
- @那么为什么他说我的代码在工作?
- @阿维纳斯拉吉,我不知道,你得问问乌米斯。但正如我在对你答案的评论中所说,也许OP做了一个改变,但没有提及。OP的第一条评论是仍然有一个错误。
- @我回复了你刚才的编辑,我想让你知道为什么,因为我知道这是善意的。虽然该表显然与__future__有关,但它并没有真正帮助回答问题或直接扩展答案;它只是一些无关的信息。此外,我不确定斜体字"docstring,comments,blank lines"背后究竟是什么意思。如果您想讨论这个问题,或者您想对__future__文档的链接发表评论,请随时回复。谢谢你想改进我的答案。
- @Cyphase没问题。我只是想展示一下还有哪些其他功能,以及它们被引入时的情况,因为这是一个自然的后续问题,并且有助于澄清它们的用途。