📜  为什么在Python中import星号*是个坏主意

📅  最后修改于: 2020-05-04 02:00:03             🧑  作者: Mango

在Python程序中使用import *被认为是一个坏习惯,因为这样会污染名称空间,import *语句会将所有函数和类导入您自己的名称空间,这可能会与您定义的函数或您所定义的其他库的函数发生冲突进口。在某些时候,很难说出某个特定函数来自哪个库。

在导入*练习中,始终存在覆盖变量/函数等的风险。
以下是有关为什么不应该使用导入*的几点:

  • 代码可读性
  • 导入的内容始终是一个谜,无法轻易地从哪个模块中导入某些东西,导致代码可读性低。
  • 污染名称空间,import *导入您自己的名称空间中的所有函数和类,它们可能与您定义的函数和类或您可能导入的其他库的函数和类发生冲突。
  • 隐藏错误的具体可能性
  • 诸如pyflakes之类的工具不能用于静态检测源代码中的错误。

所有这些并不意味着使用import *总是不好的,如果我告诉过您,在这个世界上没有像import *这样的东西,您会渴望得到它。使用import *时,您应该记住的唯一事情是,应始终谨慎使用并保持纪律。
现在,让我们深入一个示例,以更实际、更易于理解的方式查看问题。
考虑一个包含函数和(a,b)的包a

# 使用import *导入模块
from a import *
# 定义函数和
def sum (x, y):
    return x + y
print (sum (2, 6))

这段代码的错误是,我们定义的sum函数会覆盖我们导入的模块“ a”中的sum函数,我们甚至对此一无所知。在大型程序的情况下,很难确定实际上正在调用哪个函数。
正确的方法:

# 将模块a导入为l
import a as l
def sum (x, y):
    return x + y
# 调用自定义求和函数
print (sum (2, 6))
# 调用模块中定义的求和函数
print (l.sum(2, 6))

这样编码可以提高代码的可读性,并且易于调试,发生任何冲突的可能性为零。