我是Python新手,我对以下代码有问题:
def dirs(currentDir):
exe = True
allDirs = os.listdir(currentDir)
print "Directories in %s:" % currentDir
for files in allDirs:
print files
direc = raw_input("Directory name?:")
if direc == "--q":
exe = False
elif currentDir == "/" and exe == True:
theDir = currentDir + direc
dirs(theDir)
elif currentDir != "/" and exe == True:
theDir = currentDir + "/" + direc
dirs(theDir)
print "should return"
为什么,当我键入--q时,prints应该返回多次? 如果目录是/home/username/,它将打印三次;如果目录是/home/它将打印两次,依此类推。 我还试图在if语句中返回:
^{pr2}$但后来什么也没发生。 有什么想法吗? 非常感谢!在
在我看来,这与函数的递归性有关。如果您在使用程序时输入两个目录,那么您将需要打印3个“should return”,因为有三个对dirs()的调用。在
从你的评论来看,这应该是正确的。在
讨论您提供的代码
请在你的帖子中添加更多的信息代码应该做什么。同时,在这里看到一个语义等价的函数,它做的事情和你的函数完全一样,但是我去掉了一些不必要的东西。在
^{pr2}$现在,只要不输入
q
,它就永远不会打印“should return”。在程序中的
exe
变量是什么?它什么也做不了。在如果执行第一个
if
子句,则将执行其他子句中的非,因为if/elif/.../else
是互斥子句。一旦您设置了exe = True
,exe
将不再被访问。因此,您可以将exe
从代码中完全删除。但是,也许您希望它做一些不同于阻止这些elif
子句的执行。在至于
should return
should return
。在q
,您将再次看到{q
之后打印,因为print语句在递归调用之后。在此外,我用
os.path.join()
替换了目录名处理逻辑,该逻辑适用于所有平台。在现在的行为是:
递归
比较这两个函数,看看在递归调用前后处理输出的效果:
^{4}$输出:
相关问题 更多 >
编程相关推荐