Подтвердить что ты не робот

Что является результатом выражения 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.

4b9b3361

Ответ 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

Ответ 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']