• 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 227:静态嵌套范围
    generators 2.2.0a1 2.3 PEP 255:简单发电机
    division 2.2.0a2 3.0 PEP 238:改变司机操作员
    absolute_import 2.5.0a1 3.0 PEP 328:导入:多行和绝对/相对
    with_statement 2.5.0a1 2.6 PEP 343:“with”声明
    print_function 2.6.0a2 3.0 PEP 3105:打印功能
    unicode_literals 2.6.0a2 3.0 PEP 3112:Python 3000中的字节文字
    generator_stop 3.5.0b1 3.7 PEP 479:发生器内的StopIteration处理

    也可以看看

    未来声明
         编译器如何处理未来的导入。

     

  • 相关阅读:
    mongodb基本操作,CRUD
    java客户端验证https连接(忽略证书验证和证书验证两种方式)
    学习计划
    Javascript中Generator(生成器)
    JS
    mysql把一字段拆分为多行
    5个最优秀的微信小程序UI组件库
    rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290
    centos7.2 apache开启.htaccess
    centos 7.2 安装apache,mysql,php5.6
  • 原文地址:https://www.cnblogs.com/leomei91/p/7217399.html
Copyright © 2020-2023  润新知