每个程序在更新版本之后,都会相较于上一个版本有所改动。这些改动会给程序的使用者造成不小的困扰!

比如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__的更多相关文章

  1. 【转】Python模块学习 - fnmatch & glob

    [转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...

  2. 【目录】Python模块学习系列

    目录:Python模块学习笔记 1.Python模块学习 - Paramiko  - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...

  3. Python模块学习filecmp文件比较

    Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...

  4. python模块学习第 0000 题

    将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...

  5. Python模块学习:logging 日志记录

    原文出处: DarkBull    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...

  6. 解惑Python模块学习,该如何着手操作...

    Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...

  7. Python模块学习

    6. Modules If you quit from the Python interpreter and enter it again, the definitions you have made ...

  8. Python模块学习系列

    python模块-time python模块-datetime python模块-OS模块详解

  9. Python模块学习遇到的问题

    Python使用import导入模块时报ValueError: source code string cannot contain null bytes的解决方案 Python使用import导入模块 ...

随机推荐

  1. python3开发进阶-Django框架的中间件的五种用法和逻辑过程

    阅读目录 什么是中间件 中间件的执行流程 中间件的逻辑过程 一.什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围 ...

  2. [SHOI2014]信号增幅仪

    题目大意: 平面直角坐标系中散落着n个点,一个椭圆的长半轴在对于x轴逆时针旋转α度的角度上,且长半轴是短半轴的k倍. 问短半轴至少要多长才能覆盖所有的点? 思路: 首先把坐标顺时针旋转α度,然后把所有 ...

  3. DELPHI黑客编程(一):正向后门原理实现

    前言 在渗透测试中经常用到远控.后门等辅助后渗透权限维持工具,有一款好用的自制后门可以在巩固渗透成果方面有很大的帮助.今天给大家简单讲解下后门的原理和实现的方法,主要针对技术研究和原理演示,请各位看官 ...

  4. ES6/ES2015核心内容(下)

    import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小工 ...

  5. 增强学习--Sarsa算法

    Sarsa算法 实例代码 import numpy as np import random from collections import defaultdict from environment i ...

  6. Linux程序编译链接动态库版本号的问题

    不同版本号的动态库可能会不兼容,假设程序在编译时指定动态库是某个低版本号.执行是用的一个高版本号,可能会导致无法执行. Linux上对动态库的命名採用libxxx.so.a.b.c的格式.当中a代表大 ...

  7. avro序列化详细操作

    Intellij 15.0.3 Maven avro 1.8.0 Avro是一个数据序列化系统. 它提供以下: 1 丰富的数据结构类型 2 快速可压缩的二进制数据形式 3 存储持久数据的文件容器 4 ...

  8. Docker解析及轻量级PaaS平台演练(二)--Docker的一些简单命令

    上一篇中,我们对Docker有了一个基本的了解 下面将讨论Docker中Image,Container的相关实际操作 Image管理: 镜像的命名和版本管理: 普通镜像的命名规范 {namespace ...

  9. g++ 链接静态库命令应该放在最后

    昨天编译去年写的FloorServer,居然一堆错误: chu@chu-laptop:/media/E/work/github/FloorServer/FloorServer$ makeg++ -g ...

  10. 如何让Firefox清除它记下的网站登录名和密码