2016-08-18 1 views
0

Viele Fragen wurden zum Importieren von Python-Modulen gestellt, speziell nach dem absoluten oder expliziten relativen Import (zB here). Der Import-Stil, wie von der Python Software Foundation vorgeschlagen, kann here gefunden werden. Kurz gesagt, es empfiehlt absoluten Import.Absoluter und relativer Import von Python-Modulen: ein Matplotlib-Beispiel

Ich schreibe diese Frage, weil ich annehme, dass die Leute, die Matplotlib entwickeln, wissen, was sie tun.

diese Annahme gegeben, und unter der Annahme, ich die großen/offensichtlichen Unterschiede zwischen diesen beiden Arten von Import verstehen, würde ich verstehen, die kleinen Unterschiede zwischen ihnen interessiert sein, dass die matplotlib-Entwickler, so etwas zu schreiben beeinflusst:

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 

Dies ist der Anfang von artist.py, enthalten in dem matplotlib Modul (dh matplotlib.artist). Ich schaue Matplotlib-1.5.1.

Ich möchte die Aufmerksamkeit auf die Module matplotlib.cbook, matplotlib.transforms und matplotlib.path konzentrieren. Alle drei sind reine Python-Module (d. H. module_name.py Dateien).

Warum wurde from matplotlib.cbook import mplDeprecation anstelle von from .cbook import mplDeprecation gewählt und warum wurde from .path import Path zu from matplotlib.path import Path vorgezogen?

Vielleicht gibt es keinen bestimmten Grund und diese Entscheidungen spiegeln nur verschiedene Stile von verschiedenen Entwicklern wider; vielleicht gibt es etwas, das mir fehlt.

Antwort

1

Eine wichtige Sache zu erinnern über die Matplotlib Code-Basis ist, dass es sehr alt ist (git Geschichte zurück zu 2003 haben und noch ein paar Jahre verloren), groß (> 93.000 Zeilen Python, 17k Zeilen von C++) und hat mehr als 450 Mitwirkende.

einen Blick auf git-Schuld zu haben (aus dem 2.x-Zweig, aber die Importe sind ziemlich stabil) zeigt:

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) 

Sie können sehen, dass diese Zeilen zuletzt durch eine Reihe von Menschen berührt wurden (scheinbar mich eingeschlossen) über eine Reihe von Jahren.

Ich würde nicht zu viel in diesen Unterschied lesen, aber wenn Sie tiefer tauchen wollen versuchen Sie, die Commit-Nachrichten auf diese Änderungen zu betrachten.

+0

Ok, ich nehme an, es ist nur wegen der unterschiedlichen Geschmacksrichtungen der Entwickler. Vielleicht kannst du uns dann etwas über deine sagen: Warum hast du 'von Matplotlib.cbook ...' anstatt von '.cbook ...' gewählt? – Gioker

+0

@Gioker Ich erinnere mich ehrlich gesagt nicht. Wie Sie darauf hinweisen, pep8 schlagen absolute Importe vor und es ist expliziter. – tacaswell

Verwandte Themen