Python读书笔记第八章:模块

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的一点注释——这个语句在运行后被用来 删除 一个变量/名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值