python 3 импортировать весь пакет против одной части - PullRequest
2 голосов
/ 07 мая 2020

Я читал о разнице между from … import и import ... в python 3.6. после многократного поиска я не могу найти ответа на свой c вопрос.

Посмотрите на следующий пример:

from urllib import request

import urllib

1) Они равны? Я предполагаю, что в основном c означает на английском языке sh, что первый импортирует только request, а секунды импортируют все, что находится внутри urllib, включая request и многие другие. Я прав?

2) I 1 верно, предположим, моя программа python использует только request из urllib, будет ли у них какое-либо преимущество в производительности при использовании первого вместо второго?

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Это почти полностью зависит от контекста, руководства по стилю (например, руководство по стилю Google определяет это ) и разработчика, но есть некоторые рекомендации, которым я лично следую.

  1. Если имя импортируемых функций может иметь более одного значения, используйте стиль import module. Например, если у модуля есть имя типа select(), это может означать многое. Если он поступает из библиотеки sql, это может быть оператор выбора, я также видел, что такое же имя используется в библиотеках, которые принимают пользовательский ввод et c. В основном следуйте Дзен из python

    Явное лучше, чем неявное

  2. Если в вашем зависимости / стандартная библиотека. Например, в модулях math и secrets есть функция, называемая выбором, но только модуль в модуле secrets предназначен для использования в криптографии, поэтому лучше import secrets и использовать secrets.choice или math.choice вместо этого, чтобы вы знали, что используете.
  3. Если вы (или ваша команда) используете другую терминологию, может быть лучше использовать from module import function as blah. Если эта терминология последовательна, это может быть хорошим способом организации импорта. Например, если ваша команда всегда обращается к random.randint как randy, вы можете сделать from random import randint as randy (это плохой пример, это просто то, о чем я подумал в своей голове), хотя это означает, что любой за пределами вашей организации будет не обязательно понимать, что делает код.
  4. НЕ ИСПОЛЬЗУЙТЕ from module import * это всегда ужасная идея, поскольку она вносит ВСЕ и может вызвать конфликты имен с внутрифайловыми функциями.
  5. Если библиотеки если вы хотите использовать встроенные имена, то использование from module import blah может быть полезно, чтобы избежать коллизий с именами.
  6. Это несколько неадекватная c точка, и, честно говоря, если вы не импортируете нелепое количество вещей, которые он не делает Это не имеет значения, но импорт функций выбора на самом деле быстрее из-за того, как python инициализирует сеансы интерпретатора. Однако это имеет значение только в МАССИВНОМ масштабе.

Я мог go целую вечность, но, как упоминал @ Mayank , здесь уже есть еще один хороший ответ: Use 'импортировать модуль' или 'из импорта модуля'?

1 голос
/ 07 мая 2020

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

urllib.request.urlopen('http://python.org/') as response:

, что означает, что для каждого метода, который вы захотите использовать, вам придется назовите имя пакета. Однако при использовании from urllib import request вы можете использовать метод напрямую следующим образом:

request.urlopen('http://python.org/') as response:

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

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