你怎么称呼模块的元素?

时间:2011-11-22 16:42:40

标签: python module

我有来自Learn Python The Hard Way的代码,我需要对其进行评论:

from sys import argv

所以我做了:#imports来自sys模块的argv

我知道argv的作用,但我无法弄清楚调用sys模块的这个元素是什么意思?一个变量,一个方法,一个函数?参数变量?

另外,考虑到这行代码,是否意味着所有sys模块都是在我的程序中导入的,或者只是argv?

3 个答案:

答案 0 :(得分:6)

argvsys模块命名空间中的变量。它恰好是一个列表。

声明

from sys import argv

导致Python解析整个sys模块(假设它尚未被解析,在这种情况下重新加载),并将argv变量复制到当前模块的命名空间。

答案 1 :(得分:2)

  

我知道argv的作用,但是我无法弄清楚如何调用sys模块的这个元素?

我认为你的意思是 来调用argv,而不是如何调用它。它不可调用。以下是你在python中证明的方法。

>>> import sys
>>> callable(sys.argv)
False

现在,正如上面提到的unutbu一样,sys模块被加载,假设它尚未被加载。这是什么意思?好吧,当你导入一个模块时,它被添加到sys中一个名为sys.modules的字典中。

>>> import sys
>>> print sys.modules.keys
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os']

字典sys.modules可防止重新加载模块。 import语句检查sys.modules以防止重新加载模块。

如果你真的遇到模块混乱,请看一下sys.builtin_module_names列表。

如果您正在攻击脚本并希望立即在解释器中实现更改,请重新加载脚本。

>>> reload(sys)
>>> help(reload)
Help on built-in function reload in module __builtin__:

reload(...)
    reload(module) -> module

    Reload the module.  The module must have been successfully imported before.

所以你有更多关于模块和模块属性的知识:D。

答案 2 :(得分:1)

http://docs.python.org/tutorial/modules.html谈论

  

模块中的定义可以导入到其他模块或模块中

并在下面

  

import语句的变体将模块中的名称直接导入导入模块的符号表。

从这个意义上讲,argvsys中定义的名称。