2017-06-21 37 views
0

我的代碼是這樣設計蟒通函數的參數外功能

while True: 

    globvar = 0 
    def test(self, response): 
     #something 
     callback=self.set_globvar_to_one 

    def set_globvar_to_one(self, response): 
     global globvar 
     globvar = raw_input("Please enter 'hello':") 

    set_globvar_to_one() 

    if globvar.strip() == 'hello': 
     continue 
    else: 
     print 'Goodbye' 
     break 

但我得到以下錯誤

TypeError: set_globvar_to_one() takes exactly 2 arguments (0 given)

更新: 我想要得到的變量globvar varible即分配在功能上,並用它出側功能 問題是參數未定義在功能外

+3

爲什麼你有兩個具有相同名稱的獨立函數? – Kieran

+1

我不知道你在努力達成什麼目標,但你顯然不是朝着正確的方向前進......你應該解釋你試圖解決的實際問題(和上下文)。 –

+0

是什麼@brunodesthuilliers沒有完整的圖片說,很難看到你希望實現什麼。 –

回答

-1

如前所述,主要是因爲您沒有將正確數量的參數傳遞給該函數。

請看下面的代碼應該做你想要什麼(獲取變量globvar的函數內設置的值):

while True: 

     globvar = 0 

     def test(self, response): 
     #something 
     callback=self.set_globvar_to_one 

     def set_globvar_to_one(self, response): 
     global globvar 
     globvar = raw_input("Please enter 'hello':") 

     set_globvar_to_one("self","response") 

     if globvar.strip() == "hello": 
     continue 
     else: 
     print 'Goodbye' 
     break 
+0

錯誤甚至沒有發生在那裏。它在第12行的set_globvar_to_one() – kim

+0

等待...所以你知道這一點,但你沒有給它任何參數?....問題仍然存在,它需要兩個參數。 –

+2

在Python中,函數是一個對象,因此將它分配給一個變量是完全合法的。 –

0

您已經定義的函數set_globvar_to_one接收2個參數selfresponse

但是當你調用它12行,你不傳遞任何參數給它 set_globvar_to_one()

添加了兩個參數,你的問題就會迎刃而解。

set_globvar_to_one(self, response) 
+0

但後來我得到NameError:名稱'自我'未定義 – kim

+0

這是一個更大的類的一部分?自我通常被保留以表示該類的實例用於該類的實例。你可以在你想要做的事情上發表更多的背景。我看到沒有必要將響應包含在set_globvar_to_one的參數中 – Colwin

0

只需在下面的函數定義,你調用原始功能set_globvar_to_one(),而那也是不帶任何參數。由於您將自己作爲定義中的第一個參數傳遞,因此我假定此塊位於class定義中。

所以你應該嘗試像self.set_globvar_to_one(response)而不是隻是set_globvar_to_one()

P.S:在set_globvar_to_one的定義中我看不到任何需要response。此外,在循環之外定義這個函數將是一個更好的編碼習慣。