Что является результатом выражения yield в Python?
Я знаю, что выход превращает функцию в генератор, но каково возвращаемое значение самого выражения yield? Например:
def whizbang():
for i in range(10):
x = yield i
Каково значение переменной x
по мере выполнения этой функции?
Я прочитал документацию Python: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt и, похоже, не упоминается значение самого выражения yield.
Ответы
Ответ 1
Вы также можете использовать значения send
для генераторов. Если никакое значение не отправлено, то x
- None
, иначе x
принимает переданное значение. Вот некоторая информация: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features
>>> def whizbang():
for i in range(10):
x = yield i
print 'got sent:', x
>>> i = whizbang()
>>> next(i)
0
>>> next(i)
got sent: None
1
>>> i.send("hi")
got sent: hi
2
Ответ 2
Это происходит потому, что доходность генерирует значения "на лету" для получения дополнительной информации, пожалуйста, ознакомьтесь с приведенным ниже сайтом
https://freepythontips.wordpress.com/2013/09/29/the-python-yield-keyword-explained/
Ответ 3
Этот код произведет некоторый вывод
def test():
for i in range(10):
x = yield i
t = test()
for i in test():
print i
Ответ 4
Вот пример урока для получения буферизованного вывода, например, с большим cahce
#Yeild
def a_big_cache():
mystr= []
for i in xrange(100):
mystr.append("{}".format(i))
return mystr
my_fat_cache = a_big_cache()
def get_in_chunks(next_chunk_size):
output =[]
counter = 0
for element in my_fat_cache:
counter += 1
output.append(element)
if counter == next_chunk_size:
counter = next_chunk_size
next_chunk_size+= next_chunk_size
yield output
del output[:]
r = get_in_chunks(10)
print next(r)
print next(r)
Выход
[0, 1, 2, 3, 4, 5,
['10', '11', '12', > '13', '14', '15', '16', '17', '18', '19']