python - (Python)为什么不在函数中导入模块而不是在开头导入它们的最佳方式?

标签 python function import module

<分区>

我正在用 python 编写程序。我正在使用大约十几个模块。目前,我已将它们放在函数本身中。我的理由是,由于用户不会在一个 session 中使用所有功能,因此不必无用地导入许多模块,直到某个功能需要它们为止。但是到目前为止,我所看到的所有代码都在开头引入了它们。它们的原因和优势是什么?

还有什么是最好的导入方式?我见过几种类型,例如:

  1. from tkinter import * 然后是 Label(), Tk()
  2. import tkinter 然后 tkinter.Label(), tkinter.Tk()
  3. 将 tkinter 导入为 tk 然后 tk.Label()?

什么是最好的方法?我看到第一个是最短的。也是最好的吗?

最佳答案

我会尽量回答你问题的第二部分。

  1. from tkinter import * 然后是 Label(),Tk() 这被认为是不好的做法,因为它混合了 namespace 并且可能会使您的代码的 future 读者感到困惑。例如,许多模块都有一个 sqrt 函数(标准库 mathnumpyscipy)。如果您对其中几个使用 import all (*),则最后一个将获胜。有时,一个模块的函数会覆盖标准的 Python 函数,而读者无法知道这个特定函数的来源。即使你只在一个模块上使用 import-all,读者也必须区分标准 python 函数和包函数,例如getint 是来自 tkinter 吗?他为什么使用 NONE 而不是 None 等。这应该只用于解释器的交互工作。

  2. import tkinter 然后 tkinter.Label(), tkinter.Tk() 这是最明确的(请记住 explicit is better than implicit ),但有点长。

  3. 将 tkinter 导入为 tk 然后 tk.Label()? 这是 1 和 2 之间的一个很好的折衷。简短但明确。

所以你必须在 2 和 3 之间做出决定。如果你经常使用这个包,并且它有一个明确的短名称,(例如 tkinter -> tknumpy -> np ) 我会使用简称。

关于python - (Python)为什么不在函数中导入模块而不是在开头导入它们的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069633/

相关文章:

javascript - 不清楚的 Javascript 编程模式(函数)。为什么结果不同?

c++ - 什么时候函数应该使用 cstrings 而不是字符串? (C++)

MySQL在线导入导出

python - 在多个目录中按名称搜索文件?

python - scipy.optimize 的最小化函数到底是如何工作的?

python - 当列表值与 Pyspark 数据框中列值的子字符串匹配时填充新列

python - 导入当前文件夹的兄弟库中的库

python - Django 教程 1 - 导入错误 : No module named apps

c++ - 函数原型(prototype)设计 - C++

Python修改全局变量