【发布时间】:2013-04-05 04:23:42
【问题描述】:
我知道这是一个愚蠢的问题,但我才刚刚开始学习 python,而且我对 python 没有很好的了解。我的问题是有什么区别
from Tkinter import *
和
import Tkinter as tk
?为什么我不能写
import Tkinter
谁能抽出几分钟来启发我?
【问题讨论】:
我知道这是一个愚蠢的问题,但我才刚刚开始学习 python,而且我对 python 没有很好的了解。我的问题是有什么区别
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 在名称 Bar 下可用(在您当前的命名空间中)。
一般来说:当您只想要一个模块的一个对象时,您可以使用from module import object 或from module import object as whatiwantittocall。
当您需要某些模块功能时,您可以使用import module 或import module as shortname 以节省您的打字时间。
不建议使用from module import *,因为您可能会不小心隐藏(“覆盖”)名称,并且可能会丢失属于哪个模块的对象。
【讨论】:
你当然可以使用
import Tkinter
但是,如果您这样做,则必须在您使用的每个 Tk 类名称前面加上 Tkinter.。
这很不方便。
另一方面,如下:
import Tkinter as tk
只要求您输入tk. 而不是Tkinter.,从而回避了这个问题。
至于:
from Tkinter import *
这通常是个坏主意,原因在 Should wildcard import be avoided? 中讨论过
【讨论】:
写作:
from tkinter import *
导致导入 tkinter 模块中存在的所有内容
写作:
import tkinter
导致导入tkinter 模块,但如果你这样做,为了能够调用你必须使用的任何方法:
tkinter.function_name()
【讨论】: