Согласно [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 -партией (где вероятность столкновения может возрасти в геометрической прогрессии) вероятность возникновения коллизии может увеличиться).