为什么这个递归函数似乎打印出我期望的相反结果?(Why does this recursive function seem to print the reverse of what I expect?)

这是我的Python 2.7脚本。

import os.path, shutil def makeFolderName(num, dirBase='./interactive'): destDir= dirBase + '-' + str(num) + '/' if os.path.isdir(destDir): num += 1 makeFolderName(num) else: shutil.copytree(dirBase, destDir) print destDir return destDir folderName= makeFolderName(1) print folderName

这是打印输出。

./interactive-18/ ./interactive-17/ ./interactive-16/ ./interactive-15/ ./interactive-14/ ./interactive-13/ ./interactive-12/ ./interactive-11/ ./interactive-10/ ./interactive-9/ ./interactive-8/ ./interactive-7/ ./interactive-6/ ./interactive-5/ ./interactive-4/ ./interactive-3/ ./interactive-2/ ./interactive-1/ ====./interactive-1/

在该方法中,我认为如果destDir的值不是目录,它将只打印destDir 。 它会将num从最高值打印到最低值。

而folderName的值是最低的num ,而不是最高的。

我想让makeFolderName返回一个目录名,其中num比当前目录中的目录高一个。

我做错了什么?

This is my Python 2.7 script.

import os.path, shutil def makeFolderName(num, dirBase='./interactive'): destDir= dirBase + '-' + str(num) + '/' if os.path.isdir(destDir): num += 1 makeFolderName(num) else: shutil.copytree(dirBase, destDir) print destDir return destDir folderName= makeFolderName(1) print folderName

This is the printed output.

./interactive-18/ ./interactive-17/ ./interactive-16/ ./interactive-15/ ./interactive-14/ ./interactive-13/ ./interactive-12/ ./interactive-11/ ./interactive-10/ ./interactive-9/ ./interactive-8/ ./interactive-7/ ./interactive-6/ ./interactive-5/ ./interactive-4/ ./interactive-3/ ./interactive-2/ ./interactive-1/ ====./interactive-1/

In the method, I thought this would only print destDir if the value of destDir is not a directory. It instead prints num from its highest value to its lowest.

And folderName's value is the lowest num, not the highest.

I want makeFolderName to return a directory name where num is one higher than what exists in the current directory.

What a I doing wrong?

最满意答案

你的错误是你应该在递归调用后返回:

if os.path.isdir(destDir): num += 1 return makeFolderName(num) else: shutil.copytree(dirBase, destDir)

如果你不这样做,那么当makeFolderName返回这个函数时会继续运行下面的代码,那就是num的打印。 但由于它是在递归调用返回后完成的,因此您会看到相反的数字。

Your error is that you should return after the recursive call:

if os.path.isdir(destDir): num += 1 return makeFolderName(num) else: shutil.copytree(dirBase, destDir)

If you do not do that, then when makeFolderName returns this function will go on and run the following code, that is the print of num. But since it is done after returning from the recursive call, you see the numbers in reverse.

为什么这个递归函数似乎打印出我期望的相反结果?(Why does this recursive function seem to print the reverse of what I expect?)

这是我的Python 2.7脚本。

import os.path, shutil def makeFolderName(num, dirBase='./interactive'): destDir= dirBase + '-' + str(num) + '/' if os.path.isdir(destDir): num += 1 makeFolderName(num) else: shutil.copytree(dirBase, destDir) print destDir return destDir folderName= makeFolderName(1) print folderName

这是打印输出。

./interactive-18/ ./interactive-17/ ./interactive-16/ ./interactive-15/ ./interactive-14/ ./interactive-13/ ./interactive-12/ ./interactive-11/ ./interactive-10/ ./interactive-9/ ./interactive-8/ ./interactive-7/ ./interactive-6/ ./interactive-5/ ./interactive-4/ ./interactive-3/ ./interactive-2/ ./interactive-1/ ====./interactive-1/

在该方法中,我认为如果destDir的值不是目录,它将只打印destDir 。 它会将num从最高值打印到最低值。

而folderName的值是最低的num ,而不是最高的。

我想让makeFolderName返回一个目录名,其中num比当前目录中的目录高一个。

我做错了什么?

This is my Python 2.7 script.

import os.path, shutil def makeFolderName(num, dirBase='./interactive'): destDir= dirBase + '-' + str(num) + '/' if os.path.isdir(destDir): num += 1 makeFolderName(num) else: shutil.copytree(dirBase, destDir) print destDir return destDir folderName= makeFolderName(1) print folderName

This is the printed output.

./interactive-18/ ./interactive-17/ ./interactive-16/ ./interactive-15/ ./interactive-14/ ./interactive-13/ ./interactive-12/ ./interactive-11/ ./interactive-10/ ./interactive-9/ ./interactive-8/ ./interactive-7/ ./interactive-6/ ./interactive-5/ ./interactive-4/ ./interactive-3/ ./interactive-2/ ./interactive-1/ ====./interactive-1/

In the method, I thought this would only print destDir if the value of destDir is not a directory. It instead prints num from its highest value to its lowest.

And folderName's value is the lowest num, not the highest.

I want makeFolderName to return a directory name where num is one higher than what exists in the current directory.

What a I doing wrong?

最满意答案

你的错误是你应该在递归调用后返回:

if os.path.isdir(destDir): num += 1 return makeFolderName(num) else: shutil.copytree(dirBase, destDir)

如果你不这样做,那么当makeFolderName返回这个函数时会继续运行下面的代码,那就是num的打印。 但由于它是在递归调用返回后完成的,因此您会看到相反的数字。

Your error is that you should return after the recursive call:

if os.path.isdir(destDir): num += 1 return makeFolderName(num) else: shutil.copytree(dirBase, destDir)

If you do not do that, then when makeFolderName returns this function will go on and run the following code, that is the print of num. But since it is done after returning from the recursive call, you see the numbers in reverse.