absolute_import作用
2758 ワード
文字通り、この関数の役割は絶対パスインポートであり、逆に対応するのが相対パスであることが明らかになった.
絶対インポートと相対インポートの違いは、パッケージからモジュールをインポートする場合と、パッケージから他のサブモジュールをインポートする場合にのみ機能します.下のe.g.では、pkgの下に
unicode_literals作用
文字通り、
絶対インポートと相対インポートの違いは、パッケージからモジュールをインポートする場合と、パッケージから他のサブモジュールをインポートする場合にのみ機能します.下の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'
>>>