absolute_import作用

2758 ワード

文字通り、この関数の役割は絶対パスインポートであり、逆に対応するのが相対パスであることが明らかになった.
絶対インポートと相対インポートの違いは、パッケージからモジュールをインポートする場合と、パッケージから他のサブモジュールをインポートする場合にのみ機能します.下の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 "", line 1, in 
  File "pkg/main1.py", line 1, in 
    import string;print(string.ascii_uppercase)
AttributeError: 'module' object has no attribute 'ascii_uppercase'
>>> import pkg.main1
Traceback (most recent call last):
  File "", line 1, in 
  File "pkg/main1.py", line 1, in 
    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の符号化履歴の問題に関連している.python 2のデフォルトはascii符号化であり、unicode の文字列については、署名にu,e.g.u「テスト」を追加しなければならない.python 3でこの悩ましい問題を解決し、デフォルト符号化はunicode を採用している.このライブラリの役割はpython 2からpython 3への移行であり、導入されると、現在のファイルの符号化のデフォルトは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'
>>>