import sys
from sys import argv
我在pydocs中读到了有关import语句的内容。它说它分两步执行。 (1)找到一个模块,并在必要时进行初始化; (2)在本地名称空间(发生import语句的作用域)中定义一个或多个名称。第一种形式(不包括)为list
中的每个标识符重复这些步骤。带有from的表单执行步骤(1)一次,然后重复执行步骤(2)。
在这里,我理解在第一种情况下sys
模块将作为第1步的一部分进行初始化,然后它将作为第2步提供给本地命名空间。
但是在第二次进口形式的情况下会发生什么?
将sys
模块初始化为第一步,只有argv
模块的sys
函数(NO OTHER函数)可用于本地名称空间。
因为当我使用第二种形式的import语句时,我无法调用sys
模块的任何其他函数。所以只想具体澄清一下。好像从import语句初始化了sys
模块,然后我们应该能够使用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.
我怀疑如果来自import语句sys
模块没有被初始化,只有argv
函数被初始化,但在这种情况下,从步骤执行步骤(1)一次是什么意思pydocs? (注意:我正在使用python 2.7)
答案 0 :(得分:3)
导入语句始终初始化整个模块。模块存储在sys.modules
dictionary。
当您使用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