दिलचस्प पोस्ट
मेवेन केंद्रीय भंडार को अक्षम करें एक जावा प्रोग्राम से .jar फ़ाइल निष्पादित करें क्यूटी क्रिएटर प्रोजेक्ट में बाह्य पुस्तकालय को जोड़ना एक उपलब्ध पोर्ट कैसे खोजें? एक सूची अधिकतम अधिकतम कितने आंकड़े रख सकता है? जेनकींस HTML प्रकाशक प्लगइन: जेनकिंस 1.643 के साथ कोई बाहरी लिंक नहीं है सफाई उपयोगकर्ता पासवर्ड क्या स्थानीय जेएस फ़ाइल गतिशील रूप से लोड करने का कोई तरीका है? एक वेक्टर को अवरोही क्रम में क्रमबद्ध करना ट्विटर फॉर्मेट में क्षैतिज रूप के अंदर फॉर्म इनलाइन? IE में किसी भी व्यक्ति को HTML पर सेट नहीं किया जा सकता जावास्क्रिप्ट से ASP.NET फ़ंक्शन कॉल करें? IIS अनुरोध समयबाह्य लंबे asp.net ऑपरेशन पर Asp.Net MVC 5 में लॉग-इन उपयोगकर्ता के UserID को प्राप्त करें लिनक्स घड़ी पर मिलीसेकंड का समय प्राप्त करने के लिए सी + + ठीक से काम नहीं करता

पायथन जनरेटर ऑब्जेक्ट क्लोन कैसे करें?

इस परिदृश्य पर विचार करें:

  #! / usr / bin / env python
 # - * - कोडिंग: यूटीएफ -8 - * -
 आयात ओएस

 walk = os.walk ('/ home')

 रूट, डायर, पैदल चलने वाली फाइलों के लिए:
     डार्स + फाइल में पाथनाम के लिए:
         प्रिंट os.path.join (रूट, पथनाम)

 रूट, डायर, पैदल चलने वाली फाइलों के लिए:
     डार्स + फाइल में पाथनाम के लिए:
         प्रिंट os.path.join (रूट, पथनाम) 

मुझे पता है कि यह उदाहरण थोड़े बेमानी है, लेकिन आपको यह विचार करना चाहिए कि हमें एक ही बार walk डेटा का उपयोग करना होगा। मेरे पास एक बेंचमार्क परिदृश्य है और सहायक परिणाम प्राप्त करने के लिए उसी walk डेटा का उपयोग अनिवार्य है।

मैंने walk2 = walk की कोशिश की है और दूसरे पुनरावृत्ति में क्लोन और उपयोग किया है, लेकिन उसने काम नहीं किया। सवाल है … मैं इसे कैसे कॉपी कर सकता हूँ? क्या यह कभी संभव है?

पहले ही, आपका बहुत धन्यवाद।

Solutions Collecting From Web of "पायथन जनरेटर ऑब्जेक्ट क्लोन कैसे करें?"

आप itertools.tee() उपयोग कर सकते हैं:

 walk, walk2 = itertools.tee(walk) 

ध्यान दें कि यह "महत्वपूर्ण अतिरिक्त संग्रहण" की आवश्यकता हो सकती है, क्योंकि दस्तावेज़ीकरण बताते हैं।

यदि आप जानते हैं कि आप हर उपयोग के लिए पूरे जनरेटर के माध्यम से पुनरावृत्त करने जा रहे हैं, तो आपको सूची में जनरेटर को अनारोल्ड करके और कई बार सूची का उपयोग करके सबसे अच्छा प्रदर्शन प्राप्त होगा।

walk = list(os.walk('/home'))

एक फ़ंक्शन परिभाषित करें

  def walk_home(): for r in os.walk('/home'): yield r 

या फिर यह भी

 def walk_home(): return os.walk('/home') 

दोनों इस तरह से उपयोग किया जाता है:

 for root, dirs, files in walk_home(): for pathname in dirs+files: print os.path.join(root, pathname) 

इस उत्तर का उद्देश्य अन्य उत्तरों के व्यक्त होने पर विस्तार / विस्तार करना है। यह जरूरी है कि आपका उद्देश्य क्या हासिल करना है, इसके आधार पर इसका समाधान भिन्न हो सकता है।

यदि आप कई बार os.walk के सटीक परिणाम पर पुनरावृत्त करना चाहते हैं, तो आपको os.walk की वस्तुओं से सूची शुरू करने की आवश्यकता होगी (यानी walk = list(os.walk(path)) )।

यदि आपको यह सुनिश्चित करना होगा कि डेटा समान रहता है, तो संभवतः आपका एकमात्र विकल्प हो। हालांकि, ऐसे कई परिदृश्य हैं जिनमें यह संभव नहीं है या वांछनीय नहीं है।

  1. यह संभव नहीं होगा list() एक आउटरनीय यदि आउटपुट पर्याप्त आकार का है (यानी list() करने का प्रयास करते हुए एक संपूर्ण फाइल सिस्टम आपके कंप्यूटर को फ्रीज कर सकता है)।
  2. यदि आप प्रत्येक उपयोग के पहले "ताजा" डेटा प्राप्त करना चाहते हैं, तो यह list() लिए वांछनीय नहीं है।

उस घटना में जो list() उपयुक्त नहीं है, आपको मांग पर अपने जनरेटर को चलाने की आवश्यकता होगी। ध्यान दें कि प्रत्येक उपयोग के बाद जेनरेटर निकाले जाते हैं, इसलिए यह मामूली समस्या है। अपने जनरेटर को कई बार "फिर से चलाने" के लिए, आप निम्न पैटर्न का उपयोग कर सकते हैं:

 #!/usr/bin/env python # -*- coding: utf-8 -*- import os class WalkMaker: def __init__(self, path): self.path = path def __iter__(self): for root, dirs, files in os.walk(self.path): for pathname in dirs + files: yield os.path.join(root, pathname) walk = WalkMaker('/home') for path in walk: pass # do something... for path in walk: pass 

पूर्वनिर्धारित डिजाइन पैटर्न आपको अपना कोड ड्रिल रखने की अनुमति देगा।