2012-03-09 40 views
3

我有這樣的功能:有沒有人使用Jython腳本里面「產量」關鍵字的磨牀3分得手?

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

..和我得到一個錯誤

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 2012-03-09 17:48:41

+1

這不是一個* n * -grams生成器,順便說一句。這是一個前綴生成器。 – 2012-03-09 18:17:49

回答

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實現工作。