【发布时间】:2017-01-04 19:09:04
【问题描述】:
我发现如果我使用 Python 2.7.11,我无法在新的打印函数中使用 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 语句可能正在导入旧版本的函数。 cmets 建议它使用 2.7.11,但我不明白它为什么这样做。
我确实看到了Need Python 3.4 version of print() from __future__,其答案只是包装了print 并手动添加了flush 参数。尽管这样可行,但我们没有最新版本的印刷品,这似乎更像是一种黑客攻击而不是解决真正的问题。
有没有办法将特定版本的 Python 函数(我想使用 Python 3.5 print 函数)导入我当前的 Python 脚本?如果这不可能,为什么不呢?
即使我写了我的问题,人们似乎(令人惊讶地)也不清楚我的问题有何不同。我会说不同的。
- 看来我的问题是它导入了我不期望的python 函数(因为它没有找到flush 参数)。因此,最自然也是我想做和知道的第一件事是,它导入了哪个打印函数。 cmets 建议它使用 2.7.11,但我不明白它为什么这样做。
- 我了解 from future 语句改变了我的编译器的工作方式。似乎我认为,由于它是一个未来的声明,它还从未来的版本中引入了打印功能。似乎它只会改变我的解释器的行为。如果我能够看到它使用的是什么打印函数,我就会知道它不是从未来版本中导入函数,而只是像未来的 python 解释器一样工作。看起来就是这样,但我不确定,我想确切地知道发生了什么。
- 最后但同样重要的是,是否有一种自然的方式可以将未来的 python 函数导入到我当前的 python 脚本中?我想使用 python 3.5 print 语句,除了让编译器表现得像未来的 python 解释器外,还不能像未来的 python 版本一样使用该函数吗? (至少对我而言)让解析器表现得像未来的 python 但仍然像 2.7.11 一样行事是违反直觉的。我想要的解决方案不是包装器,而是最近 python 的导入。如果这是不可能的,那么我的问题的答案应该解释为什么它不可能。
【问题讨论】:
-
当你
from future import print_function你得到2.7.11版本的打印功能。它不读取任何 python3 代码;它没有从任何 python 3 获得版本。您无法将内置的 python3 print 导入 python2。如果您需要“刷新”,唯一正确的解决方案是使用包装器:因此是重复的。 -
你又问了同样的问题,你已经链接了它的事实并没有太大的区别。如果这就是答案,那就是答案;如果您不明白原因,请考虑发表评论,如果您需要其他评论,请考虑赏金。
-
@jonrsharpe 我没有问同样的问题。我什至写了有什么区别。首先,我已经说过带有包装器的解决方案不能解决我的问题。我的问题是从 python 3.4 或更高版本中导入 print 语句。我知道未来的声明只是改变了我的 python 在编译时解析我的文件的方式,但是有没有办法让它使用我请求的打印功能?我还问我如何检查它使用的打印功能的版本,我想知道并检查一下。如果答案是即使你使用未来你也不能用包装器来做,我会..
-
@jonrsharpe 我可以描述我认为的答案。在我的回答规范中,包装器是一种黑客行为。它可能不在任何其他上下文中,但在这个问题中它不是解决方案,因为它没有向我解释我想知道的内容。我已经用更多细节更新了我的问题。希望它能澄清我想问的问题。说“在你的约束下不可能做到这一点”是一个完全可以接受的答案。我也澄清了我所说的未来是什么意思。我错了很好,但我只是想知道为什么我不能按照我要求的方式去做。
-
您为什么不直接阅读actually correspond to what you're using 的文档?他们清楚地表明没有
flush。from __future__ import不会在您的整个机器上搜索替代实现,而且您根本不清楚为什么您会认为它会,它使用与您正在使用的 Python 版本捆绑在一起的特定版本(否则它不会如果您还没有安装 3.x,则根本无法工作)。如果你想要 3.5 的print,或者其他新功能,只需使用 3.5,几乎没有理由仍然使用 2.x。
标签: python python-2.7 python-3.x printing flush