📜  为什么在Python中 import star 是个坏主意

📅  最后修改于: 2022-05-13 01:55:04.217000             🧑  作者: Mango

为什么在Python中 import star 是个坏主意

在Python程序中使用import *被认为是一个坏习惯,因为这样会污染命名空间,import * 语句会将所有函数和类导入到你自己的命名空间中,这可能会与你定义的函数或其他库的函数发生冲突进口。此外,有时很难说出特定函数来自哪个库。覆盖变量/函数等的风险始终存在于 import * 实践中。

以下是关于为什么不应该使用import *的一些要点:

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

所有这一切并不意味着使用import *总是不好的,如果我告诉你在这个宇宙上没有什么像 import * 的东西你会渴望它。使用 import * 时唯一应该记住的是,您应该始终谨慎使用它并保持纪律。

现在让我们深入研究一个示例,以更实际和更易于理解的方式查看问题。

考虑一个包含函数sum (a, b)的包a

# import the module a using import * 
from a import *
  
# define a function sum
def sum (x, y):
    return x + y
  
print (sum (2, 6))

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

正确方法:

# import the module a as l
import a as l
  
def sum (x, y):
    return x + y
  
# calls the self-defined sum function
print (sum (2, 6))
  
# calls the sum function defined in the module a
print (l.sum(2, 6))

以这种方式编码增加了代码的可读性,并且变得易于调试,并且发生任何冲突的可能性几乎为零。