import tkinter as tk和from tkinter import的区别

23
我知道这是一个愚蠢的问题,但我刚开始学习Python,对Python的知识不是很好。我的问题是两者之间有什么区别?
from Tkinter import *
import Tkinter as tk
为什么我不能只写

为什么我不能只写

import Tkinter

有人可以抽出几分钟给我讲解一下吗?

3个回答

30

from Tkinter import *导入了Tkinter中的所有暴露对象到当前命名空间中。 import Tkinter 将"namespace" Tkinter 导入到您的命名空间中, import Tkinter as tk也是一样,但是在本地将其重命名为'tk',以节省您的打字时间。

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

然后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, C,这将导入A和C,但不包括B到当前命名空间中。

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

通常情况下:当只需要导入模块的一个对象时,可以使用 from module import object 或者 from module import object as whatiwantittocall

当需要使用模块的一些功能时,可以使用import module,或者import module as shortname来节省您的打字时间。

from module import *不建议使用,因为可能会意外地遮蔽(“覆盖”)名称,并且可能会丢失哪些对象属于哪个模块的跟踪。


那么,如果我只使用一个类(例如A类),使用“import foo”需要更多的处理能力吗?我应该使用“from foo import A”吗?还是差异可以忽略不计?顺便说一句,对于像我这样的初学者来说,您的解释非常好。谢谢! - Chris Aung
关于导入的性能问题,a) 可以忽略不计,b) 也是无关紧要的。做适合自己的事情,而不是追求 Python 实现。当你使用 A 时,“from foo import A” 在查找方面更快,但 Python 程序员通常不会关心这些事情。 - ch3ka

3
你可以毫无问题地使用。
import Tkinter

然而,如果这样做,你需要在使用每个Tk类的名字前加上Tkinter。

这相当不方便。

另一方面,以下代码:

import Tkinter as tk

通过只需要输入tk.而不是Tkinter.来规避问题。

至于:

from Tkinter import *

通常情况下,因为避免使用通配符导入的原因,这是一个不好的主意。


0

编写:

from tkinter import * 

导入 tkinter 模块中的所有内容

编写:

import tkinter

导入tkinter模块会产生结果,但是如果你这样做,为了能够调用任何方法,你必须使用:

tkinter.function_name()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接