2011-08-29 13 views
6

वहाँ अगर एक अजगर शब्दकोश एक विशिष्ट कुंजी है की जाँच करने के लिए कई अलग अलग तरीके हैं के लिए एक अजगर शब्दकोश की जाँच, यानीविशिष्ट कुंजी

d = {} 

if key in d: 

if d.contains(key): 

if d.has_key(key): 

यह मूर्खतापूर्ण है एक भाषा के लिए आप एक ही बात कई अलग अलग तरीकों करने के लिए अनुमति देने के लिए , संयुक्त, प्रत्येक विधि कुछ पूरी तरह से अलग कर रहा था। क्या कोई उपर्युक्त तीन तकनीकों का विपरीत हो सकता है, वे अलग कैसे हैं?

+0

कभी नहीं देखा d.contains() पायथन में हटाई गई है, कि नई है? – steabert

+7

@steabert: शायद '__contains__' – Gerrat

+0

आह होना चाहिए, धन्यवाद, इसके बारे में नहीं सोचा था, मैं उन लोगों से स्पष्ट रहना चाहता हूं :) – steabert

उत्तर

5

d.__contains__(key) क्या प्रयोग किया जाता है यह key in d

has_key अब मान्य नहीं है (के बाद से in ऑपरेटर शब्दकोश की __contains__ विधि कॉल) और __contains__ के रूप में ही होता है

12

वे सभी समान हैं और वे सभी ऐतिहासिक कारणों से हैं, लेकिन आप should usekey in d

+0

मुझे नहीं लगता कि' __contains__'" ऐतिहासिक कारणों से "है? ऐसा नहीं है कि इसे जल्द ही किसी भी समय बहिष्कृत किया जा रहा है ... –

+0

शायद आप querent के लाभ के लिए आगे विस्तार करना चाहते हैं? –

+0

ज़रूर ... मैंने एक जवाब जोड़ा। –

7

विधि # 1 ऐसा करने का स्वीकार्य तरीका है। विधि # 2 वास्तव में मौजूद नहीं है, कम से कम पायथन के किसी भी संस्करण में जो मुझे पता है; मुझे यह देखने में दिलचस्पी होगी कि आपको यह कहां मिला। विधि # 3 स्वीकार्य तरीका होता था, लेकिन अब deprecated है।

तो वास्तव में केवल एक ही रास्ता है।

+1

शायद वह '__contains__' – Gerrat

+4

के बारे में सोच रहा था बस इस उत्तर पर पिगबैक करने के लिए ... यदि वह *' __contains__' के बारे में सोच रहा था - जवाब यह है कि यह 'बी' को लागू करने के लिए उपयोग की जाने वाली एक विशेष विधि है ... वीएम किसी भी 'बी इन' संदर्भों को 'ए .__' में कॉल में संदर्भित करता है, जिसमें दृश्यों के पीछे __ (बी) 'होता है, जैसे 'ए [बी]' का अनुवाद' a .__ getitem __ (बी) 'में किया जाता है। विशेष '__xxx__' विधियां हैं कि कैसे पाइथन सार्वजनिक रूप से प्रदान की जाने वाली सभी वाक्य रचनात्मक चीनी का एक साफ विधि-आधारित कार्यान्वयन प्रदान करता है। –

4
  • key in d यह करने के लिए स्वीकार किए जाते हैं जिस तरह से है ।

  • __contains__ जादू "विशेषता" (ref) है जो उपर्युक्त वाक्यविन्यास लागू करता है। अधिकांश, यदि नहीं, तो इस तरह के तरीकों के माध्यम से विशेष वाक्यविन्यास लागू किया जाता है। उदा।, with कथन __enter__ और __exit__ के माध्यम से लागू किया गया है। उपयोगकर्ता-परिभाषित कक्षाओं के लिए विशेष कार्यक्षमता प्रदान करने के लिए ऐसी विधियां मौजूद हैं।

  • has_key विधि नहीं रह गया है अजगर 3 में मौजूद है और 2.

+0

यह नोट करते हुए कि पायथन में वास्तव में निजी तरीके नहीं हैं ... – NullUserException

+0

@NullUserException: धन्यवाद, मैंने इसके लिए उचित नाम देखा। –

संबंधित मुद्दे