2016-04-05 25 views
-3

ループ内で変数xyを指定して、Pythonでループを実行しようとしています。私は、次のループを実行すると:Pythonのループ内で変数が認識されない

my_funcs = {} 
    for i in range(len(data) - 1): 
     def foo(x, y): 
      x = data[i]['body'] 
      y = data[i+1]['body'] 
      tfidf = vectorizer.fit_transform([x, y]) 
      return ((tfidf * tfidf.T).A)[0,1] 


     foo.func_name = "cosine_sim%d" % i 
     my_funcs["cosine_sim%d" % i] = foo 
     print(foo(x,y)) 

を私は奇妙なエラーが表示されます。x is not definedを行print(foo(x,y))私はx = data[i]['body']と述べているので、これが起こっされる可能性がありますなぜ地球上の任意のアイデアに?事前

+0

なぜあなたは、ループ内の関数を定義していますか? 'x'はその関数内でのみ定義されているので、' foo(x、y) 'は' x 'が何であるかを知りません –

+0

インデント.... – miradulo

+0

エラーを生成する行については言及していませんが、値を割り当てずに 'x'を参照しようとしているので、' x = data [i] ['body'] 'それはあなたの関数の中にあり、printステートメントは関数 –

答えて

2

おかげで他のすべてが正しい場合は、私はあなたがループの外でその方法を動かすべきだと思います。

あなたはfooの中にxしか定義していないので、print行はそれについて知りません。プラス、あなたはとにかくfooxパラメータを上書きした

def foo(x, y): 
    tfidf = vectorizer.fit_transform([x, y]) 
    return ((tfidf * tfidf.T).A)[0,1] 

my_funcs = {} 
for i in range(len(data) - 1): 
    x = data[i]['body'] 
    y = data[i+1]['body'] 
    foo.func_name = "cosine_sim%d" % i 
    my_funcs["cosine_sim%d" % i] = foo 
    print(foo(x,y)) 
+0

は素晴らしい@ cricket_007で動作します! –

関連する問題