xor*_*xor 16 python python-2.7
规格:Python 2.7
我正在开发一个包含多个模块的项目,我想在所有模块中激活__future__模块中的一些功能.我想在一个模块上导入我需要的所有功能,然后将该单个模块导入到所有其他模块中,并使这些功能在所有模块中都处于活动状态,或者具有相应的效果.
我试过了:
[A.py]
from __future__ import division
Run Code Online (Sandbox Code Playgroud)
[B.py]
import A
print(1/2)
Run Code Online (Sandbox Code Playgroud)
运行B.py分区仍然是整数.我试过了:
[A.py]
print(1/2)
Run Code Online (Sandbox Code Playgroud)
[B.py]
from __future__ import division
import A
Run Code Online (Sandbox Code Playgroud)
运行B.py给出了相同的结果.在前面两个例子中,我也尝试用'from a import*'切换'import A',结果相同.
我搜索了Google一段时间,并在Python文档中找到了关于__future__模块如何工作的最佳描述.在那里,我只能找到确保功能在导入模块中处于活动状态的保证,而没有提及如何在全局范围内执行此功能.
所以我想知道是否有这样做的方式,无论是我描述的方式,还是创建某种运行时配置文件,或通过其他方式.
aba*_*ert 15
用语言无法做到这一点; __future__
从这个意义上讲,你真的不能让进口全球化.(好吧,你可能可以import
用一些复杂的东西替换正常的语句imp
.看看Future语句文档并向下滚动到"由......编译的代码"但是这样的事情几乎肯定是个坏主意.)
原因是这from __future__ import division
不是一个正常的导入.或者说,它不仅仅是正常的导入.实际上,您确实获得了一个division
可以检查的名称,但只是具有该值无效 - 因此将其传递给其他模块不会影响这些模块.除了正常导入之外,Python还具有特殊的魔力,可以检测__future__
模块顶部或交互式解释器中的导入,并更改代码编译的方式.见未来 "真正的进口"的一部分,未来的陈述为"神奇"的一部分,如果你想所有的细节.
而且没有配置文件可以让你这样做.但是有一个命令行参数:
python -Qnew main.py
Run Code Online (Sandbox Code Playgroud)
这与在任何from __future__ import division
地方做同样的效果.
您可以将它添加到#!
行中,或者alias pyfuturediv='python -Qnew'
(或者甚至alias python='python -Qnew'
)添加到shell中,或者其他任何内容,这可能与配置文件一样好.
不过说真的,如果你想确保模块B获取新的风格划分,你可能应该有__future__
摆在首位B中声明.
或者,当然,您可以编写Python 3.0+而不是2.3-2.7.(请注意,一些核心开发人员反对使用命令行参数,因为"全局获取X特征的正确方法是使用Python的一个版本> = feature X的MandatoryRelease".)或者//
在你的意思使用时//
.
另一种可能性是使用六个模块,这个模块旨在让您编写几乎Python 3.3的代码,并使其在2.4-2.7(和3.0-3.2)中正常工作.例如,你没有得到一个print
函数,但你确实得到了一个print_
完全相同的函数.你没有获得Unicode文字,但你得到u()
假文字 - 它与源中的UTF-8编码声明一起,几乎足够好.它提供了一大堆的东西,你不能从获得__future__
的良好StringIO
和BytesIO
,exec
作为一个功能,该next
功能等
如果问题是你有1000个源文件,并且编辑它们很痛苦,你可以使用sed
,或只使用3to2
修复除法的选项,或者......
归档时间: |
|
查看次数: |
3081 次 |
最近记录: |