21

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

from Tkinter import *

import Tkinter as tk

?为什么我不能只写

import Tkinter

谁能抽出几分钟来启发我?

4

3 回答 3

28

from Tkinter import *将 Tkinter 中的每个公开对象导入到您当前的命名空间中。 import Tkinter在您的命名空间中导入“命名空间”Tkinter 并 import Tkinter as tk执行相同操作,但将其在本地“重命名”为“tk”以节省您的输入

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

然后import foo让您访问 foo.A、foo.B 和 foo.C。

当您这样做时,import foo as x您也可以访问它们,但是在名称 xA、xB 和 xC 下 from foo import *将直接在您当前的命名空间中导入 A、B 和 C,因此您可以使用 A、B 和 C 访问它们。

还有from foo import A, Cwich 将导入 A 和 C,但不会将 B 导入您当前的命名空间。

您也可以这样做from foo import B as Bar,这将使 B 在名称 Bar 下可用(在您当前的命名空间中)。

所以一般来说:当你只想要一个模块的一个对象时,你做from module import objector from module import object as whatiwantittocall

当您需要某些模块功能时,您可以这样做import module,或import module as shortname节省您的打字时间。

from module import *不鼓励,因为您可能会意外隐藏(“覆盖”)名称,并且可能会丢失属于哪个模块的对象。

于 2013-04-12T15:07:43.133 回答
3

你当然可以使用

import Tkinter

但是,如果这样做,则必须在使用的每个 Tk 类名称前加上Tkinter..

这是相当不方便的。

另一方面,以下内容:

import Tkinter as tk

通过只要求您键入tk.而不是Tkinter..

至于:

from Tkinter import *

由于应避免通配符导入中讨论的原因,这通常是一个坏主意

于 2013-04-12T15:08:12.543 回答
0

写作:

from tkinter import * 

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

写作:

import tkinter

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

tkinter.function_name()
于 2018-12-31T10:51:43.603 回答