关于python:import tkinter与tk和tkinter import之间的区别

Difference between import tkinter as tk and from tkinter import

我知道这是一个愚蠢的问题,但我刚刚开始学习python,我对python没有很好的了解。我的问题是

1
from Tkinter import *

1
import Tkinter as tk

?为什么我不能只写

1
import Tkinter

有人能抽出几分钟来启发我吗?


from Tkinter import *将tkinter中的每个公开对象导入当前命名空间。import Tkinter导入命名空间中的"namespace"tkinter,并import Tkinter as tk也做同样的操作,但在本地将其"重命名"为"tk",以节省您键入的内容。

假设我们有一个包含类A、B和C的模块foo。

然后,import foo给您访问foo.a、foo.b和foo.c的权限。

当你使用import foo as x时,你也可以使用它们,但是使用的名称是x.a、x.b和x.c。from foo import *将直接在当前名称空间中导入a、b和c,这样您就可以使用a、b和c访问它们。

还有from foo import A, Cwich将导入a和c,但不将b导入当前的名称空间。

您还可以执行from foo import B as Bar,这将使b在名称栏下(在当前名称空间中)可用。

一般来说,当您只需要一个模块的一个对象时,您需要执行from module import objectfrom module import object as whatiwantittocall

当您需要一些模块功能时,您可以执行import moduleimport module as shortname来保存您键入的内容。

不鼓励from module import *,因为您可能会意外地隐藏("覆盖")名称,并可能丢失属于wich模块的对象的跟踪。


你当然可以用

1
import Tkinter

但是,如果您这样做,那么您必须在每个用于Tkinter.的tk类名前面加前缀。

这很不方便。

另一方面,以下内容:

1
import Tkinter as tk

只需键入tk.而不是Tkinter.,就可以回避这个问题。

关于:

1
from Tkinter import *

这通常是一个坏主意,因为中讨论的原因应该避免通配符导入吗?


写作:

1
from tkinter import *

导致导入tkinter模块中存在的所有内容

写作:

1
import Tkinter

导致导入tkinter模块,但如果这样做,为了能够调用任何您必须使用的方法:

1
tkinter.function_name()