with statement - 用于Python 2.5的backport

时间:2009-12-16 16:37:52

标签: python with-statement backport

我想在一些生产代码中使用Python 2.5中的with语句。如果我预计会出现任何问题(例如其他机器上的可用性/兼容性等),它会被移植回来吗?

这是代码吗

from __future__ import with_statement

与Python 2.6兼容吗?

3 个答案:

答案 0 :(得分:7)

是的,该语句在Python 2.6中是无操作的,因此您可以自由地使用它在2.5代码中使with成为关键字,而不会影响代码在2.6中的操作。这实际上是Python中“从未来导入”的一般设计意图!

答案 1 :(得分:4)

你可以在没有问题的情况下在Python 2.6和3.0 / 1中调用它(这是一个no-op)。

答案 2 :(得分:3)

with_statement没有反向移植,而是在Python 2.5中实现。添加新关键字或语法可能会破坏现有应用程序使用Python,他们决定处理这个问题的方法是让人们尽早选择加入这些功能,这样你就可以慢慢地转换代码。

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

  

未来的陈述是指令   编译器即一个特定的模块   应该使用语法或编译   将在a中提供的语义   指定的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运行该代码。他们在语言清理方面有一些奇怪的角落案例,主要涉及干净利落地正确压缩嵌套语句。