Немного фона: Я пытался закодировать алгоритм «Решетка Эратосфена». По просьбе некоторых тонких (и очень терпеливых) программистов в чат-комнате StackOverflow Python я прочитал некоторую информацию о функции enumerate()
и нашел способ включить ее в свой код (да, я здесь очень новичок). До сих пор мой (работоспособные, возвращаю ожидаемый отклик) код выглядит следующим образом:У меня есть генератор в моей функции Python; как я могу вернуть измененный список?
def SieveErat(n):
numbers = [False]*2+[True]*(n-1)
for index, prime_candidate in enumerate(numbers):
if prime_candidate == True:
yield index
for x in xrange(index*index, n, index):
numbers[x] = False
primes = []
for x in SieveErat(150000):
primes.append(x)
print primes[10002]
Излишне говорить, что функция enumerate()
делает кодирование это гораздо, гораздо менее громоздкими, чем бы то ни были вложенные циклы у меня было раньше. Тем не менее, я боюсь, что я не понимая, что-то о enumerate()
, потому что, когда я попытался сократить этот код, включив в эту директиву функции, я продолжал получать errors- именно
File "SievErat.py", line 13
return numbers
SyntaxError: 'return' with argument inside generator
Я также попытался добавления все True
элементов в списке numbers
в инициализированный список primes
, но не нашел удачи.
Любые советы и советы были бы очень приветствуемыми.
um ... ваш код не содержит никаких «возвратных номеров», пожалуйста, покажите нам код, который вызывает ошибку, с которой вы сталкиваетесь. –
в python до 3.3 вы не можете «возвращать», а также 'yield' в той же функции, в python 3.3+ [return означает нечто совершенно иное в контексте генератора] (http://stackoverflow.com/questions/16780002/ return-in-generator-together-with-yield-in-python-3-3) –