递归函数调用

问题描述:

我的函数的基本思想是:我试图复制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 

为什么功能不调用任何想法本身正确?

+1

使用getopt它的python内置它将满足您的需求。 –

+4

你将你的变量命名为你的函数 –

+1

'dotDotSlash =“../”'是同名的字符串'def dotDotSlash()'改变变量名或函数名。 – Nilesh

您覆盖了对该函数的引用。 Python不会区分函数的名称和任何其他对象的名称。请致电'../'别的东西,以免干扰。

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

无论如何,你可能只是沿着for i in range(sys.argv[2].count('../')): upOneDir()的方向做些事情。

+0

这个函数不需要返回任何东西 –

+0

谢谢,你为我节省了很多时间。这个for循环正是我所期待的。 – Greg

您正在命名与您的函数dotDotSlash()同名的变量dotDotSlash。将此变量的名称dotDotSlash = "../"更改为类似dotDotSlash_var = "../"