美文网首页
absolute_import, unicode_literal

absolute_import, unicode_literal

作者: wowshiwoniu | 来源:发表于2018-09-29 17:47 被阅读0次

    传送门:原文参考路径

    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_literals 作用

    字面意思,可以简单的看出是针对于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, unicode_literal

          本文链接:https://www.haomeiwen.com/subject/gtdboftx.html