Ответ 1
Это действительно не имеет значения, если вы не from ... import *
. Остальное - все вкусы и проблемы циклического импорта. PEP 8 заявляет, что вы должны импортировать в верхней части script, но даже это не задано в камне.
Может ли кто-нибудь предложить мне, какой самый пифонический способ импорта модулей в python? Позвольте мне объяснить - я прочитал много кода на Python и нашел несколько разных способов импорта модулей или, если быть более точным, - когда импортировать:
Пожалуйста, найдите образцы ниже.
#references.py
import re
import clr
import math
import System
import System.Text.RegularExpressions
import System.Random
import System.Threading
import System.DateTime
# System assemblies
clr.AddReference("System.Core")
clr.AddReference("System.Data")
clr.AddReference("System.Drawing")
...
#test.py
from references.syslibs import (Array, DataTable, OleDbConnection, OleDbDataAdapter,
OleDbCommand, OleDbSchemaGuid)
def get_dict_from_data_table(dataTable):
pass
from ... import ...
from ... import ...
def Generate(param, param1 ...):
pass
import clr
clr.AddReference("assembly")
from ... import ...
...
def generate_(txt, param1, param2):
from ... import ...
from ... import ...
from ... import ...
if not cond(param1): res = "text"
if not cond(param2): name = "default"
Итак, каков самый пифонический способ импорта модулей в python?
Это действительно не имеет значения, если вы не from ... import *
. Остальное - все вкусы и проблемы циклического импорта. PEP 8 заявляет, что вы должны импортировать в верхней части script, но даже это не задано в камне.
Люди уже прокомментировали основные проблемы стиля (вверху script и т.д.), поэтому я пропущу это.
Для моего импорта я обычно заказываю их в алфавитном порядке по имени модуля (независимо от того, импортируется ли он или из... import...). Я разбил его на группы: стандартные библиотеки lib, сторонние модули ( от pypi или другого), внутренние модули.
import os
import system
import twisted
import zope
import mymodule_1
import mymodule_2
Python "import" загружает модуль Python в собственное пространство имен, поэтому вам нужно добавить имя модуля, за которым следует точка перед ссылками на любые имена из импортированного модуля
import animals
animals.Elephant()
"from" загружает модуль Python в текущее пространство имен, чтобы вы могли ссылаться на него без необходимости упоминания имени модуля снова
from animals import Elephant
Elephant()
или
from animals import *
Elephant()
используя это хорошо, (но использование импорта подстановочных знаков обескураживает). но если у вас большой проект с масштабированием, импорт из разных модулей может привести к ограничению имен. Подобно импорту Функция Elephant() из двух разных модулей вызовет проблему (например, с помощью импорта подстановочных знаков с *)
Итак, если у вас большой масштабный проект, в котором вы импортируете множество разных вещей из других модулей, лучше использовать импорт и использование импортированных вещей с помощью module_name.your_class_or_function. В противном случае используйте нотацию...
Не используйте from module import *
. Это будет загрязнять пространство имен и сильно осуждается. Однако вы можете импортировать определенные вещи, используя; from module import something
. Это упрощает пространство имен. В больших проектах, если вы используете подстановочный знак, вы можете импортировать 2 foo или 2 бар в одно и то же пространство имен.
PEP 8 говорит о наличии импорта в отдельных строках. Например:
import os
import sys
import yourmodule
from yourmodule import specific_stuff
Одна вещь, которую я делаю, - это перевести свой импорт в две группы. Один из них - std/third party, а второй - внутренние модули.