python模块学习之__future__
每个程序在更新版本之后,都会相较于上一个版本有所改动。这些改动会给程序的使用者造成不小的困扰!
比如python2.xx和3.xx的改动,足够让新手们头大了!
在3中,
u'xxx'和'xxx'都是字符串类型(3中将type关键字换成了class,头疼!)
b'xxx'表示字节类型
在2中,
u'xxx'类型为Unicode,b'xxx'和'xxx'是str类型,这里尤其要注意,2中的str表示字节类型。
真是头昏!每次都要注意3和2的区别!
于是,__future__模块就出现了!对于3和2文字类型的改动,只需要在模块最开始加上:
from __future__ import unicode_literals
之后就不用担心2和3会出现文字相关的错误了!
29.10. __future__-未来声明定义
Source code: Lib/__future__.py
__future__是一个真实的模块,用来实现三个目的。
1.避免混淆现有的工具,分析导入语句,并期望找到他们正在导入的模块
2.至少确保以后的语句运行在2.1版本之后(2.1版本之前没有futrue模块,导入会出现失败)
3.记录不兼容的变更,以及何时被强制执行。 这是一种可执行文档的形式,可以通过导入__future__并检查其内容来以编程方式进行检查
__future__.py中的每个语句的格式如下:
FeatureName = _Feature(OptionalRelease, MandatoryRelease,
CompilerFlag)
其中,正常情况下,可选版本小于强制版本,并且都是与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预测该功能将成为该语言一部分的版本。
Else MandatoryRelease记录功能成为语言的一部分;在或之后的版本中,模块不再需要将来的声明来使用相关功能,但可能会继续使用此类导入。
MandatoryRelease也可以是None,这意味着计划的功能被删除。
class _Feature的实例有两个相应的方法:getOptionalRelease()和getMandatoryRelease()。
CompilerFlag是应该在第四个参数中传递给内置函数compile()的(位域)标志,以便在动态编译代码中启用该功能。该标志存储在_Feature实例的compiler_flag属性中。
__future__中不会删除任何功能说明。自从Python 2.1引入以来,以下功能已经使用这种机制进入语言:
功能 可选 强制性 功能
nested_scopes 2.1.0b1 2.2 PEP :静态嵌套范围
generators 2..0a1 2.3 PEP :简单发电机
division 2..0a2 3.0 PEP :改变司机操作员
absolute_import 2.5.0a1 3.0 PEP :导入:多行和绝对/相对
with_statement 2.5.0a1 2.6 PEP :“with”声明
print_function 2.6.0a2 3.0 PEP :打印功能
unicode_literals 2.6.0a2 3.0 PEP :Python 3000中的字节文字
generator_stop 3.5.0b1 3.7 PEP :发生器内的StopIteration处理
也可以看看
未来声明
编译器如何处理未来的导入。
python模块学习之__future__的更多相关文章
- 【转】Python模块学习 - fnmatch & glob
[转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...
- 【目录】Python模块学习系列
目录:Python模块学习笔记 1.Python模块学习 - Paramiko - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...
- Python模块学习filecmp文件比较
Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...
- python模块学习第 0000 题
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...
- Python模块学习:logging 日志记录
原文出处: DarkBull 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...
- 解惑Python模块学习,该如何着手操作...
Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...
- Python模块学习
6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...
- Python模块学习系列
python模块-time python模块-datetime python模块-OS模块详解
- Python模块学习遇到的问题
Python使用import导入模块时报ValueError: source code string cannot contain null bytes的解决方案 Python使用import导入模块 ...
随机推荐
- 【kruscal】【最小生成树】【块状树】bzoj3732 Network
跟去年NOIP某题基本一样. 最小生成树之后,就变成了询问连接两点的路径上的权值最大的边. 倍增LCA.链剖什么的随便搞. 块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权 ...
- oop 知识点回顾
1.抽象,封装 2.继承:连接类的层次模型,并且允许类的重用,提供共性的方法,从现有的类派生(方法的重写,扩展) 派生:新类继承了基类,那么新类就是派生类,适合更合适的需要 3.多态:允许不同的类的对 ...
- Bean的装配方式
(一) 知识点:Spring容器支持多种形式的Bean的装配方式,比如基于XML的装配,基于注解的装配和自动装配(最常用的就是基于注解的装配) Spring提供了两种基于xml的装配方式:设值注入(S ...
- SQL Server Wait Types Library
https://www.sqlskills.com/blogs/paul/announcing-the-comprehensive-sql-server-wait-types-and-latch-cl ...
- JavaEE学习路线图
http://www.cnblogs.com/gaoming7122/archive/2012/11/20/2778308.html
- 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...
- Inno Setup入门(一)——最简单的安装脚本
地址:http://379910987.blog.163.com/blog/static/3352379720110238252326/ 一个最简单的安装脚本: 1.最简单的安装文件脚本: [setu ...
- Oracle审计--AUD$占用空间较大处理方案
Oracle 11G以后,数据库默认是开启审计功能的,因此有时候我们忘记了关闭该功能导致SYSTEM表空间暴满,但由于关闭审计功能需要重启数据库,此类操作生产环境下是不允许的,因此我们需要找出哪类审计 ...
- Oracle导入本属于sys用户的表
FlashBack Database后,将删除的数据导出时使用了system用户 exp system/oracle file=/home/oracle/test.dmp tables=sys.tes ...
- iOS:XMPP即时聊天知识
XMPP即时聊天框架:XMPPFramework XMPP The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). 基于XML XM ...