Jaki jest wynik wyrażenia yield w Pythonie?
Wiem, że wydajność zamienia funkcję w generator, ale jaka jest wartość zwracana samego wyrażenia wydajności? Na przykład:
def whizbang():
for i in range(10):
x = yield i
Jaka jest wartość zmiennej x
podczas wykonywania tej funkcji?
Przeczytałem dokumentację Pythona: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt i wydaje się, że nie ma wzmianki o wartości samego wyrażenia yield.
3 answers
Można również send
wartości do generatorów. Jeśli nie zostanie wysłana żadna wartość, to x
jest None
, w przeciwnym razie x
przejmuje wysłaną wartość. Oto kilka informacji: 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 04:24:21
Oto przykład wydajności, aby dać buforowane wyjście z powiedzmy dużego 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)
Wyjście To
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['10', '11', '12',> '13', '14', '15', '16', '17', '18', '19']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-21 06:30:14
Ten kod da jakieś wyjście
def test():
for i in range(10):
x = yield i
t = test()
for i in test():
print i
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-17 13:37:59