使用通配符导入的原因是什么?

时间:2019-04-17 07:34:41

标签: python python-3.x python-import python-module

我刚刚了解了导入模块的知识,我对通配符导入有些困惑。

from module_name import *

我根本不了解使用它的原因,我看到有人说根本不使用它。

有人可以弄清楚它的真正含义,以及为什么要使用它吗?

3 个答案:

答案 0 :(得分:0)

这用于从模块导入所有内容。建议您不要使用它的原因是因为它可能会使您混淆所使用的函数或类的来源。而且,某些东西在不同的模块中可能具有相同的名称,而这样导入它们将覆盖以前导入的那些。

答案 1 :(得分:0)

from module import *通常从给定的模块导入evey名称(尽管模块可以使用__all__来限制它)。通常最好避免这种情况,因为这组名称可能会随时间变化,从而可能会更改代码可用的名称。

不过,为了方便起见,有时我会在交互式会话中使用它。

答案 2 :(得分:0)

根据[Python 3.Docs]: Modules - More on Modules强调是我的):

  

甚至还可以导入模块定义的所有名称的变体:

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

这将导入除以下划线(_开头的名称以外的所有名称。在大多数情况下,Python程序员不使用此功能,因为它在解释器中引入了一组未知的名称,可能会隐藏您已经定义的某些内容

     

请注意,通常从模块或包中导入*的做法是不受欢迎的,因为这通常会导致可读性差的代码。但是,可以使用它来保存交互式会话中的输入

因此,这意味着:将模块/包导出的 all (请在上一页中查看 __ all __ 变量的含义)符号当前名称空间

通常(如上所述),当控制台中的某个人希望通过不“手动”导入所需的所有内容来节省时间时使用。
一些不知道要导入什么内容的人也使用了它(因此,他们导入了所有内容,因为他们并不真正知道自己在做什么-当然有例外,但是很少见。)

无论如何,可能这是最雄辩的例子(因为它依赖于 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 -party模块(碰撞命中的机会可能呈指数增长)时,事情变得更加混乱。