Python之递归

Python之递归

一、引子

​ 理解python递归之前需要明白函数返回的值,函数中没有写return语句,默认返回None。

1、函数没有return时,返回None
def a(n):
    print(n) 
print(a(3))

结果:

3
None
2、函数没写return返回值,返回None
def a(n):
    print(n) 
    return
print(a(3))

结果:

3
None

二、递归

​ 根据代码的顺序执行逻辑,结合递归的执行的逻辑,递归很好理解。递归的执行逻辑分为两个部分,递去和回归。我们通过下列代码和图片来理解整个过程。

def a(n):
    if n<=1:
        return 1
    b=a(n-1)  #loc
    print(b)
print(a(3))

结果:

1
None
None

代码执行过程:
在这里插入图片描述
上图为递归逻辑过程,其中红色线代表递去过程,绿色线代表回归过程。

代码是按由上至下的顺序执行的,这个不难理解,调用a(3)时,由于不满足n<=1的条件,代码执行过程如红色线1,从这个位置,调用a(2)开启了递归逻辑过程;a(2)也不满足n<=1的条件,调用a(1),代码执行过程如红线2;a(1)满足n<=1的条件,return 1,即开启回归的过程,回到a(2)函数中,把1赋值给b,所以第一个打印值为1;顺序执行到return None ,a(2)的返回值为None,回到a(3)函数中,把None赋给b,所以第二打印值为None;接着顺序执行,a(3)的返回值为None,所以最后输出的也为None值。

三、实际应用

​ 使用递归的删除文件夹中的所有文件,而不删除文件夹。在完成这个功能前,先需要理解**os.listdir()**函数,它能过返回文件加下所有文件的名称。

1、os.listdir()

​ 8515632023439999000021文件夹下有’事故责任认定证明’, ‘保险出险、索赔通知书’, '支付类资料’等文件。使用os.listdir()函数的例子如下:
在这里插入图片描述

import os 
path=r'./8515632023439999000021'
print(os.listdir(path))

结果:

['事故责任认定证明', '保险出险、索赔通知书', '支付类资料']

2、实现使用递归的删除文件夹中的所有文件,而不删除文件夹。

import os

def del_file(path):
    if not os.listdir(path):
        print('目录为空!')
    else:
        for i in os.listdir(path):
            path_file = os.path.join(path,i)  #取文件绝对路径
            print(path_file)
            if os.path.isfile(path_file):  #若是文件则删除
                os.remove(path_file)
            else:
                del_file(path_file)	#是文件夹则进行递归
                        
if __name__ == '__main__':
    path=r'./8515632023439999000021'
    del_file(path)

结果:

./8515632023439999000021\事故责任认定证明
./8515632023439999000021\事故责任认定证明\f3419645badcbe9d01b0187b87bbe2e98de9.jpg
./8515632023439999000021\保险出险、索赔通知书
./8515632023439999000021\保险出险、索赔通知书\b6e4d2f02f4b71268342921936f0b0eb8d15.jpg
./8515632023439999000021\支付类资料
./8515632023439999000021\支付类资料\8615632020439999000384_[20230714191404].zip

代码执行的逻辑为,首先判断目标文件夹是否为空文件,若不是空文件,则进一步判断文件夹是文件还是文件夹,若是文件则删除,若是文件夹则开始递归,直到文件夹下所有文件被删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值