2015-12-01 223 views
1

我的函數的基本思想是:我試圖複製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

回答

1

您覆蓋了對該函數的引用。 Python不會區分函數的名稱和任何其他對象的名稱。請致電'../'別的東西,以免干擾。

此外,遞歸調用將需要返回,與return dotDotSlash()。此外,遞歸函數的全部要點是您向其發送參數,修改參數,然後再次將修改後的參數發送給該函數,直到它到達定義的停止點。我建議在嘗試創建遞歸版本之前嘗試使用循環來實現您的函數。

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

+0

這個函數不需要返回任何東西 –

+0

謝謝,你爲我節省了很多時間。這個for循環正是我所期待的。 – Greg

1

您正在命名與您的函數dotDotSlash()同名的變量dotDotSlash。將此變量的名稱dotDotSlash = "../"更改爲類似dotDotSlash_var = "../"