回调函数原理与Python实现

2016-07-22 董付国 Python小屋 Python小屋

回调函数的定义与普通函数并没有本质的区别,但一般不直接调用,而是作为参数传递给另一个函数,当另一个函数中触发了某个事件、满足了某个条件时就会自动调用回调函数。下面的代码用来删除可能会包含只读属性文件的文件夹,主要演示回调函数的原理和用法。

import os

import stat


def remove_readonly(func, path):                #定义回调函数

    os.chmod(path, stat.S_IWRITE)               #删除文件的只读属性

    func(path)                                  #再次调用刚刚失败的函数


def del_dir(path, onerror=None):

    for file in os.listdir(path):

        file_or_dir = os.path.join(path,file)

        if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):

            del_dir(file_or_dir)                #递归删除子文件夹及其文件

        else:

            try:

                os.remove(file_or_dir)           #尝试删除该文件,

            except:                             #删除失败

                if onerror and callable(onerror):

                    onerror(os.remove, file_or_dir)#自动调用回调函数

                else:

                    print('You have an exception but did not capture it.')

    os.rmdir(path)                                #删除文件夹


del_dir("E:\\old", remove_readonly)               #调用函数,指定回调函数