我有来自Learn Python The Hard Way的代码,我需要对其进行评论:
from sys import argv
所以我做了:#imports来自sys模块的argv
我知道argv的作用,但我无法弄清楚调用sys模块的这个元素是什么意思?一个变量,一个方法,一个函数?参数变量?
另外,考虑到这行代码,是否意味着所有sys模块都是在我的程序中导入的,或者只是argv?
答案 0 :(得分:6)
argv
是sys
模块命名空间中的变量。它恰好是一个列表。
声明
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
语句的变体将模块中的名称直接导入导入模块的符号表。
从这个意义上讲,argv
是sys
中定义的名称。