2013-04-12 64 views
6

我知道这是一个愚蠢的问题,但我刚刚开始学习python,并且我对python没有很好的了解。我的问题是什么?为什么我不能只写导入tkinter作为tk和tkinter导入的区别

from Tkinter import * 

import Tkinter as tk 

的区别

import Tkinter 

任何人都可以花几分钟分钟赐教?

回答

11

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你也可以访问这些,但名称为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在名称栏(在您当前的命名空间中)可用。

所以一般情况下:当你只需要一个模块的一个对象时,你可以做from module import objectfrom module import object as whatiwantittocall

当您想要某些模块功能时,您可以使用import moduleimport module as shortname来节省输入。

from module import *不鼓励,因为您可能会意外地遮盖(“覆盖”)名称,并且可能会失去跟踪哪些对象属于哪个模块。

+0

所以讨论的原因,它需要更多的处理能力,可使用“进口富”如果我只打算用一个类(例如A类)。我应该使用“从foo导入A”来代替吗?或者差异可以忽略不计?顺便说一句,对于像我这样的初学者很好的解释。谢谢! –

+0

关于进口的性能问题是a)微不足道的,b)不相关的。做什么最适合你,而不是Python的实现。 '从foo导入A'在以后使用A时查找速度更快,但pythonists通常不关心这样的事情。 – ch3ka

3

你当然可以使用

import Tkinter 

但是,如果你这样做,你必须前缀你Tkinter.使用每一个Tk的类名。

这很不方便。

在另一方面,以下内容:

import Tkinter as tk 

只要求你输入tk.而不是Tkinter.回避的问题。

至于:

from Tkinter import * 

它通常是一个坏主意,在Should wildcard import be avoided?