Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中各种导入语句之间的差异_Python_Python 2.7_Import - Fatal编程技术网

python中各种导入语句之间的差异

python中各种导入语句之间的差异,python,python-2.7,import,Python,Python 2.7,Import,我在pydocs中读到了关于import语句的内容。它说它分两步执行。(1) 找到一个模块,必要时进行初始化;(2) 在本地命名空间中定义一个或多个名称(import语句发生的范围)。第一个表单(不带from)对列表中的每个标识符重复这些步骤。具有from的表单执行步骤(1)一次,然后重复执行步骤(2) 在这里,我了解到在第一种情况下,sys模块将作为第一步的一部分进行初始化,然后作为第二步对本地名称空间可用。 但如果是第二种进口形式,会发生什么? 将sys模块初始化为第一步,并且只有sys模块

我在pydocs中读到了关于import语句的内容。它说它分两步执行。(1) 找到一个模块,必要时进行初始化;(2) 在本地命名空间中定义一个或多个名称(import语句发生的范围)。第一个表单(不带from)对
列表中的每个标识符重复这些步骤。具有from的表单执行步骤(1)一次,然后重复执行步骤(2)

在这里,我了解到在第一种情况下,
sys
模块将作为第一步的一部分进行初始化,然后作为第二步对本地名称空间可用。 但如果是第二种进口形式,会发生什么? 将
sys
模块初始化为第一步,并且只有
sys
模块的
argv
功能(没有其他功能)可用于本地命名空间。 因为在使用第二种形式的import语句时,我无法调用
sys
模块的任何其他函数。所以我只想澄清一下。就好像
sys
模块已在from import语句中初始化一样,我们应该能够使用
sys
调用其他函数。但这是行不通的

import sys
from sys import argv

我怀疑在from import语句
sys
模块没有初始化的情况下,只有
argv
函数正在初始化,但在这种情况下,from step执行步骤(1)的内容曾经意味着pydocs?(注意:我正在使用python 2.7)

import语句总是初始化整个模块。模块存储在中

当您从sys import argv使用
时,
sys
模块未绑定到本地,只有
argv
被绑定。您不能在模块中使用名称
sys
,因为您没有导入该名称

如果单独导入
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.
通过访问
sys.modules
,您始终可以访问所有导入的模块:

from sys import argv

script, input = argv

import sys
print sys.path
在这里,我将名称
modules
绑定到
sys.modules
字典,并通过该引用找到
sys
模块,并引用
path
属性

演示:

来自sys导入模块的
>>
>>>模块['sys']
>>>系统
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
NameError:未定义名称“sys”

@MartijnPieters:您提到导入模块不会浪费任何东西;该模块始终完全导入(导入sys.modules映射),因此无论是使用import sys还是使用from sys import argv,都不会产生影响。模块的其余部分也将在这里,说明我为什么不能使用sys.path。这是我的问题好了,我现在明白了。前面提到了您在中共享的链接。sys模块的其余部分仍然存在,无论您是否使用模块中的其他内容。所以这句话实际上把我弄糊涂了。所以现在我很清楚,即使整个模块在未绑定到名称空间之前是可用的,它也不会工作。我们需要再次导入sys
from sys import modules

print 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