2012-03-09 4 views
3

私はこの機能を持っている:グラインダー3用のjythonスクリプト内で 'yield'キーワードの使用に成功した人はいますか?

def ngrams(word): 
    for i in range(1, len(word) + 1): 
     yield word[:i] 

..and私はエラー

2012-03-09 19:37:31,928 ERROR worker-bootstrap: Error running worker process 
net.grinder.scriptengine.jython.JythonScriptExecutionException: SyntaxError: ('invalid syntax', ('C:\\grinder-3.7.1\\lib 
\\.\\nb-romg-file-store\\current\\grinder_test.py', 72, 15, '  yield word[:i] ')) 
     (no code object) at line 0 

を得ましたがyield仕事をする方法はありますか?私はjythonコンソールで同じ機能を試しました - 正常に動作する場合。

+2

使用しているJythonのバージョンはどれですか? – delnan

+1

これは* n * -gramsジェネレータではありません。プレフィックスジェネレータです。 –

答えて

5

旧バージョンのJythonでは、ジェネレータ(yieldキーワードを使用する関数)はデフォルトでは使用できません。この機能を有効にするには、ソースファイルの先頭に

from __future__ import generators 

を追加してください。これがうまくいかなければ、おそらく運が悪く、発電機はそのバージョンのJythonでは利用できません。その場合、あなたは、リストを使用して動作をシミュレートしようとすることができます:

def ngrams(word): 
    result = [] 
    for i in range(1, len(word) + 1): 
     result.append(word[:i]) 
    return result 

これは死んで醜いですが、それも最も古いPythonの実装で動作するはずです。

関連する問題