【发布时间】:2017-09-18 03:26:24
【问题描述】:
我曾经认为两者都是平等的,直到我尝试了这个:
$python
Python 2.7.13 (default, Dec 17 2016, 23:03:43)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> root=Tk()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Tk' is not defined
>>> from Tkinter import *
>>> root=Tk()
那么这两种从模块中导入所有内容的导入的核心区别是什么?
谢谢。
【问题讨论】:
-
虽然在 Tkinter 示例代码中经常使用“星号”导入,但这不是一个好习惯。它将所有这些 Tkinter 名称转储到您的名称空间中(Python 2 中的 175 个名称,Python 3 中的 135 个名称)。这会造成不必要的混乱,以及名称冲突的可能性,尤其是在您星型导入另一个模块时。它还使代码更难阅读,因为您必须记住哪些名称是 Tkinter 名称,而不是能够明确地看到它。首选做法是先执行
import Tkinter as tk,然后执行root = tk.Tk(); button = tk.Button(root, ...)之类的操作。 -
请注意,所有形式的
import总是 导入(并执行)整个模块,不同之处在于它们在导入模块中可用的名称。