जोआचिम सॉर का जवाब बहुत अच्छी तरह से बताता है कि list
वापस नहीं किया गया है। लेकिन यह सवाल छोड़ देता है कि ये फ़ंक्शन इटेटरेटर्स क्यों नहीं लौटाएंगे, जैसे कि iteritems
इत्यादि पायथन 2 में किया गया था।
एक पुनरावर्तक एक कंटेनर से अधिक प्रतिबंधित है। उदाहरण के लिए, एक पुनरावर्तक एक से अधिक पास की अनुमति नहीं देता है; यदि आप दूसरे पास का प्रयास करते हैं, तो आप पाएंगे कि यह खाली है। इसलिए, elem in cont
जैसे ऑपरेशन कंटेनर द्वारा समर्थित हैं, लेकिन इसे इटरेटर्स द्वारा समर्थित नहीं किया जा सकता है: एक बार जब आप यह जांच लें कि कोई तत्व इटरेटर में "अंदर" है, तो इटेटरेटर नष्ट हो जाता है!
दूसरी ओर, एक कंटेनर आमतौर पर को एक प्रतिलिपि बनाने की आवश्यकता होती है जैसे कि शब्दकोश की कुंजी से सूची बनाना।
view
ऑब्जेक्ट दोनों दुनिया में सर्वश्रेष्ठ है: यह एक कंटेनर के रूप में व्यवहार करता है, और फिर भी शब्दकोश की एक प्रति नहीं बनाता है! वास्तव में, यह एक प्रकार का वर्चुअल रीड-ओनली कंटेनर है जो अंतर्निहित शब्दकोश से जुड़कर काम करता है। मुझे नहीं पता कि यह मानक पायथन में कहीं और देखा गया है या नहीं।
संपादित करें:
@AntonyHatchkins: कारण यह एक जनरेटर समारोह वापस नहीं करता है कि यह एक तेजी से in
ऑपरेशन के लिए अनुमति नहीं होगी है। हां, in
जनरेटर फ़ंक्शंस के लिए काम करता है (जब आप उन्हें कॉल करते हैं)। अर्थात, आप ऐसा कर सकते हैं:
def f():
for i in range(10):
yield i
5 in f() # True
लेकिन in
की परिभाषा के अनुसार, अगर सही पक्ष एक जनरेटर है, अजगर सभी n
जनरेटर के आइटम के माध्यम से जाना होगा - O(n)
समय जटिलता के लिए अग्रणी। इसके बारे में आप कुछ भी नहीं कर सकते क्योंकि यह एक मनमाने ढंग से जनरेटर का एकमात्र सार्थक व्यवहार है।
दूसरी ओर, शब्दकोश दृश्य के मामले में, आप in
को किसी भी तरह से लागू कर सकते हैं, क्योंकि आप अपने द्वारा प्रबंधित डेटा के बारे में अधिक जानते हैं। और वास्तव में in
को हैश तालिका का उपयोग करके O(1)
जटिलता के साथ कार्यान्वित किया गया है। आप
>>> d = dict(zip(range(50000000), range(50000000)))
>>> 49999999 in d
True
>>> 49999999 in iter(d) # kinda how generator function would work
True
>>>
चल रहा है और देख कितनी तेजी से पहले in
दूसरा in
की तुलना में है द्वारा यह जांच कर सकते हैं।
इस stackoverflow पर एक महान जवाब है: http://stackoverflow.com/questions/8957750/what-are-python-dictionary-view-objects – Exthen
लगता यूआरएल मर चुका है की तरह। – Borealis