2016-08-18 2 views
0

Было задано много вопросов относительно того, как импортировать модули Python, в частности, следует ли использовать абсолютный или явный относительный импорт (например, here). Стиль импорта, предложенный Python Software Foundation, можно найти here. Короче говоря, он рекомендует абсолютный импорт.Абсолютный и относительный импорт модулей Python: пример matplotlib

Я пишу этот вопрос, потому что я предполагаю, что ребята, которые разрабатывают matplotlib, знают, что они делают.

Учитывая это предположение, и предполагая, я понимаю основные/очевидные различия между этими двумя видами импорта, мне было бы интересно понять крошечные различия между ними, повлиявшие с разработчиками 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 

Это начало artist.py, содержащееся внутри модуля matplotlib (то есть matplotlib.artist). Я смотрю на matplotlib-1.5.1.

Я хотел бы обратить внимание на модули matplotlib.cbook, matplotlib.transforms и matplotlib.path. Все три из них представляют собой чистые модули Python (т. Е. module_name.py файлов).

Почему был выбран from matplotlib.cbook import mplDeprecation, а не from .cbook import mplDeprecation и почему from .path import Path был предпочтительно from matplotlib.path import Path?

Возможно, нет особой причины, и эти варианты просто отражают разные стили разных разработчиков; возможно, что-то мне не хватает.

ответ

1

Важная вещь, которую следует помнить о базе кода matplotlib, состоит в том, что она очень старая (история Git вернулась к 2003 году и потеряла еще несколько лет), большие (> 93k строк питона, 17k строк C++) и имеет более 450 участников.

Посмотрев на мерзавце вину (офф 2.x отрасли, но импорт довольно стабильный) показывает:

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

Хорошо, я полагаю, это связано только с вкусами разных разработчиков. Возможно, вы можете рассказать нам о себе: почему вы выбрали 'from matplotlib.cbook ...' вместо' from .cbook ... '? – Gioker

+0

@Gioker Я честно не помню. Как вы указываете, pep8 предлагает абсолютный импорт, и он более явный. – tacaswell

Смежные вопросы