如何在Python 2.7.x中导入最新版本的print函数?

时间:2016-08-28 18:42:44

标签: python python-2.7 python-3.x printing flush

如果我使用Python 2.7.11,我发现在新的print函数中我不能使用flush参数。我用过:

from __future__ import print_function

print('Hello', flush=True)

但它抱怨错误:

Traceback (most recent call last):
  File "print_future.py", line 3, in <module>
    print('Hello', flush=True)
TypeError: 'flush' is an invalid keyword argument for this function

在查看the documentation for print之后,我发现即使它是一个论点,它也不起作用。我的推论是它不起作用,因为flush仅在版本3.3中添加,因此特殊的from __future__ import语句可能导入该函数的旧版本。评论表明它使用2.7.11,但我不明白为什么要这样做。

我确实看到了Need Python 3.4 version of print() from __future__,其答案只是包裹了print并手动添加了flush参数。即使它有效,但它似乎比解决真正的问题更糟糕,我们没有最新版本的打印。

有没有办法导入特定版本的Python函数(我想特别使用Python 3.5 print函数)到我当前的Python脚本?如果这不可能,为什么不呢?

似乎(令人惊讶地)人们不清楚即使我写了它,我的问题是如何不同的。我会说不同的。

  1. 似乎我的问题是它导入我不期望的python函数(因为它没有找到flush参数)。因此,我最喜欢做和知道的最自然和第一件事就是导入哪个打印功能。评论建议使用2.7.11,但我不明白为什么要这样做。
  2. 我知道将来的语句会改变我的编译器的工作方式。我似乎认为,由于它是未来的声明,它还从未来版本中引入了打印功能。它似乎只会改变我的翻译行为。如果我能够看到它使用的打印功能,我会知道它不是从未来的版本中导入函数,而只是像未来的python解释器一样。这看起来似乎但我不确定,我想知道发生了什么。
  3. 最后但并非最不重要的,是否有一种将未来的python函数导入到当前python脚本的自然方法?我想使用python 3.5 print语句,除了让编译器像未来的python解释器一样行为,还能表现得像未来的python版本之外,是不是可以使用该函数?对于解析器的行为就像未来的python一样,但至少对我来说是反直觉的,但仍然像2.7.11一样。我想要的解决方案不是包装,而是导入最近的python。如果这是不可能的,那么我的问题的答案应该解释为什么它不可能。

1 个答案:

答案 0 :(得分:1)

  1.   

    导入我不期望的python函数

    我不明白为什么,这是print that's documented in 2.7.x的版本。

      

    导入哪个打印功能。

    与2.7.11捆绑在一起的版本,这是3.0中引入的版本(参见PEP-3105)。

      

    评论建议使用2.7.11,但我不明白为什么要这样做

    ...因为那是您正在使用的Python版本? from __future__ import ...无法在您的计算机上搜索其他实施方案,它会使用与您正在使用的Python版本捆绑在一起的实施方案。如果你考虑一下这是不可避免的,否则未来的进口将在没有安装3.x的机器上失败。

  2. 大部分内容对我来说没什么意义,但是:

      

    我认为,因为它是未来的声明,它还从未来版本中引入了打印功能。

    正是它正在做什么。但是,您无法选择哪个以后的版本。您可以获得在将其添加到__future__时计划发布的版本。

  3.   

    有没有一种自然的方式将未来的python函数导入到我当前的python脚本中?

    是的,这是您使用的方式,只要__future__支持该功能。

      

    是否无法使用该功能

    不是你正在使用的Python版本中的3.3版本,没有*。如果您想要更新版本的Python提供的功能,使用更新版本的Python 。 2.x正在走出公路。

      

    对于解析器的行为就像未来的python一样,但至少对我来说是反直觉的,但仍然像2.7.11那样行事

    &#34; [代理]不像2.7.11&#34; 。它使用3.x中的print函数而不是2.x中的print语句。如果您在导入print 'hello'后尝试print_function,则会像在3.x中那样获得SyntaxError

    *假设您不打算进行黑客入侵