पायथन के intern
केवल तारों के लिए अंतर्निहित क्यों है? intern
को कक्षाओं में विस्तारित करना संभव है जो तुलनात्मक और तुलनीय हैं, है ना?गैर-तारों के लिए पायथन इंटर्न
उत्तर
चीजों को प्रशिक्षित करने का उद्देश्य उनके स्मृति पते की तुलना करके उनकी तुलना करने में सक्षम होना है; आप सुनिश्चित करते हैं कि आप कभी भी एक ही मान के साथ दो ऑब्जेक्ट्स नहीं बनाते (जब प्रोग्राम किसी ऑब्जेक्ट को किसी मौजूदा ऑब्जेक्ट के समान मान के साथ अनुरोध करता है, तो इसके बजाय इसे पूर्व-मौजूदा ऑब्जेक्ट का संदर्भ प्राप्त होता है)। इसकी आवश्यकता है कि जिन चीजों को आप इंटर्न कर रहे हैं वे अपरिवर्तनीय; यदि एक इंटर्न ऑब्जेक्ट का मूल्य बदल सकता है, तो पते से उनकी तुलना करना काम नहीं करेगा।
पायथन में, उपयोगकर्ता द्वारा परिभाषित कक्षा के उदाहरणों की अपरिवर्तनीयता को लागू करना संभव नहीं है, इसलिए उन्हें प्रशिक्षित करना सुरक्षित नहीं होगा। मुझे संदेह है कि मुख्य सैद्धांतिक कारण इंटर्न कक्षा के उदाहरणों को कवर नहीं करता है।
अन्य अपरिवर्तनीय प्रकार में बनाया गया एक भी मशीन-स्तरीय संचालन पहले से ही (int, नाव, आदि), या अपरिवर्तनीय कंटेनरों कि परिवर्तनशील मूल्यों (टपल, frozenset) शामिल कर सकते हैं या तो तुलना के योग्य हैं। पूर्व को प्रशिक्षित करने की कोई आवश्यकता नहीं है, और बाद वाले को सुरक्षित रूप से प्रशिक्षित नहीं किया जा सकता है।
+1। "पायथन में, उपयोगकर्ता परिभाषित वर्ग के उदाहरणों की अपरिवर्तनीयता को लागू करना संभव नहीं है" - कितना दुर्भाग्यपूर्ण है। – ShreevatsaR
केवल स्ट्रिंग समर्थित हैं क्योंकि इंटर्निंग पॉइंटर-आधारित object identity test पर निर्भर करती है। अन्य प्रकार के वर्गों के हेशों की तुलना की जा सकती है, लेकिन ऑब्जेक्ट्स स्वयं कभी पहचान परीक्षण से मेल नहीं खाएंगे। यह सच है क्योंकि भले ही वे समान हो, वे एक ही वस्तु नहीं हैं।
जैसा कि मैं इसे समझता हूं, पॉइंटर-आधारित ऑब्जेक्ट पहचान परीक्षण * लाभ * है जो आपको इंटर्निंग द्वारा प्राप्त होता है, न कि चीजों को प्रशिक्षित करने के लिए आवश्यक है। यदि आप इंटर्न ऑब्जेक्ट्स से पूछ रहे हैं, तो आप मूल रूप से एक ही पहचान के समान मूल्य वाले किसी भी विचार पर विचार कर रहे हैं (जो मुझे विश्वास है कि नील जी क्या है जब वह "हैशबल और तुलनीय" कहता है)। बदले में यह आवश्यक है कि वे अपरिवर्तनीय हैं, जो पाइथन में कक्षा के उदाहरणों की प्रवर्तन योग्य संपत्ति नहीं है। मुझे लगता है कि यह मुख्य सैद्धांतिक कारण है कि यह समर्थित नहीं है। – Ben
@ बेन: यह मेरे प्रश्न की एक अच्छी व्याख्या है। साथ ही, आपका अंतिम बिंदु शायद इस प्रश्न का उत्तर है। एक उत्तर जोड़ने के लिए स्वतंत्र महसूस करें। –
कोई तकनीकी कारण यह है कि, कहते हैं, एक टपल प्रशिक्षु नहीं किया जा सका है, हालांकि मुझे लगता है कि कल्पना कर सकते हैं असली दुनिया इस स्ट्रिंग शाब्दिक की तुलना में कम मूल्य की है, और यह भी की होगी नहीं है उपयोगकर्ता द्वारा परिभाषित प्रकारों के साथ कम असली दुनिया मूल्य। इसे काम करना संभवतः प्रयास के लायक नहीं माना जाता है।
एक ट्यूपल की सामग्री उत्परिवर्तनीय हो सकती है। आंतरिक tuples अजीब व्यवहार का कारण बन सकता है। जैसे 'ए, बी = ([]), ([]); एक [0] .append ('foo') 'के आधार पर अलग-अलग परिणाम होंगे कि 'ए' और' बी' अलग-अलग tuples थे जो ट्यूपल इंटर्निंग कार्यान्वयन पर निर्भर करता है। स्पष्ट रूप से फोरट्रान के कुछ कार्यान्वयन [कुछ ऐसा ही किया] [http://stackoverflow.com/questions/1995113/strangest-language-feature/1995476#1995476)। –
@ पीटर: इंटर्निंग का पूरा विचार यह है कि आप इसे तब ही कर सकते हैं जब आपके द्वारा वर्णित कोई दुष्प्रभाव नहीं होता है। एक ट्यूपल को आंतरिक रूप से यह सुनिश्चित करने के लिए जांचना होगा कि सभी तत्व एक ही ऑब्जेक्ट्स हैं जो पहले से ही प्रशिक्षित टुपल के समान हैं, न केवल बराबर। यह वास्तव में तत्वों को पहले प्रशिक्षित करने का प्रयास कर सकता है (यदि संख्यात्मक प्रकार भी इंटर्न करने योग्य होते हैं तो यह अधिक उपयोगी होगा)। आपके उदाहरण में, टुपल्स बस एक संदर्भ साझा करने में सक्षम नहीं होंगे अगर उनमें एक ही सूची नहीं थी। कोई तकनीकी कारण नहीं है कि इस सब कुछ करने के लिए पायथन को संशोधित नहीं किया जा सका। – kindall
- 1. पर्मजेन स्पेस या रोल-माय-इंटर्न इंटर्न विधि का प्रयोग करें?
- 2. जावा स्ट्रिंग्स इंटर्न किए जाने पर?
- 3. जावा की स्ट्रिंग # इंटर्न() विधि कैसे लागू की गई है?
- 4. पायथन के लिए mod_python 2.7
- 5. पायथन statvfs के लिए प्रतिस्थापन?
- 6. सी ++ डेवलपर्स के लिए पायथन
- 7. पायथन के लिए कोलोरामा, विंडोज
- 8. पूर्णांक के लिए पायथन रेगेक्स?
- 9. पायथन के प्रेजेंटप्लिब के लिए एक प्रतिस्थापन?
- 10. वेबपृष्ठ के "पूर्वावलोकन" के लिए स्क्रैपिंग - पायथन
- 11. पायथन: सोने के धागे के लिए दंड
- 12. पायथन स्ट्रिंग और पार्स टुपल के लिए पायथन रेगेक्स
- 13. विम के लिए पायथन दुभाषिया निर्दिष्ट करना: पायथन कमांड
- 14. पायथन 2.7 या पायथन 3 (गति के लिए)?
- 15. पायथन: किसी के लिए परीक्षण, बूलियन मान के लिए परीक्षण
- 16. क्या जर्बी रनटाइम इंटर्न सभी तारों को बनाने का कोई तरीका है?
- 17. पायथन में भौतिकी के लिए सरल सिमुलेशन?
- 18. पायथन में कक्षाओं के लिए Lambda समारोह?
- 19. पायथन और जावास्क्रिप्ट के लिए आईडीई सुझाव
- 20. कुंजीपटल पढ़ने के लिए पायथन विधि?
- 21. वर्ग या फ़ंक्शन के लिए पायथन सजावट
- 22. पायथन के लिए बाहरी enum "public" बनाओ?
- 23. एक निश्चित लंबाई के लिए पायथन डेटाटाइप
- 24. आइपॉड सिंक्रनाइज़ेशन के लिए अच्छा पायथन पुस्तकालय
- 25. जावा पैकेज नामों के लिए पायथन रेगेक्स
- 26. पायथन: सूचियों की सूची के लिए विशिष्टता
- 27. फीटपुट 3 के लिए पायथन 3 प्रतिस्थापन?
- 28. पायथन? (सशर्त/टर्नरी) ऑपरेटर के लिए ऑपरेटर
- 29. पायथन प्रोग्रामर: रूबी सीखना (रेल के लिए)
- 30. समानांतर प्रक्रियाओं के लिए पायथन मल्टीप्रोसेसिंग
आप अपरिवर्तनीय वस्तुओं के लिए 'intern' जैसे ऑब्जेक्ट कैश बना सकते हैं। –
@ पीटर: आप सही हैं। 'Intern' का लाभ यह है कि उसके लिए सभी कोड स्वचालित रूप से जेनरेट किए जाते हैं, और बोनस के रूप में, यह तेज़ सी ++ में होता है। –
@NeilG मुझे ऐसा नहीं लगता है। AFAIK CPython पूरी तरह से सी में लिखा गया है, सी ++ नहीं। – glglgl