2012-05-22 67 views
40

मुझे पता है कि उपज एक जनरेटर में एक फ़ंक्शन बदल जाती है, लेकिन उपज अभिव्यक्ति का वापसी मूल्य क्या होता है? उदाहरण के लिए:पायथन में उपज अभिव्यक्ति का नतीजा क्या है?

def whizbang(): 
    for i in range(10): 
     x = yield i 

इस क्रिया को निष्पादित करने के रूप में चर x का मान क्या है?

मैंने पाइथन दस्तावेज पढ़ा है: http://docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt और उपज अभिव्यक्ति के मूल्य का कोई उल्लेख नहीं है।

+0

का बेशक, प्रयोगात्मक परिणाम यह है कि यह हमेशा "कोई नहीं" देता है लेकिन मैं बस इसकी पुष्टि करना चाहता हूं। – slacy

+2

आपका लिंक 'उपज' के दस्तावेज को एक कथन के रूप में इंगित करता है, लेकिन उदाहरण में आप एक ['उपज 'अभिव्यक्ति] (http://docs.python.org/reference/expressions.html#yield-expressions) का उपयोग कर रहे हैं कोड। –

उत्तर

51

आप जेनरेटर को send मान भी दे सकते हैं। यदि कोई मान नहीं भेजा जाता है तो xNone है, अन्यथा 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

वाह। उपज के लिए प्रलेखन में इसका उल्लेख क्यों नहीं किया गया है, यह पूरी तरह से मेरे बाहर है। मैं दस्तावेज़ बग कहां जमा करूं? – slacy

+0

@ स्लेसी उन दोनों के बारे में निश्चित नहीं है। – jamylak

+1

@ स्लेसी, हुह? यह उपज [उपज] के लिए प्रलेखन में उल्लिखित है (http://docs.python.org/reference/expressions.html#generator.send)। – senderle

-4

इस कोड को कुछ उत्पादन

def test(): 
    for i in range(10): 
     x = yield i 

t = test() 
for i in test(): 
    print i 
+0

क्या आप कृपया अपना उत्तर विस्तृत कर सकते हैं आपके द्वारा प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़ना? – abarisone

-3

यहाँ का उत्पादन करेगा है कहते हैं से एक बड़ा 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', '6', '7', '8', '9']

[ '10', '11', '12',> '13', '14', '15', '16', '17', '18', '19']

+1

डाउनवॉटेड क्योंकि यह प्रश्न के विषय तक भी नहीं पहुंचता है जो उपज कथन का परिणाम है। – tleb