(Python)为什么不在函数中而不是在开始时导入模块以及导入它们的最佳方法?

时间:2014-01-12 00:15:02

标签: python function import module

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

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

  1. from tkinter import *然后Label()Tk()
  2. import tkinter然后tkinter.Label()tkinter.Tk()
  3. import tkinter as tk然后tk.Label()
  4. 最好的方法是什么?我看到第一个是最短的。它也是最好的吗?

1 个答案:

答案 0 :(得分:1)

我会尝试回答你问题的第二部分。

  1. from tkinter import *然后Label()Tk() 这是一种不好的做法,因为它混合了命名空间,可能会混淆未来的代码读者。例如,许多模块都有sqrt函数(标准库mathnumpyscipy)。如果您对其中几个使用全部导入(*),则最后一个将获胜。有时模块具有覆盖标准python函数的函数,并且读者无法知道此特定函数的来源。即使您只在一个模块上使用import-all,读者也必须区分标准python函数和包函数,例如来自getint的{​​{1}}?为什么他使用tkinter而不是NONE等。这只应该用于解释器的交互式工作。

  2. None然后import tkintertkinter.Label() 这是最明确的(并记住explicit is better than implicit),但它有点长。

  3. tkinter.Tk()然后import tkinter as tk? 这是1和2之间的良好折衷。简短而明确。
  4. 所以你必须在2到3之间做出决定。如果经常使用包,并且它有一个明确的短名称(例如tk.Label()tkinter -> tk),我会使用短名称。