2017-06-21 10 views
0

外に私のコードは、このPythonのパス関数の引数機能

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

なぜ同じ名前の2つの別々の関数がありますか? – Kieran

+1

私はあなたが達成しようとしていることは分かっていませんが、正しい方向に向かないのは明らかです。あなたが解決しようとしている実際の問題(そして文脈)を説明してください。 –

+0

yea @ brunodesthuilliersが完全な画像なしで言ったことは、あなたが達成しようとしているものを見るのはかなり難しいです。 –

答えて

-1

前に説明したように、関数に正しい数の引数を渡さなかったことが主な原因です。

は(関数内で設定globvarの値を取得)あなたが欲しいものを行う必要があり、次のコードを参照してください:あなたは、2つの引数selfresponseを受信する機能set_globvar_to_oneを定義した

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

のようにエラーが発生していないようです。 set_globvar_to_one() – kim

+0

待っています...これはまだ分かっていますが、あなたはそれに引数を与えていませんか? –

+2

Pythonでは関数はオブジェクトなので、変数に代入するのは完全に正当です。 –

0

しかし、あなたは、あなたがそれに set_globvar_to_one()

2つの引数を追加し、あなたの問題が離れて行くの任意の引数を渡すされていないライン12上でそれを呼び出しているとき。ちょうどあなたの関数定義以下

set_globvar_to_one(self, response) 
+0

しかし、私はNameErrorを取得します:name 'self'は定義されていません – kim

+0

このクラスは大きなクラスですか? selfは、通常、そのクラスの関数が使用するクラスのインスタンスを示すために予約されています。あなたは、あなたがやろうとしていることをより多くの文脈で伝えることができますか? set_globvar_to_oneの引数にレスポンスを含める必要はありません – Colwin

0

、あなたは生の機能set_globvar_to_one()を呼び出し、そしてあまりにも引数なしでそれです。定義の最初の引数としてselfを渡しているので、私はこのブロックがclass定義内にあると仮定します。

だから、ちょうどset_globvar_to_one()の代わりにself.set_globvar_to_one(response)のようなものを試す必要があります。

P.S:responseは、set_globvar_to_oneの定義には必要ありません。さらに、ループ外でこの関数を定義する方が、より良いコーディング慣行になります。