कार्यक्षमता के अनुसार, जैसा कि आपने देखा है, विचार बेहतर हैं। संगतता के अनुसार, वे बदतर हैं।
कुछ प्रदर्शन मेट्रिक्स, एक 64-बिट Ubuntu मशीन पर अजगर 2.7.2 से लिया:
>>> from timeit import timeit
एक खाली शब्दकोश से निपटना:
>>> emptydict = {}
>>> timeit(lambda: emptydict.viewkeys())
0.24384498596191406
>>> timeit(lambda: list(emptydict.viewkeys()))
0.4636681079864502
>>> timeit(lambda: emptydict.iterkeys())
0.23939013481140137
>>> timeit(lambda: list(emptydict.iterkeys()))
1.0098130702972412
दृश्य का निर्माण थोड़ा और अधिक महंगा है, लेकिन दृश्य का उपभोग करने वाले इटरेटर से काफी तेज़ है (थोड़ा तेज़ से थोड़ा अधिक)।
एक हजार तत्व शब्दकोश से निपटना:
>>> fulldict = {i: i for i in xrange(1000)}
>>> timeit(lambda: fulldict.viewkeys())
0.24295306205749512
>>> timeit(lambda: list(fulldict.viewkeys()))
13.447425842285156
>>> timeit(lambda: fulldict.iterkeys())
0.23759889602661133
>>> timeit(lambda: list(fulldict.iterkeys()))
15.45390510559082
एक ही परिणाम है, हालांकि कम चिह्नित; दृश्य का निर्माण बहुत महंगा है, लेकिन इसका उपभोग करना काफी निश्चित रूप से तेज़ है (15% तेज)।
>>> timeit(lambda: emptydict.keys())
0.2385849952697754
>>> timeit(lambda: fulldict.keys())
7.842105150222778
सारांश::
list(dict.viewkeys())
और list(dict.iterkeys())
साथ निष्पक्ष तुलना के लिए, dict.keys()
distinctlyfaster है यह एक व्यापार बंद है, बेहतर कार्यक्षमता (जिसे आप शायद ही कभी उपयोग करेंगे) और प्रदर्शन (जो केवल बहुत आपको — पर चिंता करने के लिए पर्याप्त रूप से महत्वपूर्ण होगा यदि आप इस तरह के प्रदर्शन मामलों की देखभाल कर रहे हैं, तो शायद आप पहले से ही numpy के साथ काम करने की आवश्यकता के क्षेत्र में हैं/scipy) बनाम बेहतर संगतता और मांसपेशी स्मृति उपयोग बनाम।
व्यक्तिगत रूप से, जब तक कि पहले से ही 2.7-केवल कार्यक्षमता के आधार पर या जब तक कि मैं रनटाइम पर्यावरण को पूरी तरह से नियंत्रित नहीं कर रहा हूं, मैं पाइथन 2 कोड में शब्दकोश दृश्यों से बचूंगा। यहां तक कि इन मामलों में, मेरी उंगलियां अभी भी view
के बजाय iter
टाइप करना चाहती हैं, इसलिए मैं इसे छोड़ देता हूं!
* "पायथन के पिछले संस्करणों के साथ संगतता के अलावा" * - बात यह है कि आप ऐसा कुछ नहीं कर सकते जिसे आप शायद ही अप्रासंगिक कह सकें। अन्यथा, हर कोई Python3.2 का उपयोग कर रहा है पहले से ही – vartec
@vartec यह अप्रासंगिक नहीं है, लेकिन यह स्पष्ट है। –
लेकिन फिर फिर से, 'iterkeys()' के अलावा 'viewkeys()' पर लाभ नहीं है। – vartec