py: from __future__ import 介绍

__future__模块的作用

  • __future__ 模块用于在当前版本py编译器中引入更高版本py的功能
  • 该语句必须写在首行
  • Python2.1之后的版本才支持该模块

python每个版本都会做一些改进,并且大多不是向后兼容的,这时候就需要修改旧代码使其符合新Python版本要求。但是如果整个项目的代码都做迁移是非常麻烦的事情。当需要使用新版本的某些特性时,我们不妨在原有代码的基础上引入该特性,这样就能降低代码的改动量,这时就需要用到__future__模块,它支持在旧的Python中引入更新版本的功能。所以从某种意义上来说,Python是一门向后兼容的语言。
使用方式

from __future__ import xxx

print_function

在py2中,print并不是一个函数,使用它是不需要加括号的。
但在py3中,print是一个函数,调用方式跟一般的py函数一致,需要加括号

print 'error'
------------
OUT:
  File "<ipython-input-2-58dc6da12e84>", line 1
    print 'error'
                ^
SyntaxError: Missing parentheses in call to 'print'

如果要让py2中的print也需要加括号,那么就需要写入如下语句,引入py3中的print_function

from __future__ import print_function

absolute_import

首先我们假定你的Python项目结构如下:

pak/
pak/main.py
pak/str.py
pak/mystr.py
pak/xml.py

包引用的三种格式

  • absolute_import
    如果你在main.py文件中写入如下调用:

    from pak import str
    import pak.str
    import mystr

    一般都是绝对引用,因为你的包名pak一般来说不会有冲突

  • relative import
    如果是这样:

    import str
    import xml
    import mystr

    就看不出来包的隶属关系,如果你的py环境是2.4或者之前的版本,那么它是首先从当前脚本main.py所在文件夹下搜索是否有str,xml,mystr之类的包的,这样就会跟py系统自带的str,xml包冲突,从而将其覆盖。
    在2.5,2.6版本中,可以使用from __future__ import absolute_import来解决该问题,也就是从更高Python版本中引入绝对引用,从而强制默认绝对引用。
    2.7以后的版本都是默认绝对引用。

  • 显式相对引用

    from . import str
    from . import xml
    from . import mystr

    如果懒得像绝对引用那样写出包名,有要避免引用的包覆盖系统默认包,可以如上述写法。如果有多级文件夹,那么就多几个点,但一般而言不建议二级以上的点,也就是到

    from .. import xxx

    就差不多了,再多加几个点就很影响代码可读性了。

猜你喜欢

转载自blog.csdn.net/u010137742/article/details/80375255
今日推荐