2016-08-18 17 views
0

Pythonモジュールをインポートする方法、具体的には相対的なインポートを明示的に使うか明示的に使うか(例えばhere)について多くの質問がありました。 Python Software Foundationが提案するインポートスタイルは、hereです。つまり、絶対インポートをお勧めします。Pythonモジュールの絶対インポートと相対インポート:matplotlibの例

私はmatplotlibを開発している人たちが何をしているのかを知っているので、私はこの質問を書いています。

この仮定を考えると、私は輸入のこの2種類の間の主要な/明白な違いを理解すると仮定すると、私はこのような何かを書くことmatplotlibのの開発者に影響を与え、それらの間のわずかな違いを理解することに興味がある:

import matplotlib 
import matplotlib.cbook as cbook 
from matplotlib.cbook import mplDeprecation 
from matplotlib import docstring, rcParams 
from .transforms import (Bbox, IdentityTransform, TransformedBbox, 
         TransformedPath, Transform) 
from .path import Path 

matplotlibモジュール(つまりmatplotlib.artist)に含まれるartist.pyの先頭です。私はmatplotlib-1.5.1を見ています。

モジュールmatplotlib.cbook,matplotlib.transformsおよびmatplotlib.pathに注目したいと思います。これらの3つはすべて純粋なPythonモジュールです(つまり、module_name.pyファイル)。

from .cbook import mplDeprecationではなくfrom matplotlib.cbook import mplDeprecationが選択されていますが、なぜfrom .path import Pathfrom matplotlib.path import Pathよりも優先されたのですか?

おそらく特別な理由はなく、これらの選択肢は異なる開発者の異なるスタイルを反映しているに過ぎません。おそらく私には何かがありません。

答えて

1

matplotlibのコードベースについて覚えておくべき重要なことは、それが非常に古く(2003年にgitの歴史を持ち、数年も失われています)、大規模(93k> Pythonの行、17k行のC++) 450人以上の寄稿者があります。

(2.xブランチのオフが、輸入はかなり安定している)のgit-非難を見て持って示しています

08:29 $ git blame matplotlib/artist.py | head -n 18 


5fca7e31 (Thomas A Caswell   2013-09-25 11:36:00 -0500 1) from __future__ import (absolute_import, division, print_function, 
5fca7e31 (Thomas A Caswell   2013-09-25 11:36:00 -0500 2)       unicode_literals) 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 3) 
07e22753 (Matthew Brett   2016-06-06 12:08:35 -0700 4) import six 
0ea5fff3 (Thomas A Caswell   2015-12-01 14:40:34 -0500 5) from collections import OrderedDict 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 6) 
453e0ece (Nelle Varoquaux   2012-08-27 23:16:43 +0200 7) import re 
453e0ece (Nelle Varoquaux   2012-08-27 23:16:43 +0200 8) import warnings 
731f6c86 (Michael Droettboom  2013-09-27 09:59:48 -0400 9) import inspect 
e1d30c85 (Jens Hedegaard Nielsen 2015-08-18 19:52:48 +0100 10) import numpy as np 
b44e8f20 (John Hunter    2008-12-08 23:28:55 +0000 11) import matplotlib 
99b89a87 (John Hunter    2008-06-03 20:28:14 +0000 12) import matplotlib.cbook as cbook 
c137a718 (Thomas A Caswell   2014-11-23 00:37:28 -0500 13) from matplotlib.cbook import mplDeprecation 
527b7d9a (Michael Droettboom  2010-06-11 18:17:52 +0000 14) from matplotlib import docstring, rcParams 
b2408c33 (Cimarron Mittelsteadt 2014-09-12 15:58:25 -0700 15) from .transforms import (Bbox, IdentityTransform, TransformedBbox, 
b2408c33 (Cimarron Mittelsteadt 2014-09-12 15:58:25 -0700 16)       TransformedPath, Transform) 
f4adec7b (Michael Droettboom  2013-08-14 10:18:10 -0400 17) from .path import Path 
f2a0c7ae (John Hunter    2007-03-20 21:48:31 +0000 18) 

あなたはこれらの行が最後に人の数(に触れたことがわかります明らかに私を含めて)。

私はこの違いをあまり読んでいませんが、ダイブしたい場合は、それらの変更に関するコミットメッセージを調べてみてください。

+0

私はそれが異なる開発者の味のためだと思います。おそらくあなたはあなたのことについて私たちに伝えることができます:なぜあなたは '.cbookから'ではなく 'matplotlib.cbook ...'を選んだのですか? – Gioker

+0

@Gioker正直に覚えていない。あなたが指摘しているように、pep8は絶対的な輸入を示唆しており、より明示的です。 – tacaswell

関連する問題