私はPythonで同じコードを何度も実行する必要を避けるために単純なループを実行しようとしていますが、エラーが発生し続けます。これは、ループが関数内で実行されているためです。 cosine_sim%d %i
が、それはまたに番号を追加する必要があります。それは見ることができるようにPythonの関数エラーの名前を変更するループ
def cosine_sim0(data0, data1):
tfidf = vectorizer.fit_transform([data0, data1])
return ((tfidf * tfidf.T).A)[0,1]
print(cosine_sim0(data0, data1))
def cosine_sim1(data1, data2):
tfidf = vectorizer.fit_transform([data1, data2])
return ((tfidf * tfidf.T).A)[0,1]
print(cosine_sim1(data1, data2))
def cosine_sim2(data2, data3):
tfidf = vectorizer.fit_transform([data2, data3])
return ((tfidf * tfidf.T).A)[0,1]
print(cosine_sim2(data2, data3))
def cosine_sim3(data3, data4):
tfidf = vectorizer.fit_transform([data3, data4])
return ((tfidf * tfidf.T).A)[0,1]
print(cosine_sim3(data3, data4))
は、ループが4つの別々の機能を作成する必要があります。これはコードがループ内で行われていないときに私がお見せしましょう、繰り返しフォーム説明するために、機能と印刷結果から始まるもの。アカウントにこれらの持って私は、次のコードを使用してループを構築することにより試み:
my_funcs = {}
for i in range(4):
def foo(data%d %i, data%d+1 %i):
tfidf = vectorizer.fit_transform([data%d %i, data%d+1 %i])
return ((tfidf * tfidf.T).A)[0,1]
foo.func_name = "cosine_sim%d" % i
my_funcs["cosine_sim%d" % i] = foo
globals().update(my_funcs) # Export to namespace
cosine_sim2(data1, data2)
はあなたのほとんどはおそらく推測できるとおり、エラー取り出さ状態invalid syntax
。問題がどこにあるの?
種類は、(適切にインデントされている場合、あなたが名前に%文字を使用することはできません)あなたはサイクルで関数を作成することができ、その後、あなたはfunc_name
属性にアクセスして、それの名前を変更することができますが、それはおそらくだ
:あなたは本当に、名前空間内の関数やdictのないを持っているしたい場合は、
globals()['my_func_name'] = my_func_object
の更新を行うことができます! :)これは、しばしばデコレータやクラス継承を介して行われます... [こちら]の詳細(https://stackoverflow.com/questions/2789460/python-add-to-a-function-dynamically)。とにかく、あなたのインデントは、最後のコードスニペット( 'for'ループ)でオフになっています。 'tfidf = ...'と 'return ...'は4つのスペースで字下げしなければなりません – jDo
答えてくれてありがとう@jDo、4つのスペースではどういう意味ですか?歓声、 –
[このような](http://pastebin.com/raw/M4fLtXR5)。ネスティングが一貫していることを示すために使用されるスペースの数が(ネスティング=他のものの範囲内に何かを配置する; C、javaなどの中括弧を考える)4スペースを使用する* * *はありません。 4スペースは、Pythonコミュニティが合意したように見えるPEP8スタイルのガイドラインです。 – jDo