Python:递归生成目录树时嵌套目录的print_tree为何隐式为False?
问题原因分析
最可能的原因是你在递归处理嵌套目录时,调用generate方法没有显式传递print_tree参数,导致嵌套调用时使用了方法定义的默认值False。
举个典型的错误写法:
class TreeGenerator: def generate(self, print_tree=False): # 处理当前目录 if print_tree: print(树形结构行) else: print("here") # 处理子目录时未传递print_tree参数 for sub_dir in self.sub_dirs: sub_dir.generate() # 这里默认用了print_tree=False
当你以print_tree=True调用顶层目录的generate时,顶层会走if分支,但处理子目录时调用generate()没有传参,就会用方法定义里的默认值False,所以子目录都会走else分支打印“here”。
解决方法很简单,递归调用时把当前的print_tree值传下去:
for sub_dir in self.sub_dirs: sub_dir.generate(print_tree=print_tree)
移除条件判断后,不管print_tree参数是什么,都会执行树形打印逻辑,所以嵌套目录也能正常输出完整树形。
内容的提问来源于stack exchange,提问作者MrChadMWood
相关产品推荐
相关产品推荐

