我正在用Python创建一个项目,该项目旨在能够在Python 2.7和Python 3下运行。我创建了一个类,很明显,在Python 3下,使用某些Python 3可以提供很好的功能。特定的功能。我不相信我可以在Python 2.7中复制相同的功能,并且也没有这样做。但是我打算让Python 3应用程序因此具有一些附加功能。
无论如何,我一直希望只要2.7应用程序从不调用使用3.x功能的函数,我就可以了。但是,不会,因为代码的存在会在2.7中产生编译时错误,因此尽管该函数从未在运行时被调用,但它还是会吐出虚拟对象。而且由于Python缺少任何编译时保护程序,所以我不能完全确定最佳解决方案是什么。
我想我可以创建MyClass的子类,将其称为MyClass3,将其放在另一个模块中,然后在其中添加其他功能。但这使很多事情变得更加复杂...基于sys.version_info的更多拆分代码路径,循环包含问题,除非我进行了大量文件拆分和...(挥手)。这样很烂。但这也许是唯一可用的选择吗?
编辑: 最初的问题涉及“收益”,这就是为什么下面的答案对此进行了讨论。但是最初的问题实际上并不是在寻求有关如何在2.7中获得“收益”的建议,但主持人似乎认为这是问题所在,因此将其标记为重复。
碰巧,正如我编辑问题以将其重点放在组织项目以避免编译错误(并删除对“ yield from”的引用)的问题上一样,出现了一个答案,该问题引用了issue的收益和原来是超级有用的。
答案 0 :(得分:1)
yield from
已在以下模块中反向移植到Python 2.7:yieldfrom
。
还有一个关于implementing yield from
functionality back to python 2的SO问题,以及关于同一主题的blog post也可能有用。
AFAIK,该功能没有正式的反向移植,因此没有人会期望像from __future__ import yieldfrom
这样的东西(如果没有其他说明,请更正)。