Подтвердить что ты не робот

Импорт нескольких функций из модуля Python

Я импортирую много функций из модуля

Лучше ли использовать

from my_module import function1, function2, function3, function4, function5, function6, function7

который немного запутан, но позволяет избежать наводнения текущего пространства имен всем, что от этого модуля, или

from my_module import *

Что выглядит аккуратно, но заполнит пространство имен всем, что из этого модуля.

Невозможно найти что-либо в PEP8 о том, какой предел для того, сколько вы должны импортировать по имени. Что лучше и почему?

4b9b3361

Ответ 1

Если вам действительно нужно много функций, вы уже загрязняете свое пространство имен.

Я бы предложил:

import my_module

Или, если my_module имеет длинное имя, используйте псевдоним:

import my_long_module as m

Ответ 2

Если это между тем или другим, используйте

from my_module import function1, function2, function3, function4, function5, function6, function7

См. "Явное лучше, чем неявное". в import this.

Если вам просто требуется более короткое имя, чем my_module.function1, всегда есть import my_module as mod.

Для нескольких функций, которые вы используете много раз (либо много раз, чтобы получить короткое имя, либо в цикле, так что скорость доступа важна), есть

func1 = my_module.function1

Ответ 3

С небольшим количеством управления вы можете контролировать импорт импорта *. Скажем, у вашего my_module есть функция1..функция8, но вы хотите только сделать доступными функции с 1 по 6. В своем my_module переназначьте атрибут __all__:

my_module.py

__all__ = ['function1', 'function2', 'function3' ...]

def function1():
   ...

# etc...

Теперь, если вы используете from my_module import *, вы импортируете только те функции и переменные, которые вы определили в атрибуте __all__, из my_module.py.

Ответ 4

Я предлагаю вам решить проблему, разделив ваш модуль, соответствующим образом группируя функции и помещая их в отдельные модули.

Подход псевдонимов Kugel тоже хорош, хотя я бы не стал использовать псевдоним типа "m".: О)