python中各种导入语句之间的区别
问题内容:
import sys
from sys import argv
我在pydocs中阅读了有关import语句的信息。它说它分两个步骤执行。(1)找到一个模块,并在必要时对其进行初始化;(2)在本地名称空间中定义一个或多个名称(在导入语句出现的范围内)。第一种形式(不带from)对中的每个标识符重复这些步骤list
。with的表单执行一次(1),然后重复执行(2)。
在这里,我了解到,在第一种情况下,sys
模块将作为第一步的一部分进行初始化,然后将其作为第二步提供给本地名称空间。但是,如果使用第二种输入形式,会怎样?将sys
模块初始化为第一步,并且仅模块argv
功能sys
(NO
OTHER功能)可用于本地名称空间。因为sys
在使用第二种形式的import语句时,我无法调用模块的任何其他功能。因此,只想具体说明一下即可。就像sys
模块已经从import语句中初始化一样,我们应该能够使用调用其他函数sys
。但这是行不通的。
#import sys
from sys import argv
script, input = argv
print "This was the input entered by command line", input
print sys.path # this is not working giving error name sys is not defined.
我怀疑如果from import
statementsys
模块没有被argv
初始化,只有函数被初始化,但是在那种情况下,一旦意味着pydocs,步骤step(1)会执行什么?(注意:我正在使用python
2.7)
问题答案:
import语句 始终
初始化整个模块。模块存储在sys.modules
字典中。
使用模块时from sys import argv
,sys
模块 不是
本地绑定的,只有本地绑定的argv
。您不能sys
在模块中使用该名称,因为您没有导入该名称。
sys
如果sys
单独导入,则只能访问该模块:
from sys import argv
script, input = argv
import sys
print sys.path
而且,您始终可以通过访问来访问所有导入的模块sys.modules
:
from sys import modules
print modules['sys'].path
在这里,我将名称绑定modules
到sys.modules
字典,并通过该引用找到sys
模块并引用path
属性。
演示:
>>> from sys import modules
>>> modules['sys']
<module 'sys' (built-in)>
>>> sys
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined