python中各种import语句之间的区别

时间:2014-03-26 19:48:47

标签: python python-2.7 import

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)

1 个答案:

答案 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
相关问题