我知道这是一个愚蠢的问题,但我刚刚开始学习python,我对python没有很好的了解。我的问题是
和
号
?为什么我不能只写
有人能抽出几分钟来启发我吗?
from Tkinter import *将tkinter中的每个公开对象导入当前命名空间。import Tkinter导入命名空间中的"namespace"tkinter,并import Tkinter as tk也做同样的操作,但在本地将其"重命名"为"tk",以节省您键入的内容。
假设我们有一个包含类A、B和C的模块foo。
然后,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, Cwich将导入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 *,因为您可能会意外地隐藏("覆盖")名称,并可能丢失属于wich模块的对象的跟踪。
- 所以,如果我只使用一个类(如A类),使用"import foo"是否需要更多的处理能力?我应该用"从foo导入a"来代替吗?或者差异可以忽略不计?顺便说一句,对于像我这样的初学者来说,这是个很好的解释。谢谢!
- 对进口的性能关注是a)可以忽略不计的,b)不相关。做最适合你的事情,而不是python实现。从foo导入a'在以后使用a时查找速度更快,但pythonists通常不关心这类事情。
你当然可以用
但是,如果您这样做,那么您必须在每个用于Tkinter.的tk类名前面加前缀。
这很不方便。
另一方面,以下内容:
号
只需键入tk.而不是Tkinter.,就可以回避这个问题。
关于:
这通常是一个坏主意,因为中讨论的原因应该避免通配符导入吗?
写作:
。
导致导入tkinter模块中存在的所有内容
写作:
导致导入tkinter模块,但如果这样做,为了能够调用任何您必须使用的方法:
。