В чем причина использования импорта по шаблону? - PullRequest
0 голосов
/ 17 апреля 2019

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

from module_name import *

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

Может ли кто-нибудь уточнить, что это на самом деле означает, и почему вы бы это использовали?

Ответы [ 3 ]

0 голосов
/ 17 апреля 2019

from module import * обычно импортирует имя evey из данного модуля (хотя модуль может использовать __all__ для его ограничения).Как правило, этого лучше избегать, поскольку этот набор имен может со временем меняться, возможно, изменяя имена, доступные для вашего кода.

Хотя иногда я использую его в интерактивных сеансах для удобства.

0 голосов
/ 17 апреля 2019

Согласно [Python 3.Docs]: Модули - Больше о модулях ( выделение мое):

Существует даже вариантимпортировать все имена, которые определен модулем:

>>> from fibo import *
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

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

Обратите внимание, что в целом практикаимпорт * из модуля или пакета не одобряется, поскольку он часто вызывает плохо читаемый код .Тем не менее, можно использовать для сохранения набора текста в интерактивных сеансах .

Итак, это означает: импорт всех (проверьте страницу выше для __ все __ значение переменной) символы, экспортируемые модулем / пакетом в текущее пространство имен .

Обычно (как указано выше) используетсякогда кто-то находится в консоли и хочет сэкономить время, не импортируя все необходимое, «вручную».
Он также используется теми, кто не знает, что импортировать (поэтому они импортируют все, так как не знают, что делают - конечно, есть исключения, но они редки).

В любом случае , вероятно , это самый красноречивый пример (поскольку он только опирается на Python ): иллюстрируя его подводные камни:

>>> with open("out.txt", "w") as f:
...     f.write("DON'T USE wildcard imports!")
...
27
>>>
>>> from os import *
>>>
>>> with open("out.txt", "w") as f:
...     f.write("USING wildcard imports ...")
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required (got type str)

Тени для импорта по шаблону:

от:

При работе с модулями с 3 rd -партией (где вероятность столкновения может возрасти в геометрической прогрессии) вероятность возникновения коллизии может увеличиться).

0 голосов
/ 17 апреля 2019

Используется для импорта всего из модуля. Причина, по которой вам рекомендуется не использовать его, заключается в том, что он может сбить с толку вопрос о том, откуда взялась используемая вами функция или класс. Более того, некоторые вещи могут иметь одно и то же имя в разных модулях, и их импорт будет перезаписывать ранее импортированный.

...