Python标准库学习 (上)

来源:互联网 发布:蒙特祖玛的宝藏4 mac 编辑:程序博客网 时间:2024/06/05 19:45

在《Python高手之路》第二章,标准库这一章,讲到了一些必须了解的标准库模块,有一些,是我之前就用到过的,类似codecs的库(有相见恨晚的感觉);也有一些库,,属于没有接触过的,可以在《Python标准库》里进行查询到相应的介绍和应用。

1、atexit:允许注册在程序退出时调用的函数!(标准库14.11章)https://docs.python.org/2/library/atexit.html

那么,什么时候用atexit, os._exit(), sys.exit(), sys.exitfunc 那?

首先,os._exit() 和 sys.exit() 都是直接退出,后面代码不执行的;

import sys print "hello" sys.exit(1) print "there"

代码退出,结果是 打印了 "hello"


区别在于, sys.exit()是触发了一个SystemExit 异常的,那么就可以捕获这个异常,来进行相应的操作;


import sysprint "hello"try:    sys.exit(1)except SystemExit:    print "world"
而 os._exit()是直接退出,后续代码不执行,调用的是C语言的 _exit()

另一个 sys.exitfunc,其实atexit后台代码就是调用了sys.exitfunc,这个是代码调用退出结束前,调用 

import sys def exitfunc():    print "world" sys.exitfunc = exitfunc print "hello"sys.exit(1)print "there"

这个代码,退出后,"there"是不会打印的,但是在退出前,后调用exitfunc,打印 "world"

而atexit是可以注册多个退出函数,并向注册的传递函数传递参数。这对于妥善的断开数据库连接,删除临时文件等可能很有用。不用为需要释放的资源维护一个特殊的列表,完全可以对于每个资源注册一个单独的清理函数。

import atexitdef my_clean(name):    print 'my clean (%s)' % nameatexit.register(my_clean, 'first')atexit.register(my_clean, 'second')atexit.register(my_clean, 'third')

退出函数会按注册的逆序来调用,这个方法以模块导入顺序(相应的,也就是注册其atexit函数的顺序)的逆序完成模块的清理,这会减少依赖冲突。

my clean (third)my clean(second)my clean(first)




0 0
原创粉丝点击