4

我想with在一些生产代码中使用 Python 2.5 中的语句。它被反向移植了,我是否应该期待任何问题(例如其他机器/等上的可用性/兼容性)?

这是代码吗

from __future__ import with_statement

与 Python 2.6 兼容?

4

3 回答 3

7

是的,该语句在 Python 2.6 中是无操作的,因此您也可以with在 2.5 代码中自由使用它来创建关键字,而不会影响代码在 2.6 中的操作。这其实就是 Python 中“从未来导入”的总体设计意图!

于 2009-12-16T16:41:35.583 回答
4

您可以在 Python 2.6 和 3.0/1 中毫无问题地调用它(那里没有操作)。

于 2009-12-16T16:41:39.670 回答
3

with_statement 没有向后移植,而是在 Python 2.5 中实现。添加新的关键字或语法可能会破坏现有的应用程序。使用 Python,他们决定处理此问题的方式是允许人们及早选择加入这些功能,以便您可以慢慢过渡您的代码。

来自http://python.org/doc/2.5.2/ref/future.html

未来语句是对编译器的指令,应使用将在指定的 Python 未来版本中可用的语法或语义来编译特定模块。未来声明旨在简化向 Python 未来版本的迁移,这些版本会对语言进行不兼容的更改。它允许在功能成为标准的发布之前基于每个模块使用新功能。

您实际上可以检查期货以获取有关何时首次支持、何时不再需要导入等信息。

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import __future__
>>> dir(__future__)
['CO_FUTURE_ABSOLUTE_IMPORT', 'CO_FUTURE_DIVISION', 'CO_FUTURE_WITH_STATEMENT', 'CO_GENERATOR_ALLOWED', 'CO_NESTED', '_Feature', '__all__', '__builtins__',
__doc__', '__file__', '__name__', 'absolute_import', 'all_feature_names', 'division', 'generators', 'nested_scopes', 'with_statement']
>>> __future__.with_statement
_Feature((2, 5, 0, 'alpha', 1), (2, 6, 0, 'alpha', 0), 32768)
>>>

我个人在 Python 2.5 中大量使用 with_statement 已经一年多了,并且没有遇到任何问题。我还使用 Python 2.6 透明地运行该代码。他们在语言中清理了一些奇怪的极端情况,主要与干净且正确地压缩嵌套语句有关。

于 2009-12-16T16:46:04.543 回答