Структурирование повторяющихся операторов импорта в python - PullRequest
1 голос
/ 21 мая 2019

У меня есть проекты на Python со многими скриптами .py.Большинство сценариев имеют много похожих похожих операторов импорта.Каково общее соглашение структурирования такого импорта?

  1. Будут ли они повторяться в каждом из файлов .py?
  2. Будут ли они все перечислены в отдельном файле и будет ли этот файл импортирован в каждый из файлов .py?

Если это поможет, мой импорт выглядит так, и есть еще несколько.

import datetime
import logging
import random
import sys
import os
import operator
import warnings

import json
import numpy as np
import parseJSON
import pandas as pd


 from sklearn.svm import SVC
 from sklearn import svm
 from sklearn import linear_model

 from sklearn.linear_model import LogisticRegression
 from sklearn.ensemble import GradientBoostingClassifier
 from sklearn.tree import DecisionTreeClassifier
 from sklearn.ensemble.forest import RandomForestClassifier
 from sklearn.ensemble import BaggingClassifier

 from sklearn.multiclass import OneVsRestClassifier
 from sklearn.linear_model import SGDClassifier
 from sklearn import neighbors
 from sklearn.ensemble import RandomForestClassifier
 from sklearn import metrics
 from sklearn.svm import SVC
 from sklearn.naive_bayes import GaussianNB
 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
 from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
 from sklearn.metrics import accuracy_score
 from sklearn.neighbors import KNeighborsClassifier
 from sklearn.svm import SVC
 from sklearn.tree import DecisionTreeClassifier
 from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier
 from sklearn.preprocessing import LabelEncoder

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Я бы посоветовал разместить импорт, который необходим файлу в этом файле.Если модуль оказывается нужным в нескольких файлах - это нормально.Python загружает модуль только один раз.Единственное, что мне показалось заслуживающим того, чтобы тот же модуль был импортирован в мой пользовательский модуль, а main (main также импортирует мой настраиваемый модуль api) - это проверка исключений:

В моем api.py есть import pycurl Мой основной.py имеет import api А также он имел import pycurl

Я смог идентифицировать исключения Pycurl, такие как

...
except pycurl.error as e:

Позже я удалил импорт pycurl из моего main.py Ивышеуказанный код больше не работает.Вместо этого я должен был сделать:

...
except api.pycurl.error as e:

Надеюсь, это поможет

Редактировать: У вас много импортов из sklearn, а некоторые повторяются.Хотя это и не критично, это ухудшает читабельность вашего кода.Возможно, вам следует просто самостоятельно импортировать sklearn и позже вызывать его компоненты в коде, например sklearn.naive_bayes.GaussianNB, это будет иметь дополнительное преимущество, показывая, какие объекты принадлежат sklearn в коде, за счет немного большего набора текста.

1 голос
/ 21 мая 2019

Источником таких вещей является руководство по стилю PEP 8 .Для вашей ситуации есть подраздел для импорта , который гласит следующее (выделено мое):

Импорт должен быть сгруппирован в следующем порядке:

Стандартный импорт библиотеки.Связанный импорт третьей стороны.Локальный импорт приложений / библиотек.Вы должны поставить пустую строку между каждой группой импорта.

Рекомендуется абсолютный импорт , так как они обычно более читабельны и ведут себя лучше ...

Что означало бы, что передовой практикой является выполнение действий, указанных в варианте (1).

В качестве анекдота, если мне (или вам) придется отредактировать один из ваших файлов .py в будущем,Я хочу видеть каждый импорт в ожидаемом формате, поэтому я знаю зависимости независимо от того, какой файл скрипта я открываю

...