2016-07-05 3 views
6

के लिए मैं समझता हूँ कि क्या in ऑपरेटर इस कोड में करता है:अजगर अभिव्यक्ति में कीवर्ड 'में' बनाम में पाश

some_list = [1, 2, 3, 4, 5] 
print(2 in some_list) 

मैं यह भी समझता है कि i इस कोड में सूची के प्रत्येक मान पर ले जाएगा :

for i in [1, 2, 3, 4, 5]: 
    print(i) 

मैं उत्सुक हूँ अगर for पाश में प्रयोग किया जाता in ऑपरेटर पहले कोड में इस्तेमाल किया in ऑपरेटर के रूप में एक ही है।

+2

डुप्लिकेट या संबंधित: http://stackoverflow.com/q/25573715/1639625 –

+1

'in' और' for..in' दो अलग-अलग भाषा संरचनाएं हैं। – deceze

उत्तर

11

वे एक ही अवधारणा हैं लेकिन एक ही ऑपरेटर नहीं हैं।

print(2 in some_list) उदाहरण में, in एक ऑपरेटर है जो कई अलग-अलग स्थितियों को संभालता है। Python docs for the in operator विवरण दें: x in yy.__contains__(x) पर कॉल करें y में __contains__ सदस्य फ़ंक्शन है। अन्यथा, x in yy.__iter__() के माध्यम से x खोजने के लिए पुन: प्रयास करता है, या y.__getitem__(x) पर कॉल करता है यदि __iter__ मौजूद नहीं है। जटिलता पुराने कोड के साथ-साथ नए कोड — __contains__ के लिए निरंतर सदस्यता परीक्षण प्रदान करना है, यदि आप अपनी कक्षाओं को लागू कर रहे हैं तो आप क्या चाहते हैं।

for लूप में, in केवल एक मार्कर है जो लूप-इंडेक्स वैरिएबल को जो कुछ भी आप लूप कर रहे हैं उससे अलग करता है। Python docs for the for loop अर्थशास्त्र पर चर्चा करें: in के बाद जो कुछ भी आता है उसका मूल्यांकन एक लूप की शुरुआत में एक इटरेटर प्रदान करने के लिए किया जाता है। लूप बॉडी फिर इटरेटर के प्रत्येक तत्व के लिए चलता है (break या अन्य नियंत्रण-प्रवाह परिवर्तन को छोड़कर)। for कथन __contains__ या __getitem__ के बारे में चिंता नहीं करता है।

संपादित @Kelvin एक अच्छा बिंदु बनाता है: आप अपने खुद के नई शैली वर्गों (class foo(object)) के संबंध में in के व्यवहार को बदल सकते हैं:

+1

अपवॉट क्योंकि आप '__contains__' –

+0

को परिभाषित करके पहले प्रकार के' इन' के व्यवहार को बदल सकते हैं जिस तरह से यह शब्द है, मेरा मतलब है कि ऑपरेटर और कीवर्ड अलग-अलग चीजें हैं हालांकि मैं तर्क दूंगा कि यह लगभग समान है या ऑपरेटर हैं कीवर्ड भी – syntonym

+0

@ सिंटोनिम फिक्स्ड - धन्यवाद :) – cxw

0

नहीं, यह वही नहीं है। आपके पहले उदाहरण में in परीक्षण सदस्यता के लिए एक परीक्षण है और एक सत्य मूल्य देता है। यह in== या is के अनुक्रमिक एनालॉग के रूप में सोचा जा सकता है (__contains__ लागू किया गया है) के आधार पर।

आपके दूसरे उदाहरण में in पुनरावृत्ति व्याकरण का हिस्सा है; यह अस्थायी रूप से आपके चयनित चर i को प्रत्येक आइटम में अस्थिर रूप से बांधता है। यह in असाइनमेंट ऑपरेटर = के क्रमिक एनालॉग के रूप में सोचा जा सकता है।

0

नहीं, हालांकि वे दोनों एक ही शब्द का उपयोग करते हैं जो वे अलग-अलग चीजें करते हैं। in दोनों मामलों में एक वाक्यविन्यास संरचना है, उदा। यह किसी ऑब्जेक्ट का नाम नहीं है और इसे बदला नहीं जा सकता है। आप here और here प्रत्येक की वाक्य रचनात्मक परिभाषा देख सकते हैं। जैसा कि आप देख सकते हैं कि नाम हार्डकोड हैं और उनका कोई संबंध नहीं है।

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