from __future__ import absolute_import的作用
关于这句from __future__ import absolute_import
的作用:
直观地看就是说”加入绝对引入
这个新特性”。说到绝对引入
,当然就会想到相对引入
。那么什么是相对引入
呢?比如说,你的包结构是这样的:
pkg/
pkg/init.py
pkg/main.py
pkg/string.py
如果你在main.py中写import string
,那么在Python 2.4或之前, Python会先查找当前目录下有没有string.py, 若找到了,则引入该模块,然后你在main.py中可以直接用string了。如果你是真的想用同目录下的string.py那就好,但是如果你是想用系统自带的标准string.py呢?那其实没有什么好的简洁的方式可以忽略掉同目录的string.py而引入系统自带的标准string.py。这时候你就需要from __future__ import absolute_import
了。这样,你就可以用import string
来引入系统的标准string.py, 而用from pkg import string
来引入当前目录下的string.py了
from __future__ import unicode_literals作用
① Python的每个新版本都会增加一些新的功能,或者对原来的功能作一些改动。有些改动是不兼容旧版本的,也就是在当前版本运行正常的代码,到下一个版本运行就可能不正常了
② 从Python 2.7到Python 3.x就有不兼容的一些改动,比如2.x里的字符串用'xxx'
表示str,Unicode字符串用u'xxx'
表示unicode,而在3.x中,所有字符串都被视为unicode,因此,写u'xxx'
和'xxx'
是完全一致的,而在2.x中以'xxx'
表示的str就必须写成b'xxx'
,以此表示“二进制字符串”。
要直接把代码升级到3.x是比较冒进的,因为有大量的改动需要测试。相反,可以在2.7版本中先在一部分代码中测试一些3.x的特性,如果没有问题,再移植到3.x不迟。
③ Python提供了__future__
模块,把下一个新版本的特性导入到当前版本,于是我们就可以在当前版本中测试一些新版本的特性。举例说明如下:
④ 为了适应Python 3.x的新的字符串的表示方法,在2.7版本的代码中,可以通过unicode_literals
来使用Python 3.x的新的语法:在python3中默认的编码采用了unicode, 并取消了前缀u. 如果代码要兼容python2/3