1.使用sys模块
模块基本上就是一个包含了所有你定义的函数和变量的文件,为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
#!/usr/bin/python
# Filename: using_sys.py
import sys
print 'The command line arguments are:'
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
输出:
$ python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments
The PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip',
'/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',
'/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',
'/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0']
利用import语句输入sys模块,如果找到了这个文件,就可以使用这个模块中的语句,初始化过程仅在我们第一次输入模块的时候进行。
sys.argv是一个字符串的列表,包含了命令行参数的列表,而脚本的名称总是sys.argv的第一个参数,所以using_sys_.py就是argv[0],以此类推。
sys.path包含输入模块的目录名列表,sys.path的第一个字符串是空的,这个空的字符串表示当前目录,也是sys.path的一部分。这与PYTHONPATH环境变量是一样的,意味这你可以直接输入位于当前目录的模块。否则,必须把模块放在sys.path所列的目录之一。
2.字节编译的.pyc文件
输入一个模块比较费时,可以创建字节编译文件,以.pyc作为扩展名。当你下次从别的程序输入这个模块时,.pyc文件十分有用,因为一部分输入模块所需的处理已经完成,而且pyc文件与平台无关。
3.from...imprt语句
如果直接输入argv变量到程序中,可以使用from sys import argv,如果想要使用sys模块的所有名字,可以使用from sys import *。一般来说避免使用from...import而使用import,来使你的程序更加易读,也可以避免名称的冲突。
4.模块的_name_
有一个场合:当一个模块被第一次输入的时候,这个模块的主块将被运行。加入我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,可以通过模块_name_属性完成。
#!/usr/bin/python
# Filename: using_name.py
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
>>>
每个python模块都有它的_name_,如果它是‘_main_’,这说明这个模块被用户单独运行。
5.创建自己的模块
#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
print 'Hi, this is mymodule speaking.'
version = '0.1'
# End of mymodule.py
记住这个模块应该被放置在导入它的程序的同一个目录,或者在sys.path所列目录之一。
#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
mymodule.sayhi()
print 'Version', mymodule.version
输出:
$ python mymodule_demo.py
Hi, this is mymodule speaking.
Version 0.1
6.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']
>>>
为了观察dir的作用,我们定义一个新的变量a并且给它赋一个值,然后检验dir,我们观察到在列表中增加了以上相同的值。我们使用del语句删除当前模块中的变量/属性,这个变化再一次反映在dir的输出中。关于del的一点注释——这个语句在运行后被用来 删除 一个变量/名称。