के रूप में while लूप के लिए अजगर लेखन?

वोट
2

मैं सोच रहा हूँ, शिक्षा प्रयोजनों के लिए, चाहे वह के रूप में while लूप में अजगर में लूप के लिए सभी के पुनर्लेखन के लिए संभव है। सैद्धांतिक रूप से, अगर और जब तक प्रवाह नियंत्रण के न्यूनतम सेट है।

चारों ओर सर्च कर रहे हैं अतः छोरों के लिए आधारित सीमा के बारे में इस सवाल का पता चलता करने के लिए छोरों के लिए परिवर्तित जबकि अजगर में छोरों , जो स्पष्ट रूप से शुरू करने के रूप में संभव है और न खत्म होने वाली सूचकांक संपर्क में हैं। क्या दूसरे के बारे में छोरों के लिए के रूपों ? उदाहरण के लिए, अपने विभिन्न रूपों में एक सूची के माध्यम से पाशन के बारे में क्या?

24/01/2016 को 12:31
उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
5

हाँ, यह ऐसा करने के लिए संभव है, लेकिन यह शायद एक अच्छा विचार (कुछ लोग कह सकते है कि यह है नहीं है unpythonic )।

एक जब forकुछ अधिक पाश दोहराता का समर्थन करता है कि इटरेटर प्रोटोकॉल , आप उसके कार्यों को स्पष्ट रूप से नकल कर सकते हैं, और यह एक में बदलने के whileपाश। उदाहरण के लिए,

l = [1, 2, 3]                                                                                                                                                                                          

it = iter(l)                                                                    
while True:                                                                     
    try:                                                                        
        print next(it)                                                       
    except StopIteration:                                                       
        break                  

मुझे लगता है कि यह है बहुत बदसूरत :-)

24/01/2016 को 12:39
का स्रोत उपयोगकर्ता

वोट
3

@AmiTavory से जवाब देने के लिए जोड़ने के लिए - समस्या सामान्य स्थिति में आप यह नहीं जान सकते कि कितने आइटम एक जनरेटर निकलेगा है, यही कारण है कि आप सिवाय चाहिए है StopIterationजब थोड़ी देर के पाश का उपयोग कर। निम्न उदाहरण पर विचार करें:

import random

def mygen(): # we don't know how many times this will yield
    while True:
        x = random.choice([1,2,3,4,5])
        if x == 3:
            break
        yield x

# proper way
for x in mygen():
    print x

print

# ugly way
g = mygen()
while True:
    try:
        print next(g)
    except StopIteration:
        break  
24/01/2016 को 12:44
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more