python - 递归函数调用

标签 python recursion

我的函数的基本思想是:我试图复制unix命令“cd ../”(这会导致选择父目录),但是我希望能够输入“cd ../”。 ./"(作为命令行参数)。

所以我正在尝试递归调用。该函数将查找字符串是否包含“../”,如果包含,则调用我的函数 upOneDir() (这将有效地将程序的目录更改为父目录),然后调用自身 (dotDotSlash())。

def dotDotSlash():
    s = sys.argv[2]
    dotDotSlash = "../"

    if (s.find(dotDotSlash) == -1):
        print "not found"

    else:
        print "found ../ at: "
        print s.find(dotDotSlash)
    upOneDir()
    dotDotSlash()

当我尝试输入“cd ../../”时,该函数仅执行一次,然后给出以下错误:

Traceback (most recent call last):
  File "test3.py", line 59, in <module>
    dotDotSlash()
  File "test3.py", line 40, in dotDotSlash
    dotDotSlash()
TypeError: 'str' object is not callable

关于函数为何无法正确调用自身的任何想法吗?

最佳答案

您覆盖了对该函数的引用。 Python 不区分函数的名称和任何其他对象的名称。将 '../' 称为其他名称,这样就不会干扰。

此外,还需要返回递归调用,返回 dotDotSlash()。此外,递归函数的要点在于,您向它发送一个参数,它修改该参数,然后再次将修改后的参数发送给函数,直到到达定义的停止点。我建议在尝试创建递归版本之前尝试使用循环实现您的函数。

无论如何,您可能只是按照 for i in range(sys.argv[2].count('../')): upOneDir() 的方式做一些事情。

关于python - 递归函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34014174/

相关文章:

python - 从字典中删除带有空字符串的键的有效方法

python - 我的 CSS 和图像没有显示 Django

c - 需要帮助创建没有多次返回的递归函数

使用辅助方法的 Java 排列递归

haskell - 在 Haskell 中执行 while 循环

python - 如何在 tic tac toe 游戏中检查是否连续 3 个

python - 如何在 Python 中使用 [] 拆分字符串

python - 使用 for 循环迭代文本文件中的各个单词

qt - 从绝对文件路径使用分层结构填充 QTreeWidget

asp.net-mvc - ASP.NET MVC View 中的递归