Skip to main content
 首页 » 编程设计

python之如何在递归函数 Python 中使用列表

2025年05月04日20三少

我正在编写一个递归遍历文件系统的函数,并返回所有扩展名为 .txt 的文件的列表。

pass_test_func 参数只是一个可以运行和检查的函数(即文件是否大于 100 字节等) - nothing 函数(设置为它的默认),只是返回它的参数。

我的实现:

def visit(dname, pass_test_func=nothing):            
    directory = os.listdir(dname)                    
    byte_list = [] 
    for file in directory: 
        file_dir = os.path.join(dname, file) 
        if os.path.isfile(file_dir) and file_dir.lower().endswith('.txt'): 
            size = os.path.getsize(file_dir) 
            if pass_test_func(size): 
                byte_list.append(str(size) + ' ' + file_dir) 
        elif os.path.isdir(file_dir): 
            visit(file_dir, pass_test_func) 
    return byte_list 

我的问题是,当我在以下行中递归调用 visit 时

elif os.path.isdir(file_dir): 
                visit(file_dir, pass_test_func) 

byte_list 再次清空。我明白为什么会这样,但不知道如何解决。该列表必须在 visit 的定义中定义,所以每当我使用递归时,它总是会被重置,无论对不对?也许其他一些数据结构更适合,比如元组或字典?

请您参考如下方法:

您的函数返回 byte_list,因此在进行递归调用时只需附加返回值,而不是像您目前所做的那样将其丢弃:

elif os.path.isdir(file_dir):     
    byte_list += visit(file_dir, pass_test_func)