为什么Python中有多种冗余的导入方式?

9

除非我弄错了,这两行代码实现的功能完全一样:

import theano.tensor as T

from theano import tensor as T

为什么Python中存在多种冗余的导入方式?


这可能解释了情况是如何形成的,但问题是为什么其中一个被选择作为标准? - tumultous_rooster
在所有情况下它们并不做相同的事情... - jonrsharpe
1个回答

6

这个语句

import theano.tensor

只有当theano.tensor本身是一个模块时,才能起作用。这就是允许你的两个示例都能正常工作的原因。

考虑sys.argv,它不是一个模块。以下代码可以正常工作:

from sys import argv

使用 from sys import argv 语句将 argv 导入全局命名空间,而 import sys 不会这样做:

>>> import sys.argv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named argv

非常棒的答案,谢谢。那么作为一个新手的后续问题,如果sys.argv不是模块,它在技术上的名称是什么? - tumultous_rooster
那么您的意思是说我们只能使用点符号来访问子模块,否则我们不能使用这种表示法吗? - nbro
1
sys.argv只是一个对象的完全限定名称(在这种情况下,是list类的实例)。 - chepner
sys 不是一个模块,而是一个___? - tumultous_rooster
1
@MattO'Brien:sys 确实是一个模块:https://docs.python.org/2/library/sys.html。大多数模块中可用的东西只是普通对象,但有时会在模块内包含其他模块。例如,[`os` 模块](https://docs.python.org/2/library/os.html) 包含 os.path 模块。在你的情况下,theano 模块包含一个名为 tensor 的模块。 - Greg Hewgill

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