了不起的Python:atexit模块

atexit 是 python 的内置模块,可以直接import atexit导入,可用于程序结束时指定函数调用。

import atexit


def exit_func():
	print("code exiting!")
atexit.register(exit_func)
a = 1
b = 2
...

运行该程序后,会打印输出code exiting!
也可以使用修饰器的方法来写

import atexit


@atexit.register
def exit_func():
	print("code exiting!")
a = 1
b = 2
...

同样会输出code exiting!
如果不想输出,可以使用atexit.unregister()

import atexit


@atexit.register
def exit_func():
	print("code exiting!")
a = 1
b = 2
atexit.unregister(exit_func)
...

Python官方文档
在这里插入图片描述
如果之前没有注册则什么都不做,如果注册了多次,则会全部移除。
其中那句Equality comparisons(==) are used internally during unregistration指的是在unregister的时候 是根据 == 来判断的。
如:

import atexit
class MyClass:
	def __call__(self):
		print("exiting!")
	def __eq__(self, other):
		if isinstance(other, MyClass):
			return True
		return False

if __name__ == '__main__':
	f1 = MyClass()
	f2 = MyClass()
	atexit.register(f1)
	atexit.unregister(f2)

此时是不会有输出的,因为虽然unregister的是f2,但是f1 == f2。
如果打印一下f1 == f2,返回值是True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值