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我在控制台中尝试了相同的功能- 如果工作正常。

4

1 回答 1

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 实现中也应该可以工作。

于 2012-03-09T18:04:34.573 回答