- 35
- 0
写了个函数实现递归的查找文件或者文件夹,但是返回值一值为None,代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import argparse
from collections import deque
def findFile1(path, file):
'''To implent the simple functions like linux command -- find.'''
# Depth First Search
with os.scandir(path) as entryDir:
for entry in entryDir:
if entry.is_file(follow_symlinks=True) and entry.name == file:
print(entry.path)
return entry.path # print能正常输出结果,但是return却是None,为什么?
if entry.is_dir(follow_symlinks=True):
if entry.name == file:
print(entry.path)
return entry.path
else:
findFile1(path=entry.path, file=file)
# return findFile1(path=entry.path, file=file) 这里用return的时候print的输出都没了,这是为什么
if __name__ == '__main__':
parser = argparse.ArgumentParser('To implent the simple functions like linux command -- find.')
parser.add_argument('-p', '--path', type=str, help='the root directory to find file.')
parser.add_argument('-f', '--file', type=str, help='the file or dir to find.')
args = vars(parser.parse_args())
path = args['path']
file = args['file']
res = findFile1(path, file)
print(res)
运行函数:
$ python D:\scripts\funny\find_file.py -p D:\sublime_coding -f notes.py
D:\sublime_coding\matplotlib\notes.py
None
#当递归那一步使用 return findFile1(path=entry.path, file=file) 时,返回结果直接为None了,print输出都没了
$ python D:\scripts\funny\find_file.py -p D:\sublime_coding -f notes.py
None
请教问题出在哪里,谢谢!
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
月牙笑眼 普通会员 1楼
递归深度优先查找(DFS)是一种在图中搜索一个节点的方法,它的基本思想是从起始节点开始,沿着路径向前遍历,同时记录每一步的路径。DFS通常用于解决许多问题,例如遍历图中的所有节点,寻找从一个节点到另一个节点的最短路径,或者寻找图中的所有连通分量。
在递归深度优先查找中,可能会出现返回值的问题。当递归到达叶子节点时,没有子节点需要进一步搜索,这时递归将停止。但是,如果我们没有处理这种情况,那么递归深度优先查找可能会无限制地进行下去,导致程序崩溃。
例如,假设我们有一个有向图,其中每个节点都有一对邻接节点。如果我们使用递归深度优先查找来寻找一个节点的邻居,那么每次我们都会访问到这个节点的每个邻居,这可能会导致大量的内存使用和CPU使用。
为了避免这个问题,我们可以使用一种称为“深度优先搜索”的方法,它可以避免无限制地访问邻接节点。深度优先搜索首先访问一个节点,然后沿着这个节点的邻居进行递归搜索。当递归到达叶子节点时,函数将返回一个包含所有邻居的列表,而不是遍历所有的邻接节点。
此外,我们还可以使用一个变量来记录当前的深度,以避免重复访问已经访问过的节点。在递归搜索中,我们每次递归访问一个节点时,都将当前的深度加1。当递归到达叶子节点时,我们将当前的深度加1,并继续递归搜索下一个节点。这样,我们就可以确保只访问已经访问过的节点,而不会重复访问它们。
总的来说,递归深度优先查找可能会返回大量的结果,但如果正确处理,我们就可以避免这个问题,保证结果的唯一性。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
