Кто-нибудь преуспел в использовании ключевого слова yield в скриптах jython для Grinder 3? - PullRequest
3 голосов
/ 09 марта 2012

У меня есть эта функция:

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 - если работает нормально.

1 Ответ

5 голосов
/ 09 марта 2012

В более старых версиях 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.

...