提问者:小点点

导入整个模块和导入某个功能有什么区别?


我一直在问自己,为什么有一种方法可以从一个模块中导入某个函数,例如:从tkinter导入ttk

而不是仅仅导入整个模块,-->; 导入tkinter

它是否使程序运行得更快?


共3个答案

匿名用户

没有内存或速度差异(必须对整个模块进行计算,因为最后一行可以是Y=something_else)。 只有在循环中多次调用一个函数(数百万次或更多次)时才会有意义。 进行双字典查找最终会累积起来。

虽然import tkinter和from tkinter import ttk都导入了整个tkinter模块,但后者使用名称绑定,因此只有ttk可以被其余代码访问。

对于某些人来说,这将是首选的样式,因为它只允许访问您显式声明的函数。

但是,它确实会引入潜在的名称冲突。 注您还可以显式导入函数,并使用from tkinter import ttk将它们重命名为tkinter_ttk,这是一种满足显式导入的约定,并且不太可能发生给定名称空间冲突。

匿名用户

这并没有什么实际的区别,但它确实会有很大的区别,无论多么小。 这是因为在import x版本中有两个名称查找:一个用于模块名称,第二个用于函数名称; 另一方面,使用from x import y,您只有一个查找。

看看这个Python导入X还是从X导入Y? (性能)

匿名用户

通过导入所有的模块,解释器将执行整个python文件,而在像tkinter这样非常大的模块的情况下,这将花费更多的时间。 示例:

import example  #contains 10 functions and 10 variables
example.function() #use only this

这是无效的,因为您只使用了1个函数。 原因:

  1. 解释器必须执行比您需要的更多的事情。
  2. 如果模块还有一些您不使用的变量,则会占用更多内存。

通过使用“from”,您将只执行所需的内容,而且速度会更快。 所以,最好这样做:

from example import function  #executes only a part of the module
example.function()