我知道这是一个愚蠢的问题,但我刚刚开始学习python,并且我对python没有很好的了解。我的问题是什么?为什么我不能只写导入tkinter作为tk和tkinter导入的区别
from Tkinter import *
和
import Tkinter as tk
的区别
import Tkinter
任何人都可以花几分钟分钟赐教?
我知道这是一个愚蠢的问题,但我刚刚开始学习python,并且我对python没有很好的了解。我的问题是什么?为什么我不能只写导入tkinter作为tk和tkinter导入的区别
from Tkinter import *
和
import Tkinter as tk
的区别
import Tkinter
任何人都可以花几分钟分钟赐教?
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 object
或from module import object as whatiwantittocall
。
当您想要某些模块功能时,您可以使用import module
或import module as shortname
来节省输入。
from module import *
不鼓励,因为您可能会意外地遮盖(“覆盖”)名称,并且可能会失去跟踪哪些对象属于哪个模块。
你当然可以使用
import Tkinter
但是,如果你这样做,你必须前缀你Tkinter.
使用每一个Tk的类名。
这很不方便。
在另一方面,以下内容:
import Tkinter as tk
只要求你输入tk.
而不是Tkinter.
回避的问题。
至于:
from Tkinter import *
它通常是一个坏主意,在Should wildcard import be avoided?
所以讨论的原因,它需要更多的处理能力,可使用“进口富”如果我只打算用一个类(例如A类)。我应该使用“从foo导入A”来代替吗?或者差异可以忽略不计?顺便说一句,对于像我这样的初学者很好的解释。谢谢! –
关于进口的性能问题是a)微不足道的,b)不相关的。做什么最适合你,而不是Python的实现。 '从foo导入A'在以后使用A时查找速度更快,但pythonists通常不关心这样的事情。 – ch3ka