импорт нескольких функций из модуля Python - PullRequest
35 голосов
/ 20 июля 2011

Я импортирую множество функций из модуля

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

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

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

from my_module import *

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

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

Ответы [ 4 ]

40 голосов
/ 20 июля 2011

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

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

import my_module

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

import my_long_module as m
19 голосов
/ 20 июля 2011

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

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
9 голосов
/ 20 июля 2011

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

my_module.py

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

def function1():
   ...

# etc...

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

0 голосов
/ 20 июля 2011

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

Подход псевдонимов Кугеля тоже подойдет, хотя я бы не советовал использовать псевдоним типа "m".: О)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...