什么是 __future__ 模块 ?【python量化编程必读!】
UID 2 积分 2892307 威望 1396185 布 龙e币 1496122 刀 在线时间 13313 小时 注册时间 2009-12-3 最后登录 2024-12-25
什么是 __future__ 模块 ?【python量化编程必读!】
前言
不知道大家有没有注意到 python 有一个 __future__ 模块,如果大家有人看开源项目兼容 py2 和 py3 的话,它们的源代码中会经常出现这个模块,那么这个模块究竟有什么作用呢?
__future__
关于 __future__ 的作用,官方文档中也有明确提到,让我们看一下:
_future_ is a real module, and serves three purposes:
1. To avoid confusing existing tools that analyze import statements and expect to find the modules they’re importing.
2. To ensure that future statements run under releases prior to 2.1 at least yield runtime exceptions (the import of __future__ will fail, because there was no module of that name prior to 2.1).
3. To document when incompatible changes were introduced, and when they will be — or were — made mandatory. This is a form of executable documentation, and can be inspected programmatically via importing __future__ and examining its contents.
翻译过来大致意思如下:
为了避免混淆现有工具,分析import语句和期望找到他们要导入的模块。
确保2.1之前的版本导入 __future__产生运行时异常,因为2.1之前没有这个模块
记录何时引入了不兼容的更改,以及何时将其强制执行。 这是一种可执行文档,可以通过导入 __future__进行可编程式检查。
其实总结起来很简单, python 在新版本会引入某些新的功能特性,但是有的时候有些改动是不兼容旧版本的,举个例子说,比如你的项目是用的是 py2.7,现在你需要迁移到 3.x 版本,直接升级到 3.x 肯定是不行的,那怎么办呢?这个时候就需要用到 _future_ 了,我们可以通过 __future__导入新版本某些模块,测试新版本的新功能,等测试成功后再升级到新的版本上.
例子
说完了,我们举个最典型的例子, print, 使用过 py2.7 和 py3.x 的小伙伴肯定都知道,在 3.x 的时候,print 成了一下函数,那么让我们在 py2.7 通过 __future__ 感受一下
除了 print,还有其他不少类似的,在官方文档中都有提及到,我这里就简单截个图,有兴趣的可以自己去官网研究一下
参考1:https://docs.python.org/3.6/libr ... _#module-__future__
参考2:https://stackoverflow.com/questi ... it-and-how-it-works
说白了就是将新版本的特性导入到当前版本,官方文档就不是写给初学者看的
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
期货论坛 - 版权/免责声明
1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易 。
2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
UID 2 积分 2892307 威望 1396185 布 龙e币 1496122 刀 在线时间 13313 小时 注册时间 2009-12-3 最后登录 2024-12-25
UID 2 积分 2892307 威望 1396185 布 龙e币 1496122 刀 在线时间 13313 小时 注册时间 2009-12-3 最后登录 2024-12-25
Python 中的 __future__ 用来做什么,如何使用/何时使用,以及如何工作
__future__ 经常出现在 Python 模块中。即使阅读了 Python 的 __future__ 文档,我也不明白 __future__ 是做什么用的,以及如何/何时使用它。
有人能举例说明吗?
我得到的一些关于 __future__ 基本用法的答案似乎是正确的。
但是,我还需要了解 __future__ 的工作原理:
最让我困惑的概念是当前的 Python 版本如何包含未来版本的特性,以及使用未来版本特性的程序如何在当前版本的 Python 中编译成功。
我猜测当前版本打包了未来版本的潜在功能。但是,这些特性只有通过使用 __future__ 才能使用,因为它们不是当前的标准。如果我是对的,请告诉我。
本帖隐藏的内容需要回复才可以浏览
UID 2 积分 2892307 威望 1396185 布 龙e币 1496122 刀 在线时间 13313 小时 注册时间 2009-12-3 最后登录 2024-12-25
29.10. __future__ - 未来语句定义
源代码 Lib/__future__.py
__future__ 是一个真正的模块,有三个作用:
避免混淆现有的工具,这些工具会分析导入语句,并期望找到它们要导入的模块。
确保在 2.1 之前的版本中运行 future 语句至少会产生运行时异常(导入 __future__ 将失败,因为在 2.1 之前没有这个名字的模块)。
记录何时引入了不兼容的变更,以及这些变更何时将被强制执行。这是一种可执行的文档形式,可以通过导入 __future__ 并检查其内容来进行编程检查。
__future__.py中的每条语句都是这样的形式:
FeatureName = _Feature(OptionalRelease,MandatoryRelease,CompilerFlag),其中,OptionalRelease 通常小于 MandatoryRelease,并且两者都是与 sys.version_info 格式相同的 5 元组:
(PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
PY_MINOR_VERSION, # the 1; an int
PY_MICRO_VERSION, # the 0; an int
PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
PY_RELEASE_SERIAL # the 3; an int
)
OptionalRelease 记录功能被接受的第一个版本。
在 MandatoryRelease 尚未发生的情况下,MandatoryRelease 将预测该功能成为语言一部分的版本。
否则 MandatoryRelease 会记录该特性成为语言一部分的时间;在该时间或之后的版本中,模块不再需要 future 语句来使用相关特性,但可以继续使用此类导入。
MandatoryRelease 也可以是 None,这意味着计划中的特性被放弃了。
类 _Feature 的实例有两个相应的方法:getOptionalRelease() 和 getMandatoryRelease()。
CompilerFlag 是内置函数 compile() 的第四个参数传递的(位域)标志,用于在动态编译代码中启用功能。该标志存储在 _Feature 实例的编译器_flag 属性中。
任何特性描述都不会从 __future__ 中删除。自从在 Python 2.1 中引入该机制以来,下列特性已通过该机制进入了 Python 语言:
本帖隐藏的内容需要回复才可以浏览
UID 2 积分 2892307 威望 1396185 布 龙e币 1496122 刀 在线时间 13313 小时 注册时间 2009-12-3 最后登录 2024-12-25
使用方法:from __future__ import print_function, absolute_import 复制代码