#coding:UTF-8
#使用sys模块开始
'''
首先,我们利用import语句 输入sys模块。
基本上,这句语句告诉Python,我们想要使用这个模块。
sys模块包含了与Python解释器和它的环境有关的函数。
当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。
如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你 使用 。
注意,初始化过程仅在我们 第一次 输入模块的时候进行。另外,“sys”是“system”的缩写。
sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的
一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突。
另外,它也清晰地表明了这个名称是sys模块的一部分。
sys.argv变量是一个字符串的 列表 (列表会在后面的章节详细解释)。
特别地,sys.argv包含了 命令行参数 的列表,即使用命令行传递给你的程序的参数。
如果你使用IDE编写运行这些程序,请在菜单里寻找一个指定程序的命令行参数的方法。
这里,当我们执行python using_sys.py we are arguments的时候,
我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。
Python为我们把它存储在sys.argv变量中。
记住,脚本的名称总是sys.argv列表的第一个参数。
所以,在这里,'using_sys.py'是sys.argv[0]、'we'是sys.argv[1]、'are'是sys.argv[2]
以及'arguments'是sys.argv[3]。注意,Python从0开始计数,而非从1开始。
sys.path包含输入模块的目录名列表。
我们可以观察到sys.path的第一个字符串是空的——这个空的字符串
表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。
这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。
'''
import sys
print 'The command line args are:'
for i in sys.argv:
print i
print '\nThe PYTHONPATH IS',sys.path,'\n'
'''
The command line args are:
E:\python_test\3_模块.py
The PYTHONPATH IS ['E:\\python_test', 'C:\\Python27\\Lib\\idlelib',
'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs',
'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win',
'C:\\Python27\\lib\\lib-tk', 'C:\\Python27',
'C:\\Python27\\lib\\site-packages']
'''
#使用sys模块结束
#===========================================
#模块的__name__开始
'''
每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行.
'''
if __name__=='__main__':
print "This program is being run by itself "
else:
print "I am being imported from another module"
'''
结果(不是此程序的,仅供参考):
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>
'''
#模块的__name__ 结束
#===========================================
#创建自己的模块 开始
'''
记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。
'''
import test_module
test_module.sayHi()
print 'Version:',test_module.version
'''
结果
This program is being run by itself
This testModule speaking!
But userd by others
This testModule speaking!
Version: 0.1
'''
from test_module import sayHi,version
sayHi()
print "Version",version
'''
结果
This testModule speaking!
Version 0.1
分析:与import相比,from...import只是引入,而import在引入的时候还执行了
'''
#创建自己的模块 结束
#===========================================
#dir()函数开始
'''
你可以使用内建的dir函数来列出模块定义的标识符。
标识符有函数、类和变量。
当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。
如果不提供参数,它返回当前模块中定义的名称列表。
'''
"""
$ python
>>> import sys
>>> dir(sys) # get list of attributes for sys module
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',
'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',
'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type',
'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval',
'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding',
'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',
'meta_path','modules', 'path', 'path_hooks', 'path_importer_cache',
'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',
'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',
'version', 'version_info', 'warnoptions']
>>> dir() # get list of attributes for current module
['__builtins__', '__doc__', '__name__', 'sys']
>>>
>>> a = 5 # create a new variable 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>>
>>> del a # delete/remove a name
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>>
"""
'''
首先,我们来看一下在输入的sys模块上使用dir。我们看到它包含一个庞大的属性列表。
接下来,我们不给dir函数传递参数而使用它——默认地,它返回当前模块的属性列表。
注意,输入的模块同样是列表的一部分。
为了观察dir的作用,我们定义一个新的变量a并且给它赋一个值,然后检验dir,
我们观察到在列表中增加了以上相同的值。我们使用del语句删除当前模块中的变量/属性,
这个变化再一次反映在dir的输出中。
关于del的一点注释——这个语句在运行后被用来 删除 一个变量/名称。
在这个例子中,del a,你将无法再使用变量a——它就好像从来没有存在过一样。
'''
#dir()函数结束
#============================================================