从x导入y vs.从x.y导入*

6
这两行代码有什么不同?
from PyQt4 import QtGui
from PyQt4.QtGui import *

第一行是"从PyQt4的QtGui模块中导入QtGui类"。 但第二行的意思是什么呢?"从PyQt4的QtGui模块中导入所有内容"。 这不是一样的吗?

2
第一个将模块导入到当前命名空间,第二个将该模块自己的命名空间中的所有内容导入到当前命名空间。 - Davor Lucic
请注意,强烈不建议使用第二种形式 - 请参阅http://docs.python.org/howto/doanddont.html#from-module-import了解原因。 - user395760
2个回答

11
第一条语句将指定的模块导入到当前命名空间中。
第二条语句将指定模块中的所有内容导入到当前命名空间中。
因此,1)意味着您仍然需要通过模块命名空间显式引用任何类/函数等。
2)意味着您不需要这样做。
以下是比较和对比,以展示两者之间的差异。
1)
import math

d = math.sqrt(10)

2)

from math import *

d = sqrt(10)

请注意,如果您需要,可以选择从模块中导入特定的符号,例如:
from math import sqrt
d = sqrt(10)

0

包可以导出多个内容。不同之处在于第一行从包中导入单个对象,第二行导入所有内容。如果您要导入的包只导出一个内容,则这两者是同义词。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接