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 次 |
| 最近记录: |