2017-05-04 14 views
0

私はPythonでnltkライブラリを使用しています。私の背景はJavaです。私が書いたコードのコンソール出力を理解できません。なぜ私の初期化変数tokensをリストにしても、Pythonは奇妙な形を返すのです。出力がリストを印刷しないのはなぜですか?

from nltk.tokenize import word_tokenize 
from nltk.corpus import stopwords 
import nltk 
def tokenize_sentence(sentence): 
    tokens=[] 
    tokens = word_tokenize(sentence) 

    tokens = (word for word in tokens if word not in \ 
       set(stopwords.words('english'))) 
    return tokens; 

a="John is an actor." 
print(tokenize_sentence(a)) 

出力:

<generator object tokenize_sentence.<locals>.<genexpr> at 0x10dc5b1a8> 

私は、toString()メソッドが定義されていないされているオブジェクトを印刷しようとすると、Javaが何に似たものとして、この出力を参照してください。

+5

カッコ内は、リストではなくジェネレータを生成します*。 'tokens'では'() 'の代わりに' [] 'を使うか、代わりに' list(tokenize_sentence(a)) 'を呼び出してください。 –

+3

'tokens'はリストではないので、リストを表示しません。 – user2357112

+0

@JimFasarakisHilliardの提案が両方とも機能しました。ありがとうございました – AV94

答えて

6

初期割り当ては型宣言ではありません。 Pythonのフリー変数にはがありません。型宣言はです。例えば、あなたは

x = 7 
x = [] 
x = "Hello" 

を書く...そして、すべての割り当てとX変更の種類を見ることができます。

この場合、トークンには3つの独立した割り当てがあります。これらはそれぞれ同じ方法で動作します。

  1. 右側の式を評価します。
  2. 左側の変数をその値に設定します。

変数の事前値は無視されます。 (単語の単語...)式をインラインジェネレータで作成し、トークンに割り当てると、以前の値がビットバケット(ガベージコレクション)に送信されました。その機能を反復するのではなく、ジェネレータを印刷すると、オブジェクトのPython表現が得られます。

Jim Fasarakis Hilliardすでに言及したように、リストが必要な場合は、リスト内包の構文を使用してください:かっこではなく角かっこ。また、以前の値のトークンでanythignを行うつもりでしたか?現時点では、私はこれらの割り当てが永続的な効果を持つとは思わない。

+0

バックグラウンドで何が起こるかを説明してくれてありがとう – AV94

関連する問題