这篇文章主要讲解了“absolute_import的作用是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“absolute_import的作用是什么”吧!
从字面意思,可以清晰的知道这个函数的作用是绝对路径导入,反之对应的就是相对路径。
绝对导入和相对导入之间的差异仅在从包导入模块和从包导入其他子模块时才起作用。拿下面的e.g.来说,在pkg下面有一个string.py
文件,与python标准库中的string模块同名
,里面的main.py
文件有引用string模块
,当我们从pkg包
开始导入main.py
的时候,如果没有absolute_import
,就会引用pkg
下的string模块
,反之,就会从顶层路径查找string标准库
。
liang@iZ250k0mjlbZ:~$ mkdir pkg
liang@iZ250k0mjlbZ:~$ touch pkg/__init__.py
liang@iZ250k0mjlbZ:~$ touch pkg/string.py
liang@iZ250k0mjlbZ:~$ echo 'import string;print(string.ascii_uppercase)' > pkg/main1.py
liang@iZ250k0mjlbZ:~$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg.main1.py
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pkg/main1.py", line 1, in <module>
import string;print(string.ascii_uppercase)
AttributeError: 'module' object has no attribute 'ascii_uppercase'
>>> import pkg.main1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pkg/main1.py", line 1, in <module>
import string;print(string.ascii_uppercase)
AttributeError: 'module' object has no attribute 'ascii_uppercase'
>>> import pkg.string
>>> exit()
liang@iZ250k0mjlbZ:~$ echo 'from __future__ import absolute_import;import string;print(string.ascii_uppercase)' > pkg/main2.py
liang@iZ250k0mjlbZ:~$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg.main2
ABCDEFGHIJKLMNOPQRSTUVWXYZ
>>> exit()
字面意思,可以简单的看出是针对于unicode编码
的,这个就涉及到python的编码历史问题了,python2默认是ascii编码,对于unicode编码
的字符串,必须在签名添加u
,e.g. u"测试",在python3解决了这个令人头疼的问题,默认编码采用了unicode编码
,此库的作用就是为了python2向python3过渡,一旦引入,当前文件下的编码默认就是unicode
,下面的例子直接展示了它的用途:
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import unicode_literals
>>> a=u"aaa"
>>> a
u'aaa'
>>> a="aaa"
>>> a
u'aaa'
>>>
感谢各位的阅读,以上就是“absolute_import的作用是什么”的内容了,经过本文的学习后,相信大家对absolute_import的作用是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4511602/blog/4825595