• python的__future__模块


    作用

    __future__模块提供某些将要引入的特性

    2.7.5的__future__

    基本上是python3中的特性

    有以下内容

    In [1]: import __future__
    
    In [2]: __future__.
    __future__.CO_FUTURE_ABSOLUTE_IMPORT  __future__.all_feature_names
    __future__.CO_FUTURE_DIVISION         __future__.division
    __future__.CO_FUTURE_PRINT_FUNCTION   __future__.generators
    __future__.CO_FUTURE_UNICODE_LITERALS __future__.nested_scopes
    __future__.CO_FUTURE_WITH_STATEMENT   __future__.print_function
    __future__.CO_GENERATOR_ALLOWED       __future__.unicode_literals
    __future__.CO_NESTED                  __future__.with_statement
    __future__.absolute_import
    
    In [2]: __future__.

    可导入的功能有哪些?

    In [3]: import __future__
    
    In [4]: __future__.all_feature_names
    Out[4]:
    ['nested_scopes',
     'generators',
     'division',
     'absolute_import',
     'with_statement',
     'print_function',
     'unicode_literals']

    对应功能如下

    division 新的除法特性,本来的除号`/`对于分子分母是整数的情况会取整,但新特性中在此情况下的除法不会取整,取整的使用`//`。如下可见,只有分子分母都是整数时结果不同。

    In [1]: 3 / 5
    Out[1]: 0
    
    In [2]: 3 // 5
    Out[2]: 0
    
    In [3]: 3.0 / 5.0
    Out[3]: 0.6
    
    In [4]: 3.0 // 5.0
    Out[4]: 0.0
    
    In [5]: from __future__ import division
    
    In [6]: 3 / 5
    Out[6]: 0.6
    
    In [7]: 3 // 5
    Out[7]: 0
    
    In [8]: 3.0 / 5.0
    Out[8]: 0.6
    
    In [9]: 3.0 // 5.0
    Out[9]: 0.0

    print_function 新的print是一个函数,如果导入此特性,之前的print语句就不能用了。

    In [1]: print 'test __future__'
    test __future__
    
    In [2]: from __future__ import print_function
    
    In [3]: print('test')
    test
    
    In [4]: print 'test'
      File "<ipython-input-4-ed4b06bfff9f>", line 1
        print 'test'
                   ^
    SyntaxError: invalid syntax

    unicode_literals 这个是对字符串使用unicode字符

    In [1]: print '目录'
    鐩�綍
    
    In [2]: from __future__ import unicode_literals
    
    In [3]: print '目录'
    目录

    absolute_import 这个没有搞懂,如果我当前目录有一个sys.py,我用的时候总是会调用系统的sys。如果当前目录和sys.path的路径中都有一个foo,则都会调用当前目录下的foo。另外,我运行的方式都是 python filename.py的方式,而如果使用python -c "import filename"则又是另一种答案。这个问题还没有解决,搜到的最详细的讨论见http://bytes.com/topic/python/answers/596703-__future__-import-absolute_import

    nested_scopes 这个是修改嵌套函数或lambda函数中变量的搜索顺序,从`当前函数命名空间->模块命名空间`的顺序更改为了`当前函数命名空间->父函数命名空间->模块命名空间`,python2.7.5中默认使用

    generators 生成器,对应yield的语法,python2.7.5中默认使用

    with_statement 是使用with关键字,python2.7.5是默认使用

    运用

    首先是可以做个性化的用法,比如你喜欢用print()而不是print

    更重要的是基本用以下几句就可以让python2和python3有良好的兼容性了

    from __future__ import print_function
    from __future__ import unicode_literals
    from __future__ import division
    from __future__ import absolute_import

  • 相关阅读:
    牌库读取的修复
    法术迸发(Spellburst)
    传染孢子的探索
    降低电脑功耗——降低笔记本风扇噪音
    Playfield 类方法的注释
    大陆争霸( 最短路变形)
    POJ 2406 Power String
    括号匹配
    HDU 1003 最大子段和
    6.19noip模拟赛总结
  • 原文地址:https://www.cnblogs.com/ksedz/p/3190208.html
Copyright © 2020-2023  润新知