关于python:这两者有什么区别?

What's the difference between these two

本问题已经有最佳答案,请猛点这里访问。

有人能解释一下

1
import tkinter as tk

1
from tkinter import *

如果有人能举出同样任务的例子,那就太好了。通过单独使用这两个语句实现(或创建对象)


简单地说,import tkinter a s tk将在您的文件中启动tkinter的tk实例,该实例可以通过编写类似

1
tk.Entry()

这将使您免于键入长名称。

而from tkinter import*将导入__all__变量下定义的所有名称,因此可以调用与

1
Entry()

你应该读这个来了解更多


一开始差异不大,但由于一个重要原因,import tkinter as tk实际上是一个更好的选择。

通过将导入作为特定的内容,可以使该导入的所有方法都需要prifix。这可以防止方法被重写或意外重写。

例如,如果我有一个包含time()方法的库,并说不要调用这个库custom_timer,然后说我还需要导入内置time方法。

如果用*进口,我们就有问题了。

1
2
from custom_timer import * # importing all modules including time() form this library.
import time # importing built in time().

最终会发生的是第二次导入将覆盖第一次导入的时间方法。为了防止这样的事故,我们可以简单地使用import as your_prefix_here

以这个例子为例。

1
2
import custom_timer as ct # importing this library as ct.
import time # importing built in time().

在这种情况下,我们将有两个不同的时间导入,不会相互覆盖。

一个是ct.time(),另一个是time()

因为像tkinter这样的库包含许多方法,因此使用import asimport *比较安全。

如果你赶时间,只是想用from tkinter import *来测试一个想法或回答一个问题,所有这些对于小得多的应用程序都是可以的。就我个人而言,我试图用import tkinter as tk来做我为良好实践所做的一切。

关于您对2个示例的请求,请参见下文。

进口tk

1
2
3
4
5
6
7
import tkinter as tk

root = tk.Tk()

tk.Label(root, text="I am a label made using tk prefix.")

root.mainloop()

使用*进口:

1
2
3
4
5
6
7
from tkinter import *

root = Tk()

Label(root, text="I am a label made in tkinter with the * import.")

root.mainloop()


两者都导入同一个包。主要区别在于,您的第一行是导入包tkinter,然后用"tk"引用它,这将允许您使用不同的名称调用它的函数。我对特金特没有任何经验,但我能举一个很好的例子,那就是麻木或者熊猫。numpy中的很多函数,比如numpy.random.randn()可以用一个简短的名字来写,比如:

1
2
import numpy as np
np.random.randn()